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 socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
python中dict使用方法详解
Jul 17 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
python读取图片的几种方式及图像宽和高的存储顺序
Feb 11 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
Python 如何在字符串中插入变量
Aug 01 Python
python 多线程死锁问题的解决方案
Aug 25 Python
浅谈Python数学建模之固定费用问题
Jun 23 Python
Python操作CSV格式文件的方法大全
Jul 15 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中实现精确设置session过期时间的方法
2014/07/17 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
Firefox和IE浏览器兼容JS脚本写法小结
2008/07/07 Javascript
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
Python中的字符串替换操作示例
2016/06/27 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
对Python _取log的几种方式小结
2019/07/25 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
政法大学毕业生自荐信范文
2014/01/01 职场文书
酒店员工检讨书
2014/02/18 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
反邪教宣传工作方案
2014/05/07 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
小学生作文批改评语
2014/12/25 职场文书
大学学生会辞职信
2015/05/13 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
公司行政管理制度范本
2015/08/05 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
对Golang中的FORM相关字段理解
2021/05/02 Golang