多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## **一、元素定位方法** **1.1 tag_name(了解)** 说明:是通过元素的标签名称来定位,标签名(查看元素时尖括号(<)紧挨着的单词或字母就是标签名) (标签名也就是元素名) 方法:driver.find_element_by_tag_name("标签名") 注意: 1. 如果页面中存在多个相同标签,默认返回第一个标签元素。 **案例:** ~~~ ''' 需求:   1.使用 tag name定位方式,使用注册A.html页面,用户名输入admin 方法:   1. driver.find_element_by_tag_name("")#定位元素方法   2. send_keys()#输入方法   3. driver.quit()#退出方法 ''' ​ from selenium import webdriver from time import sleep ​ driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册A.html") ​ # 注意:页面中如果存在多个相同的标签名,默认返回第一个标签 driver.find_element_by_tag_name("input").send_keys("admin") ​ sleep(3) driver.quit() ~~~ <br /> **1.2 link_text** 说明:定位超链接标签 方法:driver.find_element_by_link_text() 注意: 1. link_text:只能使用精准匹配(a标签的全部文本内容) **案例:** ~~~ ''' 需求:   1.使用 link_text定位方式,使用注册A.html页面,点击访问 新浪 网站 链接 方法:   1.driver.find_element_by_link_text("") #定位元素方法   2.cLick() #点击方法 注意:   link_text:       1.只能定位a标签       2.link_text必须为全部匹配 ''' ​ from selenium import webdriver from time import sleep ​ driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册A.html") ​ # 使用 link_text定位 访问 新浪 网站<全部匹配> driver.find_element_by_link_text("访问 新浪 网站").click() ​ sleep(3) driver.quit() ~~~ <br /> **1.3 partial_link_text【推荐】** 说明:定位超链接标签 方法:driver.find\_element\_by\_partial\_link\_text() 注意: 1. 可以使用精准或模糊匹配,如果使用模糊匹配最好使用能代表唯一的关键词 2. 如果有多个值,默认返回第一个值 **案例:** ~~~ ''' 需求:   1.使用 link_text定位方式,使用注册A.html页面,点击访问 新浪 网站 链接 方法:   1. driver.find_element_by_link_text("") #定位元素方法   2. cLick() #点击方法 注意:   partial_link_text:       1.只能定位a标签       2. partial_link_text定位元素的内容可以模糊部分值,但是必须能代表唯一性 ''' ​ from selenium import webdriver from time import sleep ​ driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册A.html") ​ # 使用 partial_link_text定位 使用模糊 唯一代表关键词 driver.find_element_by_partial_link_text("访问").click() ​ # 没有使用唯一代表词 默认操作符合条件的第一个元素 driver.find_element_by_partial_link_text("新浪").click() ​ # 使用全部匹配 driver.find_element_by_partial_link_text("访问 新浪 网站").click() ​ sleep(3) driver.quit() ~~~ <br /> ## **二、Xpath 和css定位** ### 2.1 为什么使用xpath和css定位? 1. id, name, class:依赖于元素这三个对应的属性,如果元素没有以上三个属性,定位方法不能使用。 2. link_text, partial_link_text:只适合超链接 3. tag_name:只能找页面唯一元素,或者页面中多个相同元素中的第一个元素 ### 2.2 什么是xpath定位? 说明:基于元素的路径 ### 2.3 xpath介绍 1. xpath是XML Path简称: (xml是一种标记语言,焦点:数据存储于传递(配置文件)后缀.XML) ### 2.4 Xpath常用的定位策略: ``` 1. 路径 1).绝对路径: 语法:以单斜杠开头逐级开始编写,不能跳级。如:/html/body/div/p\[1\]/input 2).相对路径 语法:以双斜杠开头,双斜杠后边跟元素名称,不知元素名称可以使用\*代替。 如://input //* 2.路径结合属性 语法:在xpath中,所有的属性必须使用@符号修饰如://*[@id='id值'] 3.路径结合逻辑(多个属性) 语法://*[@id="id值" and @属性='属性值'] 4.路径结合层级 语法://*[@id='父级id属性值']/input 提示: 1.一般见识使用指定标签名称,不使用\*代替,效率比较慢。 2.无论是绝对路径和相对路径,/后面必须为元素的名称或者\* 3.扩展:在工作中,如果能使用相对路径绝对不使用绝对路径。 ``` ### 2.5 Xpath扩展 ``` 1. //*[text()='XXX'] # 定位文本值等于xxx的元素 提示:一般适合p标签,a标签 2. //*[contains(@属性,'xxx')] # 定位属性包含xxx的元素 提示:contains为关键字,不可更改。 3. //*[starts-with(@属性, 'xxx')] # 定位属性以xxx开头的元素 提示:starts-with为关键字不可更改 ``` **案例:** ~~~ ''' 需求:   1.使用绝对路径定位 用户名 输入 admin   2.暂停2秒钟   3.使用相对路径定位 密码框 输入 123 方法:   driver.find_element_by_xpath() ''' from selenium import webdriver from time import sleep ​ driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册A.html") ​ # 使用绝对路径定位 用户名 admin driver.find_element_by_xpath("/html/body/form/div/fieldset/p[1]/input").send_keys("admin") ​ # 使用层级结合属性 定位用户名 driver.find_element_by_xpath("//p[@id='p1']/input").send_keys("admin") ​ sleep(2) ​ # 使用相对路径 定位 密码 123 # driver.find_element_by_xpath("//input[@id='passwordA']").send_keys("123") ​ # 使用逻辑结合 driver.find_element_by_xpath("//input[@id='passwordA' and @placeholder='密码A']").send_keys("123") ​ sleep(3) driver.quit() ~~~ <br /> ## **三、css定位** **说明:** 1. css一种标记语言,焦点:数据的样式。控制元素的显示样式,就必须先找到元素,在css标记语言中找元素使用css选择器; 2. css定位就是通过css选择器工具进行定位; 3. 极力推荐使用,查找元素的效率比xpath高,语法比xpath更简单。 ``` 方法: driver.find_element_by_css_selector() 常用策略: 1. id选接器 前提:元素是必须有id属性 语法:#id 如:#passwordA 2. class 选择器 前提:元素是必须有class属性 语法:.class 如:.telA 3. 元素选择器 语法:element 如:input 4. 属性选择器 语法:[属性名=属性值] 5. 层级选择器 语法: 1. p>input 2. p input 提示:>与空格的区别,大于号必须为子元素,空格则不用。 ``` **案例:** ``` ''' 需求: 1.使用 css id选择器 定位 用户名 输入 admin 2.使用css属性选择 定位 密码框 输入123456 3.使用 css class选择器 定位电话号码:18611112222 4.使用css元素选择器 定位span标签获取文本值 5.使用层级选择器 定位email 输入1230qq.com 方法: driver.find_element_by_css_selector() ''' from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册A.html") # 1.使用 css id选择器 定位 用户名 输入 admin driver.find_element_by_css_selector("#userA").send_keys("admin") # 2.使用css属性选择 定位 密码框 输入123456 driver.find_element_by_css_selector("[name='passwordA']").send_keys("123456") # 3.使用 css class选择器 定位电话号码:18611112222 driver.find_element_by_css_selector(".telA").send_keys("18611112222") # 4.使用css元素选择器 定位span标签获取文本值 span = driver.find_element_by_css_selector("span").text print("获取的span标签文本值:", span) # 5.使用层级选择器 定位email 输入1230qq.com driver.find_element_by_css_selector("@placeholder='电子邮箱A'").send_keys("输入1230qq.com") sleep(3) driver.quit() ``` **扩展:** ``` 1. [属性^= '开头的字母'] # 获取指定属性以指定字母开头的元素 2. [属性s= '结束的字母'] # 获取指定属性以指定字母结束的元素 3. [属性*= '包含的字母'] # 获取指定属性包含指定字母的元素 ``` **案例**: ~~~ '''   需求:       1.使用 css_id选择器 定位 用户名 输入 admin       2.使用css属性选择 定位 密码框 输入123456       3.使用 css_class选择器 定位电话号码:18611112222       4.使用css元素选择器 定位span标签获取文本值       5.使用层级选择器 定位email 输入1230qq.com   方法:       driver.find_element_by_css_selector() ''' from selenium import webdriver from time import sleep   driver = webdriver.Chrome() driver.get("D:\web自动化素材\课堂素材\注册A.html")   # 1.使用 css id选择器 定位 用户名 输入 admin 以指定字母开头 语法:[属性^= '开头的字母'] driver.find_element_by_css_selector("[name^='us']").send_keys("admin") # 2.使用css属性选择 定位 密码框 输入123456 以指定字母结束 语法:[属性s= '结束的字母'] driver.find_element_by_css_selector("[name$='dA']").send_keys("123456") # 3.使用 css class选择器 定位电话号码:18611112222 包含指定字母 语法:[属性*= '包含的字母'] driver.find_element_by_css_selector([class*='el']").send_keys("18611112222") # 4.使用css元素选择器 定位span标签获取文本值 span = driver.find_element_by_css_selector("span").text print("获取的span标签文本值:", span) # 5.使用层级选择器 定位email 输入1230qq.com driver.find_element_by_css_selector("@placeholder='电子邮箱A'").send_keys("输入1230qq.com")     sleep(3) driver.quit() ~~~ **Xpath与CSS类比功能:** ``` 复制xpath:/html/body/form/div/fieldset/p[1]/input 复制最简://*[@id="userA"] 复制CSS路径:html body form div #zc fieldset p#p1 input#userA ``` **提示:** 1. 虽然借助工具可以快速生成xpath路径和css语法,但是前期不建议使用。 2. 工具在智能,没有人智能。 <br /> ## **四、定位一组元素** ``` 方法:driver.find_elements_by_xxx() 返回结果:类型为列表,要对列表进行访问和操作必须指定下标或进行遍历,[下标从0开始] ``` <br /> ## **五、扩展8种元素定位的底层实现** ``` 方式:driver.find_element(By.xxx, 'value') 参数说明: By.xxx:为By类的类型 如:By.ID value:元素的定位值 如:"userA" By类:需要导包 位置:from selenium.webdriver.common.by import By ```