前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python学习之xpath使用案例总结

python学习之xpath使用案例总结

作者头像
吾爱乐享
发布2019-12-30 17:20:19
9980
发布2019-12-30 17:20:19
举报
文章被收录于专栏:吾爱乐享吾爱乐享

最常用的路径表达式

1,nodename:选取此节点的所有子节点

2,/:从根节点选取

3,//:从匹配的节点选取文档中的所有节点,不考虑位置

4,。:选取当前节点

5,。。:选取当前节点的父节点

6,@:选取元素

7.*:匹配任何元素节点

8,@*:匹配任何属性节点

9,node():匹配任何类型的节点

10,| :选取若干个路径

xpath谓语的用法:

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

  1. /div[1]:选取根节点的子节点第一个div元素
  2. /div[last()]:选取根节点的子节点最后一个div元素
  3. /div[last()-1]:选取根节点的子节点倒数第二个div元素
  4. /div[position()<3]:选取根节点的子节点最前面的两个div元素
  5. //div[@id]:选取所有div包含id属性的元素
  6. //div[@id=’kw’]:选取所有div包含id属性等于kw的元素

xpath 轴

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。

轴是相对于当前节点的节点集

ancestor:选取当前节点的所有先辈(包括父,祖父,祖祖父等)

ancestor-or-self:选取当前节点的所有先辈以及当前节点本身

attribute:选取当前节点的所有属性

child:选取当前节点的所有子元素

descendant:选取当前节点的所有后代元素(包括子,孙等)

descendant-or-self:选取当前节点的所有后代元素及当前节点本身

following:选择文本中当前节点结束标签后的所有节点

namespace:选取当前节点的所有命名空间节点

parent:选取当前节点的父节点

preceding:选取文档中当前节点的开始标签之前的所有节点

preceding-sibling:选取当前节点之前的所有同级节点

self:选取当前节点

用法:

轴名称::节点测试[谓语]

child::div:所有属于当前节点的子元素的div节点

attribute::id:选取当前节点的id属性

child::*:选取当前节点的所有子元素

attribute::*:选取当前节点的所有属性

child::text():选取当前节点的所有文本子节点

child::node():选取当前节点的所有子节点

descendant::div:选取当前节点的所有div的后代元素

ancestor::div:选取当前节点的所有div 的先辈元素

ancestor-or-self::div:选取当前节点的所有div的先辈元素以及当前节点(如果此节点为div节点的话)

child::*/child::div:选取当前节点的所有div孙节点

xpath 运算符

| :计算两个节点集, 如://div | //span ,返回所有拥有div和span元素的节点集

+ :加法,1+2 返回10

– :减法,2-1 返回1

* :乘法,1*2 返回2

div:除法 2 div 1 返回2

= :等于 price=1,如果是1返回true否则返回false

!= :不等于 price!=1,如果不是1返回true否则返回false

< :小于 price<1,如果是小于1返回true否则返回false

<= :小于等于 price<=1,如果是小于等于1返回true否则返回false

> :大于 price>1,如果是大于1返回true否则返回false

>= :大于等于 price>=1,如果是大于等于1返回true否则返回false

or :或 price=1 or price=2,如果是等于1或等于2返回true否则返回false

and:与 price>1 and price<2,如果是大于1且小于2返回true否则返回false

mod:计算除法的余数 2 mod 1,余0

代码语言:javascript
复制
#--coding=utf-8
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('地址')
browser.maximize_window()
browser.find_element_by_xpath('//div[@class="login-main"]/p[1]/input').send_keys('用户名')
browser.find_element_by_xpath('//div[@class="login-main"]/p[2]/input').send_keys('密码')
browser.find_element_by_xpath('//div[@class="login-main"]/p[3]/button').click()
time.sleep(1)
#滚动到指定位置
target = browser.find_element_by_xpath('//div[@class="time-chose"]/span[text()="文本"]')
browser.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去
time.sleep(1)

'''
xpath 运算符
| :计算两个节点集, 如://div | //span ,返回所有拥有div和span元素的节点集
+ :加法,1+2 返回10
- :减法,2-1 返回1
* :乘法,1*2 返回2
div:除法 2 div 1 返回2
= :等于 price=1,如果是1返回true否则返回false
!= :不等于 price!=1,如果不是1返回true否则返回false
< :小于 price<1,如果是小于1返回true否则返回false
<= :小于等于 price<=1,如果是小于等于1返回true否则返回false
> :大于 price>1,如果是大于1返回true否则返回false
>= :大于等于 price>=1,如果是大于等于1返回true否则返回false
or :或 price=1 or price=2,如果是等于1或等于2返回true否则返回false
and:与 price>1 and price<2,如果是大于1且小于2返回true否则返回false
mod:计算除法的余数 2 mod 1,余0
'''
#通过text()定位到标签包含文本内容的位置,利用contains(text(),"文本内容")函数包含关键词文本内容,还可以直接等于文本内容,如:/div[text()="文本内容"]
browser.find_element_by_xpath('//div[@class="time-chose"]/span[contains(text(),"文本")]').click()
time.sleep(1)
browser.find_element_by_xpath('//div[@class="time-chose"]/span[text()="文本"]').click()
time.sleep(1)
browser.find_element_by_xpath('//div[@class="time-chose"]/span[text()="文本"]').click()
time.sleep(1)
org_target=browser.find_element_by_xpath('//div[@class="fixed-d-statistic-up"]/span[text()="文本"]')
browser.execute_script('arguments[0].scrollIntoView()',org_target)#拖到指定的位置
time.sleep(1)
#使用descendant定位所有的后代元素
browser.find_element_by_xpath('//div[@class="fixed-d-picker-icon"]/descendant::input').click()
time.sleep(1)
#通过title
browser.find_element_by_xpath('//table[@class="ant-calendar-month-panel-table"]//td[@title="八月"]').click()
time.sleep(1)
browser.find_element_by_xpath('//div[@class="fixed-d-picker-icon"]/descendant::input').click()
time.sleep(1)
browser.find_element_by_xpath('//table[@class="ant-calendar-month-panel-table"]//td[@title="九月"]').click()
#使用 | 定位,在div下有i或者i的class等于anticon anticon-plus-circle-o才能被定位
browser.find_element_by_xpath('//div[@class="dept-chose-icon"]/i | //i[@class="anticon anticon-plus-circle-o"]').click()
代码语言:javascript
复制
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档