day13-测试自动化之Selenium的元素定位

news2025/1/10 16:10:32

一、如何进行元素定位

        1.1.元素定位作用

                让程序操作指定元素,就必须先找到此元素

        1.2.html页面组成格式

        1.3.元素定位的概念

                元素定位就是通过元素的信息或元素层级结构来定位元素的。

二、浏览器开发者工具

        2.1.作用

                快速定位元素,查看元素信息

        2.2.谷歌浏览器的开发者工具

三、定位元素依赖因素

        1).标签名

        2).属性

        3).层级

        4).路径

四、元素定位方式

        4.1.id定位

                1).说明:id定位就是通过元素的id属性来定位元素,HTML规定id属性在整个HTML文档中必须是唯一的

                2).前提:元素有id属性

                3).id定位方法:element=driver.find_element(By.lD,id)

                4).代码实现步骤

                        4.1).导包

                        4.2).获取浏览器驱动对象

                        4.3).打开url

                        4.4).查找对应的对象

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # 打开页面
    driver.get("网页地址")

    # # 查找用户名元素
    # # 已过时
    # # username = driver.find_element_by_id("username1")
    # # 推荐使用
    # username = driver.find_element(By.ID, "username1")
    #
    # # 查找密码元素
    # # 已过时
    # # password = driver.find_element_by_id("password")
    # # 推荐使用
    # password = driver.find_element(By.ID, "password")
    #
    # # 用户名输入admin send_keys("内容")
    # username.send_keys("admin")
    #
    # # 密码输入123456
    # password.send_keys("123456")

    # 查找元素和输入可以合为一步
    driver.find_element(By.ID, "username1").send_keys("admin")
    driver.find_element(By.ID, "password").send_keys("123456")

    # 睡眠3秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

        4.2.name定位

                1).说明:name定位就是根据元素name属性来定位元素,HTML文档中name的属性值是可以重复的

                2).前提:元素有name属性

                3).name定位方法:element=driver.find_element(By.NAME,name)

                4).代码实现步骤

                        4.1).导包

                        4.2).获取浏览器驱动对象

                        4.3).打开url

                        4.4).查找对应的对象

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # 打开页面
    driver.get("网页地址")

    # # 查找用户名元素
    # # 已过时
    # # username = driver.find_element_by_name("username")
    # # 推荐使用
    # username = driver.find_element(By.NAME,"username")
    #
    # # 查找密码元素
    # # 已过时
    # # password = driver.find_element_by_name("command")
    # # 推荐使用
    # password = driver.find_element(By.NAME, "command")
    #
    # # 用户名输入admin send_keys("内容")
    # username.send_keys("admin")
    #
    # # 密码输入123456
    # password.send_keys("123456")

    # 查找元素和输入可以合为一步
    driver.find_element(By.NAME, "username").send_keys("admin")
    driver.find_element(By.NAME, "command").send_keys("123456")

    # 睡眠3秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

        4.3.class_name定位

                1).说明:clasS_name定位就是根据元素class属性来定位元素,HTML通过使用class来定义元素的样式

                2).前提:元素有class属性

                3).注意:如果class有多个属性值,只能使用其中一个

                4).class_name定位方法:element= driver.find_element(By.CLASS_NAME,class_name)

                5).代码实现步骤

                        5.1).导包

                        5.2).获取浏览器驱动对象

                        5.3).打开url

                        5.4).查找对应的对象

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # 打开页面
    driver.get("网页地址")

    # # 查找用户名元素
    # # 已过时
    # # username = driver.find_element_by_class_name("text")
    # # 推荐使用
    # username = driver.find_element(By.CLASS_NAME,"text")
    #
    # # 查找密码元素
    # # 已过时
    # # password = driver.find_element_by_class_name("textarea")
    # # 推荐使用
    # password = driver.find_element(By.CLASS_NAME, "textarea")
    #
    # # 用户名输入admin send_keys("内容")
    # username.send_keys("admin")
    #
    # # 密码输入123456
    # password.send_keys("123456")

    # 查找元素和输入可以合为一步
    driver.find_element(By.CLASS_NAME, "text").send_keys("admin")
    driver.find_element(By.CLASS_NAME, "textarea").send_keys("123456")

    # 睡眠3秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

        4.4.tag_name定位(了解)

                1).说明

                        1tag_name定位介绍通过标签名来定位

                        1.2).HTML本质介绍由不同的tag组成,每一种标签一般在页面中会存在多个,所以不方便进行精确定位

                        1.3).一般很少使用

                2).tag_name定位方法:element =driver.find_element(By.TAG_NAME,tag_name)

                3).注意:如果存在多个相同标签,则返回符合条件的第一个标签

                4).代码实现步骤

                        4.1).导包

                        4.2).获取浏览器驱动对象

                        4.3).打开url

                        4.4).查找对应的对象

"""
    需求:
        使用tag_name定位方式,输入用户ID为admin
    方法:
        element =driver.find_element(By.TAG_NAME,tag_name) #定位元素方法
"""

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # 打开页面
    driver.get("网页地址")

    # # 查找用户ID元素
    # # 已过时
    # # username = driver.find_element_by_tag_name("input")
    # # 推荐使用
    # username = driver.find_element(By.TAG_NAME,"input")

    # 查找元素和输入可以合为一步
    driver.find_element(By.TAG_NAME, "input").send_keys("admin")

    # 睡眠3秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

        4.5.link_text定位

                1).说明:定位超链接标签

                2).link_text定位方法:element=driver.find_element(By.LINK_TEXT,"标签内容”)

                3).注意

                        3.1).只能定位a标签

                        3.2).link_text定位元素内容必须全部匹配(没有全部匹配会报错)

                4).代码实现步骤

                        4.1).导包

                        4.2).获取浏览器驱动对象

                        4.3).打开url

                        4.4).查找对应的对象

"""
    需求:
        使用link_text定位方式,点击百度页面的新闻a标签
    方法:
        element =driver.find_element(By.LINK_TEXT, "标签里的内容") #定位元素方法
"""

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # 打开页面
    driver.get("https://baidu.com/")

    # 查找元素并点击可以合为一步
    driver.find_element(By.LINK_TEXT, "新闻").click()

    # 睡眠3秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

        4.6.partial_link_text定位

                1).说明:定位超链接标签

                2).partial_link_text定位方法:element=driver.find_element(By.PARTIAL_LINK_TEXT,模糊内容")

                3).注意

                        3.1).只能定位a标签

                        3.2).partial_link_text定位元素的内容可以为模糊部分值,但是必须能代表唯一性

                        3.3).没有唯一代表,默认操作符合条件的第一个元素

                4).代码实现步骤

                        4.1).导包

                        4.2).获取浏览器驱动对象

                        4.3).打开url

                        4.4).查找对应的对象

"""
    需求:
        使用partial_link_text定位方式,点击百度页面的新闻a标签
    方法:
        element =driver.find_element(By.PARTIAL_LINK_TEXT, "模糊内容") #定位元素方法
"""

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # 打开页面
    driver.get("https://baidu.com/")

    # 查找元素并点击可以合为一步
    driver.find_element(By.PARTIAL_LINK_TEXT, "新").click()

    # 睡眠3秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

        4.7.XPath

                1).说明

                        1.1).XPath即为XMLPath的简称,它是一门在XML文档中查找元素信息的语言

                        1.2).HTML可以看做是XML的一种实现,所以Selenium用户可以使用这种强大的语言在Web应用中定位元素

                        1.3).XML:一种标记语言,用于数据的存储和传递,后缀.xml结尾

                2).XPath的定位方法:element = driver.find_element(By.XPATH, xpath)

                3).XPath常用定位策略

                        3.1).路径-定位

                                1.绝对路径:从最外层元素到指定元素之间所有经过元素层级的路径

                                        (1).绝对路径以/html根节点开始,使用/来分隔元素层级;如:/html/body/div/fieldset/p[1]/input

                                        (2).绝对路径对页面结构要求比较严格,不建议使用

                                        (3).语法:以单斜杠开头逐级开始编写,不能跳级,如:/html/body/div/p[1]/input

                                2.相对路径:匹配任意层级的元素,不限制元素的位置

                                        (1).相对路径以//开始,后面跟元素名称

                                        (2).格式://input或者//*---->//input[@id='password'](路径+属性)

                                        (3).语法:以双斜杠开头,双斜杠后边跟元素名称,不知元素名称可以使用*代替,如://input

                        3.2).利用元素属性-定位----->此方法不行就使用(路径+属性)

                                1.语法:在XPath中,所有的属性必须使用@符号修饰,如://*[@id="id值]

                        3.3).属性与逻辑结合-定位

                                1.语法://*[@id="id值’and@属性='属性值]

                        3.4).层级与属性结合-定位

                                1.语法://*[@id=父级id属性值']/input

                        3.5).提示

                                1.一般使用指定标签名称,不使用*代替,效率比较慢

                                2.无论是绝对路径和相对路径,/后面必须为元素的名称或者*

                                3.扩展:在企业中,一般使用相对路径

                4).代码

"""
    使用绝对路径定位谷歌搜索框,并输入:csdn
    暂停两秒钟
    点击打开第一个csdn官网
"""

# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # # 打开页面
    # driver.get("https://baidu.com/")
    #
    # 使用绝对路径定位谷歌搜索框,并输入:csdn  绝对路径
    driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input").send_keys("csdn")
    driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input").click()

    # # 睡眠2秒钟
    # sleep(2)
    #
    # # 点击打开第一个csdn官网 相对路径
    driver.find_element(By.XPATH, "//*[@id='1']/div/div[1]/h3/a[1]").click()

    # # 关闭浏览器
    # driver.quit()

    # 打开页面
    driver.get("网页地址")

    # 使用逻辑结合定位到提交按钮
    driver.find_element(By.XPATH, "//input[@class = '提交' and @type = 'submit']").click()

    # 使用层级定位用户名并输入你好
    driver.find_element(By.XPATH, "//p[@id='p1']/input").send_keys("你好")


if __name__ == '__main__':
    main()

               5).扩展

                        5.1).//*[text()="xxx"]---->定位文本内容是xxx的元素

                                1.提示:一般适合p标签、a标签

                        5.2).//*[contains(@attribute,xxx')]----->定位属性中含有xxx的元素(移动端测试常用)

                                1.attribute是属性名,如type、name..

                                2.contains是关键字不可更改

                        5.3).//*[starts-with(@attribute,xxx')]--->定位属性以xxx开头的元素

                                1.attribute是属性名,如type、name..

                                2.starts-with是关键字不可更改

               6).浏览器获取XPath路径

        4.8.CSS

                1).说明

                        1.1).CSS(Cascading StyleSheets)是一种语言,它用于描述HTML元素的显示样式

                        1.2).在CSS中,选择器是一种模式,用于选择需要添加样式的元素

                        1.3).在Selenium中也可以使用这种选择器来定位元素

                2).提示

                        2.1).在selenium中推荐使用CSS定位,因为它比XPath定位速度要快

                        2.2).css选择器语法非常强大,且语法比XPath简单

                3).CSS定位方法

                        3.1).element =driver.find_element(By.CSS_SELECTOR,csS_selector)

                4).CSS定位常用策略(方式)

                        4.1).id选择器

                                1.前提:元素必须有id属性

                                2.说明:根据元素id属性来选择

                                3.格式:#id,例如:#userA<选择id属性值为userA的元素>

                        4.2).class选择器

                                1.前提:元素必须有class属性

                                2.说明:根据元素class属性来选择

                                3.格式:.class,例如:.telA<选择器class属性值为telA的所有元素>

                        4.3).元素选择器

                                1.说明:根据元素的标签名进行选择

                                2.格式:element,例如:input<选择所有input元素>

                        4.4).属性选择器

                                1.格式:[属性名="属性值]例如:[name="kw]

                        4.5).层级选择器

                                1.格式:

                                        (1).p>input父级元素>子级元素

                                        (2).p input父级元素子级元素

                                2.提示:>与空格的区别,>后面必须为直接子元素,空格则不用

                5).代码


# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# 获取浏览器对象
chromedriver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service)


def main():
    # 打开页面
    driver.get("https://baidu.com/")

    # 百度搜索框 id选择器
    driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("美团")
    # 百度一下按钮 class选择器
    driver.find_element(By.CSS_SELECTOR, ".bg.s_btn").click()
    # 百度搜索框 属性选择器
    driver.find_element(By.CSS_SELECTOR, "[id='kw']").send_keys("招")
    # 百度搜索框 元素选择器和属性选择器结合
    driver.find_element(By.CSS_SELECTOR, "input[id='kw']").send_keys("聘")
    # 百度一下按钮 层级选择器和属性选择器结合
    driver.find_element(By.CSS_SELECTOR, "span>input[class='bg s_btn']").click()

    # 睡眠3秒钟
    sleep(3)

    # 关闭浏览器
    driver.quit()


if __name__ == '__main__':
    main()

                6).CSS扩展(了解)

                        6.1).[属性名^='指定字母]--->属性以指定字母开头的元素

                        6.2).[属性名$='指定字母]--->属性以指定字母结束的元素

                        6.3).[属性名*='指定字母]--->属性包含指定字母的元素

                7).浏览器获取CSS路径

                        7.1).SelectorsHub下载此插件

                8).XPath与CSS类似功能对比

                9).定位一组元素

                        9.1).方法:driver.find_elements(By.XXxX,XXXx)

                        9.2).返回结果:类型为列表,要对列表进行访问和操作必须指定下标或进行遍历

五、常用方法

        5.1.输入方法

                1).send.keys("输入内容")

        5.2.退出浏览器驱动

                1).driver.quit()

        5.3.打开url

                1).driver.get(url)

        5.4.导包

                1).from selenium import webdriver

                2).from selenium.webdriver.chrome.service import Service

                3).from selenium.webdriver.common.byimport By

        5.5.获取浏览器驱动对象

                1).driver=webdriver.Chrome(service=service)

六、今日学习思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Advanced RAG》-06-探索RAG技术 Query Rewriting

摘要 详细阐述了多种查询重写技术&#xff0c;这些技术用于在检索增强生成&#xff08;RAG&#xff09;中优化查询和文档之间的语义匹配。 首先&#xff0c;介绍了假设文档嵌入&#xff08;HyDE&#xff09;方法&#xff0c;它通过生成假设文档并将其与原始查询结合&#xff0c…

卡码网KamaCoder 104. 建造最大岛屿

题目来源&#xff1a;104. 建造最大岛屿 C题解&#xff1a;先用深度优化算法计算每个孤岛的面积&#xff0c;然后给每个孤岛编号&#xff08;如果孤岛是U型的&#xff0c;防止面积加重复了&#xff09;&#xff0c;再去遍历每个海水区域&#xff0c;计算最大面积。 #include &…

jenkins+gitlab实现微服务的差异化部署

前景&#xff1a; Jenkins 和 GitLab 结合实现微服务的差异化部署具有多方面的意义和优势&#xff0c;主要包括以下几点&#xff1a; 自动化和持续集成&#xff1a;通过 Jenkins 可以实现从代码提交到部署的全自动化流程。这种自动化确保了每次代码变更都能够快速、可靠地构建…

【Python】数据类型之集合

集合是一个无序、可变、不允许元素重复的容器。 1、定义 v1{11,22,33} 1&#xff09;&#xff09;无序&#xff1a;集合无法通过索引取值。 2&#xff09;&#xff09;可变&#xff1a;可以添加和删除集合中的元素。 3&#xff09;&#xff09;集合不允许元素重复。 例如…

GD32 MCU碰到IIC总线卡死怎么办?

大家在使用MCU IIC通信时&#xff0c;若碰到设备复位或者总线干扰等情况&#xff0c;可能会导致IIC总线卡死&#xff0c;表现上总线上SDA或者SCL其中一根线为低电平&#xff0c;IIC总线一直处于busy状态。此时若代码上一直等待总线空闲&#xff0c;则可能导致软件死机&#xff…

PCL Chaikin曲线逼近型细分算法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Chaikin 逼近型细分算法是一种生成平滑曲线的方法,常用于计算机图形学和曲线建模。它基于 Paul Chaikin 于 1974 年提出的算法,通过迭代地插入新的控制点并移动原始控制点来细分曲线,从而逐渐逼近光滑曲线。具体…

Flamingo: a Visual Language Model for Few-Shot Learning

发表时间&#xff1a;NeurIPS 2022 论文链接&#xff1a;https://proceedings.neurips.cc/paper_files/paper/2022/file/960a172bc7fbf0177ccccbb411a7d800-Paper-Conference.pdf 作者单位&#xff1a;DeepMind Motivation&#xff1a;仅使用少量注释示例可以快速适应新任务…

谈基于大语言模型的图数据库路径检索

随着微软已经开源了GraphRAG项目的代码&#xff0c;基于图数据库的RAG 热度迅速升温。关注基于大语言模型与图模型数据库相结合的技术的人多了起来。 本文提出了一种类似人工搜索的“顺藤摸瓜”方法&#xff0c;实现图数据库的智能搜索方法。 本地私有数据存储和查询 本地私有…

大数据面试SQL(一):合并日期重叠的活动

文章目录 合并日期重叠的活动 一、题目 二、分析 三、SQL实战 四、样例数据参考 合并日期重叠的活动 一、题目 已知有表记录了每个品牌的活动开始日期和结束日期&#xff0c;每个品牌可以有多个活动。请编写一个SQL查询合并在同一个品牌举行的所有重叠的活动&#xff0c…

Canvas简历编辑器-图形绘制与状态管理(轻量级DOM)

Canvas简历编辑器-图形绘制与状态管理(轻量级DOM) 在前边我们聊了数据结构的设计和剪贴板的数据操作&#xff0c;那么这些操作都还是比较倾向于数据相关的操作&#xff0c;那么我们现在就来聊聊基本的图形绘制以及图形状态管理。 在线编辑: https://windrunnermax.github.io/…

树与二叉树、图的基本概念

一、树与二叉树的基本概念和性质 1、树的的性质&#xff1a; 1&#xff09;树中的结点数 n 等于所有结点的度数之和加 1 【说明】结点的度是指该结点的孩子数量&#xff0c;每个结点与其每个孩子都由唯一的边相连&#xff0c;因此树中所有结点的度数之和等于树中的边数之和。…

模型 MBTI(性格模型)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。探索真我&#xff0c;和谐人际。 1 MBTI性格模型的应用 1.1 跨国公司团队协作改进 ABC公司是一家全球性的科技公司&#xff0c;其研发团队由来自世界各地的工程师和设计师组成。尽管团队成员个个才华…

创意指南丨AR数学沉浸式空间体验

AR学习种类那么多&#xff0c;哪款最吸引你&#xff1f; 星河造梦坊和Unity联手打造的沉浸式空间AR无疑是其中的佼佼者。 这款应用不仅利用AR技术将抽象的数学概念变得生动有趣&#xff0c;还通过互动体验让学习者仿佛置身于一个充满奇幻色彩的数学世界中。 无论是学生还是教…

鸿蒙应用服务开发【自定义通知角标】

自定义通知角标 介绍 本示例主要展示了设定应用的桌面图标角标的功能&#xff0c;使用ohos.notificationManager接口&#xff0c;进行桌面角标的设置&#xff0c;通知的发送&#xff0c;获取等。 效果预览 使用说明 在主界面&#xff0c;可以看到当前应用的所有消息通知&am…

ts-node 报错 ERR_UNKNOWN_FILE_EXTENSION

问题 有个monorepo项目&#xff0c;在最外层一次性打包 3 个项目的脚本已经成功实现&#xff0c;如下&#xff1a; "build:test": "cross-env NODE_ENVtest vite build --mode test && esno ./build/script/postBuild.ts", "build:prod"…

一款基于RBAC模型的开源快速开发平台,支持权限粒度达到列级别,前后端分离,可免费用于商业

前言 在企业级应用开发中&#xff0c;权限管理和系统配置是两个核心问题。传统的开发模式往往面临权限控制不够灵活、系统配置难以管理等挑战。为了解-决这些问题&#xff0c;需要一款能够提供细致权限控制和灵活系统配置的软件。 现有的一些软件虽然提供了基本的权限管理功能…

索尼相机SD卡找不到视频怎么办?提供全面解决方案

在使用索尼相机拍摄美好瞬间时&#xff0c;SD卡作为存储介质&#xff0c;承载着珍贵的视频和照片。然而&#xff0c;有时我们可能会遇到SD卡中视频文件无法找到的问题&#xff0c;这无疑让人倍感焦虑。本文旨在为大家提供一套全面的解决方案&#xff0c;希望帮助大家快速找回丢…

Istio 金丝雀发布

转载&#xff1a;备考ICA-Istio 金丝雀实验4 环境清理 kubectl delete gw/helloworld-gateway vs/helloworld dr/helloworld-destination #测试 kubectl get svc,pods for i in {1..10};do curl $(kubectl get svc helloworld|grep helloworld|awk {print $3":"$5}|a…

谷粒商城实战笔记-138-商城业务-首页-渲染二级三级分类数据

本节的主要内容是在前一节的基础上&#xff0c;提供结构查询出所有的二级、三级分类数据。 一&#xff0c;构造响应体数据结构 后端返回给前端的数据结构是在开发详细设计中应该确定的内容。 分析前端需要的数据结构&#xff0c;后端要将所有一级分类包含的二级和三级分类信…

嵌入式学习之路 14(C语言基础学习——指针)

一、指针基础 指针的概念 地址表示内存单元的编号&#xff0c;也被称为指针。指针既是地址&#xff0c;也是一种专门用于处理地址数据的数据类型。 例如&#xff0c;变量a的地址或者十六进制表示的0x1000都可以视作指针。 指针变量的定义 语法&#xff1a;基类型 * 指针变…