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实现网页链接提取的方法分享
Feb 25 Python
Python中unittest模块做UT(单元测试)使用实例
Jun 12 Python
基于python3 类的属性、方法、封装、继承实例讲解
Sep 19 Python
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
python中cPickle类使用方法详解
Aug 27 Python
Python类的继承用法示例
Jan 31 Python
用pycharm开发django项目示例代码
Jun 13 Python
python障碍式期权定价公式
Jul 19 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
python中return如何写
Jun 18 Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 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
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
php 地区分类排序算法
2013/07/01 PHP
js的with语句使用方法
2007/09/21 Javascript
js模拟实现Array的sort方法
2007/12/11 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
2017/04/18 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
python 图片验证码代码
2008/12/07 Python
Python3.2中Print函数用法实例详解
2015/05/19 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
Python内置函数locals和globals对比
2020/04/28 Python
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
毕业学生推荐信
2013/12/01 职场文书
电钳专业个人求职信
2014/01/04 职场文书
办理护照介绍信
2014/01/16 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
P站美图推荐——变身女主角特辑
2022/03/20 日漫
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript