Python-元素定位API之XPATH

1、通过绝对路径定位
绝对路径的开头是一个斜线(/),从网页的根节点html开始,逐层去查找需要的定位元素。
此方案缺点显而易见,当页面元素位置发生改变时,都需要修改,因此,并不推荐使用
举例:百度搜索框绝对路径定位
#绝对路径 '/' 遇到同层级多个元素用下标表示,下标从1开始 自顶向下写
# driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div[1]/div[1]/form/span/input').send_keys('博客园')
 
备注:
当同一层有多个相同的元素时,使用下标区分,下标从1开始
 
2、通过相对路径定位
相对路径的开头是两个斜线(//),表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来
举例:百度搜索框相对路径定位
#相对路径 '//' 经验 自低向上尝试
# driver.find_element_by_xpath('//span[1]/input').send_keys('博客园')
# driver.find_element_by_xpath('//form/span[1]/input').send_keys('博客园')
备注:
以上都可以定位到百度搜索框,相对路径的长度和开始位置并不受限制,可以采用从后往前逐层定位直到定位到即可的方式去定位
 
3、通过元素索引定位
遇到同层级相同标签元素时,可以使用索引(下标)表示,索引的初始值为1
举例:定位百度hao123链接
#通过元素索引定位,遇到同层级相同标签元素时,可以使用索引(小标)表示,索引初始值为1
# driver.find_element_by_xpath('//div[1]/div[1]/div[5]/div[1]/div[1]/form/span/input').send_keys('博客园')
 
4、使用元素属性定位
元素属性定位要求属性能够定位到唯一一个元素,如果存在多个相同条件的标签,默认定位第一个,具体格式 //标签名[@属性=“属性值”]
支持使用and 和 or关键字,多个属性一起定位元素
举例:
#属性定位 //标签名[@属性=“属性值”]
# driver.find_element_by_xpath('//input[@id="kw"]').send_keys('博客园')
# driver.find_element_by_xpath('//input[@maxlength="255"]').send_keys('博客园')
#多属性定位 and or
# driver.find_element_by_xpath('//input[@id="kw" and @maxlength="255"]').send_keys('博客园')
# driver.find_element_by_xpath('//input[@is="kw" or @maxlength="255"]').send_keys('博客园')
备注:
Xpath支持通配符*号,通过属性定位还可以如下写法:
#支持通配符 *
# driver.find_element_by_xpath('//*[@*="kw"]').send_keys('博客园')
 
5、使用部分属性值匹配(也成为模糊方法定位)
属性值如果太长或网页中的元素属性动态变化,可以使用此方法
元素属性值开头包含内容:starts-with()
#模糊定位、称为部分属性值定位
#starts-with() 字符串以特定值开头 下方a表示标签名
# driver.find_element_by_xpath('//a[starts-with(@href,"http://news")]').click
#报错原因ends-with() 是xpath语言2.0版本的函数 而当前xpath是xpath1.0版本的语言
#//a[ends-with(@href,"news.baidu.com")]' is not a valid XPath expression.
# driver.find_element_by_xpath('//a[ends-with(@href,"news.baidu.com")]').click()
元素属性值结尾包含内容:substring()
#substring() 元素属性值结尾包含内容 http://news.baidu.com
# driver.find_element_by_xpath('//a[substring(@href,8)="news.baidu.com"]').click()
元素属性值结尾包含内容:contains()
#contains() 包含
# driver.find_element_by_xpath('//a[contains(@href,"news.baidu")]').click()
#应用 1、元素信息过长 2、动态属性元素 订单 取第一个订单点击 order_001 order_002 order_003
备注:
Xpath1.0没有ends-with函数,2.0有,现在浏览器实现的都是1.0
 
6、使用元素文本定位
元素文本在xpath中可以通过text()函数获取,也可以用其来进行元素定位。
#元素文本定位
#text()
# driver.find_element_by_xpath('//a[text()="新闻"]').click()
#元素模糊定位
# driver.find_element_by_xpath('//a[contains(text(),"新")]').click()
 
posted @   码·蚁  阅读(174)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示