1、使用Xpath或css定位原因:
- id、name、class:依赖于元素这三个对应的属性,如果元素没有以上三种属性,定位不能使用
- link_text、partial_link_text:只适合超链接
- tag_name:只能找页面唯一元素,或者页面中多个相同元素中的第一个元素
2、Xpath简介
- Xpath即为XML Path的简称,它是一门在XML文档中查找元素信息的语言。
- HTML可以看做是XML的一种实现,所以Selenium用户可以使用这种强大的语言在Web应用中定位元素,XML是一种标记语言,用于数据的存储与传递。
3、Xpath定位策略的种类
- 路径
- 路径结合属性
- 路径结合逻辑(多个属性)
- 路径结合层级
4、Xpath定位方法
element=driver.find_element_by_xpath(xpath)
5、Xpath常用的定位策略
(1)路径:
①绝对路径:
语法:以单斜杠开头逐级开始编写,不能跳级。如:/html/body/div/p[1]/input
②相对路径:
语法:以双斜杠开头,双斜杠后边跟元素名称,不知元素名称可以使用*代替。
如://input或者//*
(2)路径结合属性
语法:在Xpath中,所有的属性必须使用@符号修饰,如://*[@id='id值‘]
(3)路径结合逻辑(多个属性)
语法:如://*[@id='id值' and @属性名='属性值']
(4)路径结合层级
语法:如://*[@id='父级id属性值']/input
提示:
- 一般情况使用指定标签名称,不使用*代替,因为效率慢
- 无论是绝对路径和相对路径,/后面必须为元素的名称或者*
- 扩展:在工作中,如果能使用相对路径绝对不使用绝对路径
6、Xpath扩展
- 定位文本值等于xxx的元素,语法://*[text()='xxx'],一般适用于p、a标签
- 定位属性包含xxx的元素,语法://*[contains(@属性,'xxx')]
- 定位属性以xxx开头的元素,语法://*[starts-with(@属性,'xxx')]
7、案例:使用Xpath定位方式,向优快云的找回密码页面中输入手机号、验证码、密码
代码:
from selenium import webdriver
from time import sleep
#获取浏览器对象
driver=webdriver.Firefox()
#获取网络链接
url="https://passport.youkuaiyun.com/forget"
driver.get(url)
#使用绝对路径定位,输入手机号
#driver.find_element_by_xpath("/html/body/div/div/div/div/div/div/div/input").send_keys("17862088888")
#使用相对路径结合属性定位,输入手机号
driver.find_element_by_xpath("//input[@id='phone']").send_keys("17862088888")
#driver.find_element_by_xpath("//input[@id='password-number']").send_keys("1234556643336")
#使用路径结合逻辑定位,输入验证码
driver.find_element_by_xpath("//input[@id='code' and @name='code']").send_keys("3721")
#使用属性包含xxx的元素定位
driver.find_element_by_xpath("//input[contains(@placeholder,'密码为11-20位数字字母组合')]").send_keys("1234556643336")
#暂停3秒
sleep(3)
#退出浏览器驱动
driver.quit()
运行效果: