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.csdn.net/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()运行效果: