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 list语法学习(带例子)
Nov 01 Python
python获取本地计算机名字的方法
Apr 29 Python
在Python中定义和使用抽象类的方法
Jun 30 Python
TensorFlow数据输入的方法示例
Jun 19 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
python实现给scatter设置颜色渐变条colorbar的方法
Dec 13 Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 Python
python面向对象法实现图书管理系统
Apr 19 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
利用Python代码实现一键抠背景功能
Dec 29 Python
Python如何实现FTP功能
May 28 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数组操作
2011/12/30 PHP
php日历制作代码分享
2014/01/20 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
2014/07/01 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
用js控制组织结构图可以任意拖拽到指定位置
2014/01/17 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
面试常见的js算法题
2017/03/23 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
python Tkinter的图片刷新实例
2019/06/14 Python
Python restful框架接口开发实现
2020/04/13 Python
深入理解Python 多线程
2020/06/16 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
老师自我鉴定范文
2013/12/25 职场文书
银行办理业务介绍信
2014/01/18 职场文书
餐厅经理岗位职责和岗位目标
2014/02/13 职场文书
合作意向书模板
2014/03/31 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
老人院义工活动感想
2015/08/07 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android