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 相关文章推荐
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
python去掉空白行的多种实现代码
Mar 19 Python
python+pyqt5实现24点小游戏
Jan 24 Python
python 杀死自身进程的实现方法
Jul 01 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
Django中modelform组件实例用法总结
Feb 10 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
Mar 24 Python
Python 实现绘制子图及子图刻度的变换等问题
May 31 Python
Python的这些库,你知道多少?
Jun 09 Python
python+pytest接口自动化之token关联登录的实现
Apr 06 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配置文件php.ini所在路径的二种方法
2014/05/26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
html数组字符串拼接的最快方法
2009/09/16 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
Python3 修改默认环境的方法
2019/02/16 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
网络工程师个人的自我评价范文
2013/10/01 职场文书
颁奖晚会主持词
2014/03/25 职场文书
小学家长评语大全
2014/04/16 职场文书
社区戒毒工作方案
2014/06/04 职场文书
建筑横幅标语
2014/10/09 职场文书
2015年食堂工作总结报告
2015/04/23 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python
MySql分区类型及创建分区的方法
2022/04/13 MySQL