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的Django框架的运行方式及处理流程
Apr 08 Python
Python使用CMD模块更优雅的运行脚本
May 11 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 Python
Python中多个数组行合并及列合并的方法总结
Apr 12 Python
pandas全表查询定位某个值所在行列的方法
Apr 12 Python
python 调用有道api接口的方法
Jan 03 Python
Python中shapefile转换geojson的示例
Jan 03 Python
Python数据类型之Dict字典实例详解
May 07 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
python求解汉诺塔游戏
Jul 09 Python
Django返回HTML文件的实现方法
Sep 17 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
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
用js实现in_array的方法
2013/11/05 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
Vue 框架之动态绑定 css 样式实例分析
2018/11/14 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
跟老齐学Python之for循环语句
2014/10/02 Python
Python二分法搜索算法实例分析
2015/05/11 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
VELTRA台湾:世界自由行专家
2017/08/15 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
接口的多继承会带来哪些问题
2015/08/17 面试题
生产车间实习自我鉴定
2013/09/23 职场文书
财务会计实习报告体会
2013/12/20 职场文书
社区庆八一活动方案
2014/02/02 职场文书
班班通校本培训方案
2014/03/12 职场文书
校庆活动策划方案
2014/06/05 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
python+opencv实现目标跟踪过程
2022/06/21 Python