python定位xpath 节点位置的方法

系统 1857 0

chrome 右键有copy xpath地址

但是有些时候获取的可能不对

可以自己用代码验证一下

如果还是不行 可以考虑从源码当中取出来

趁热打铁,使用前一篇文章中 XPath 节点来定位HTML 页面。

HTML文件如下(您可以将其拷贝,保存成html文件,跟我笔者实验):

            
            
              Storm
            
            

这是一个h1标签

文本域1:
文本域2:
密码字段:
单选按钮1: male female
宠物: 兔子

1、节点

上面的HTML文件, 为根节点,他有个lang的属性,他有两个子节点和。

2、选取节点实验

(1)/,从根节点选取

下面的代码从根节点开始选取所有的html元素(这里只有一个),打印tag name,就是html

            
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(r'file:///E:\python\test1\day1\test0.html')
eles = driver.find_elements_by_xpath('/html')
for ele in eles:
 print(ele.tag_name)
driver.quit()

          

运行结果

            
C:\Python36\python.exe E:/python/test1/day1/test9.py
html


Process finished with exit code 0

          

(2)//,从目标节点下选取

下面的xpath,意思就是我要去找head,找到就保存到eles里面,不一定需要在根目录下面找

            
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(r'file:///E:\python\test1\day1\test0.html')
eles = driver.find_elements_by_xpath('//head')
for ele in eles:
 print(ele.tag_name)
driver.quit()

          

运行结果:

            
C:\Python36\python.exe E:/python/test1/day1/test9.py
head


Process finished with exit code 0

          

如果我换成下面的xpath,结果会如何呢?

            
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(r'file:///E:\python\test1\day1\test0.html')
eles = driver.find_elements_by_xpath('/head')
for ele in eles:
 print(ele.tag_name)
driver.quit()


          

从根节点选取head元素,跟节点不是head元素,所以找不到,打印为空

(3). ,选取当前节点;.. ,选取父节点

下面的xpath,第一个,匹配到head元素,然后分配找head当前节点(就是head);head父节点(是html)

            
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(r'file:///E:\python\test1\day1\test0.html')
eles2 = driver.find_elements_by_xpath('//head/.')
eles3 = driver.find_elements_by_xpath('//head/..')

for ele in eles2:
 print(ele.tag_name)

for ele in eles3:
 print(ele.tag_name)
driver.quit()

          

运行结果:

            
C:\Python36\python.exe E:/python/test1/day1/test9.py
head
html


Process finished with exit code 0

          

(4)@ 选取属性

下面xpath为,匹配任意元素,其有个属性charset,值为UTF-8。

            
from selenium import webdriver
 

 

driver = webdriver.Chrome()
driver.get(r'file:///E:\python\test1\day1\test0.html')
eles3 = driver.find_elements_by_xpath('//*[@charset="UTF-8"]')
for ele in eles3:
 print(ele.tag_name)
driver.quit()

          

运行结果为:

            
C:\Python36\python.exe E:/python/test1/day1/test9.py
meta


Process finished with exit code 0

          

3、谓语实验

(1)[1]

选择第一个form元素下面的第一个input元素,打印name属性值

            
eles1 = driver.find_elements_by_xpath('//form[1]/input[1]')
for ele in eles1:
 print(ele.get_attribute('name'))
          

运行结果:first_name

(2)[last()]

            
eles1 = driver.find_elements_by_xpath('//form[1]/input[last()]')
          

运行结果:last_name

(3)[last()-1]

            
eles1 = driver.find_elements_by_xpath('//form[1]/input[last()-1]')
          

运行结果:first_name

(4)[position()<3]

            
eles1 = driver.find_elements_by_xpath('//form[1]/input[position()<3]')
          

运行结果:

            
first_name
last_name
          

(5)h1[@class]

在body元素下层找具有class属性的h1标签

            
eles1 = driver.find_elements_by_xpath('//body/h1[@class]')
for ele in eles1:
 print(ele.tag_name)
          

(6)h1[@class="cname"]

在body元素下层找具有class属性的h1标签,且值为cname

            
eles1 = driver.find_elements_by_xpath('//body/h1[@class="cname"]')
          

(7)input[xxx>35]

这个没找到合适的例子,暂缺

4、选取未知节点――通过通配符实现

(1)//form[1]/*

选择form[1]下的所有元素

            
eles1 = driver.find_elements_by_xpath('//form[1]/*')
for ele in eles1:
 print(ele.get_attribute('name'))
          

运行结果:

            
first_name
None
last_name
          

(2)//*

选择所有元素

            
eles1 = driver.find_elements_by_xpath('//*')
for ele in eles1:
 print(ele.tag_name)
          

运行结果:

            
html
head
meta
title
body
h1
form
input
br
input
form
input
form
input
input
form
input
input
input
input
          

(3)//input[@*]

匹配只要有任意属性的input元素

以上这篇python定位xpath 节点位置的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论