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中模拟enum枚举类型的5种方法分享
Nov 22 Python
python执行等待程序直到第二天零点的方法
Apr 23 Python
python引用DLL文件的方法
May 11 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
Apr 11 Python
Python常用数据类型之间的转换总结
Sep 06 Python
python编写计算器功能
Oct 25 Python
python向图片里添加文字
Nov 26 Python
python 图像的离散傅立叶变换实例
Jan 02 Python
python实现简单学生信息管理系统
Apr 09 Python
Python网络编程之ZeroMQ知识总结
Apr 25 Python
详解Python为什么不用设计模式
Jun 24 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
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
PHP代码优化技巧小结
2015/09/29 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
设定php简写功能的方法
2019/11/28 PHP
js innerHTML 改变div内容的方法
2013/08/03 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
浅谈Javascript中Object与Function对象
2015/09/26 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
python小技巧之批量抓取美女图片
2014/06/06 Python
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
python中map()函数的使用方法示例
2017/09/29 Python
python监控键盘输入实例代码
2018/02/09 Python
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
python中pyqtgraph知识点总结
2021/01/26 Python
园林毕业生自我鉴定范文
2013/12/29 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
保险公司客户经理岗位职责
2015/04/09 职场文书
文艺委员竞选稿
2015/11/19 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers
Python实现8种常用抽样方法
2021/06/27 Python
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android