吾爱乐享
个人学习博客

python学习之xpath使用案例总结

最常用的路径表达式
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
#--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()

赞(0) 打赏
未经允许不得转载:吾爱乐享 » python学习之xpath使用案例总结

评论 抢沙发

评论前必须登录!

 

推荐免费资源共享,个人经验总结学习

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏