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中的对象,方法,类,实例,函数用法分析
Jan 15 Python
Python StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
python实现的简单窗口倒计时界面实例
May 05 Python
Python实现基本线性数据结构
Aug 22 Python
python爬虫headers设置后无效的解决方法
Oct 21 Python
python使用turtle库绘制时钟
Mar 25 Python
pygame游戏之旅 如何制作游戏障碍
Nov 20 Python
初次部署django+gunicorn+nginx的方法步骤
Sep 11 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
Python 没有main函数的原因
Jul 10 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
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
关于PHP文件的自动运行方法分析
2016/05/13 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
ant design实现圈选功能
2019/12/17 Javascript
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
为什么称python为胶水语言
2020/06/16 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
幼儿运动会邀请函
2014/01/17 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
教师求职自荐信范文
2015/03/04 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
css背景和边框标签实例详解
2021/05/21 HTML / CSS
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android