python定位xpath 节点位置的方法


Posted in Python onAugust 27, 2019

chrome 右键有copy xpath地址

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

可以自己用代码验证一下

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

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

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

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Storm</title>
</head>
<body>
 <h1 id="h1" name="hname" class="cname">这是一个h1标签</h1>
 <form>
  文本域1:<input type="text" name="first_name">
  <br>
  文本域2:<input type="text" name="last_name">
 </form>
 <form>
  密码字段:<input type="password" name="password">
 </form>
 <form>
  单选按钮1:
  <input type="radio" name="radio1" value="nan">male
  <input type="radio" name="radio1" value="nv">female
 </form>
 <form>
  宠物:
  <input type="checkbox" name="cw">猫
  <input type="checkbox" name="cw">狗
  <input type="checkbox" name="cw">兔子
 </form>
</body>
</html>

1、节点

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

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 节点位置的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python在Windows8下获取本机ip地址的方法
Mar 14 Python
Python获取任意xml节点值的方法
May 05 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
Jan 23 Python
使用python接入微信聊天机器人
Mar 31 Python
使用turtle绘制五角星、分形树
Oct 06 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 Python
python实现手势识别的示例(入门)
Apr 15 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 Python
pandas统计重复值次数的方法实现
Feb 20 Python
pandas map(),apply(),applymap()区别解析
Feb 24 Python
Python自动化爬取天眼查数据的实现
Jun 15 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 #Python
python自动化UI工具发送QQ消息的实例
Aug 27 #Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 #Python
对Python获取屏幕截图的4种方法详解
Aug 27 #Python
python对常见数据类型的遍历解析
Aug 27 #Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 #Python
python实现一个函数版的名片管理系统过程解析
Aug 27 #Python
You might like
桌面中心(四)数据显示
2006/10/09 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
js版本A*寻路算法
2006/12/22 Javascript
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
js断点调试经验分享
2017/12/08 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
Python入门篇之面向对象
2014/10/20 Python
解决Python安装后pip不能用的问题
2018/06/12 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
django框架F&amp;Q 聚合与分组操作示例
2019/12/12 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
餐饮主管岗位职责
2013/12/10 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
机械系毕业生求职信
2014/05/28 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
合伙购房协议样本
2014/10/06 职场文书
医生个人年度总结
2015/02/28 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
合作意向书范本
2019/04/17 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书