python学习之xpath使用案例总结_python学习之xpath使用案例总结

本文详细介绍了XPath在Python中的使用,包括选取特定节点的方法,如选取最后一个、倒数第二个元素,选取具有特定属性的元素,以及XPath的轴概念。此外,还展示了XPath的运算符,如并集、加减乘除、比较运算符等,并提供了Selenium自动化测试中XPath应用的实例。
摘要由CSDN通过智能技术生成

/div[last()]:选取根节点的子节点最后一个div元素

/div[last()-1]:选取根节点的子节点倒数第二个div元素

/div[position()<3]:选取根节点的子节点最前面的两个div元素

//div[@id]:选取所有div包含id属性的元素

//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('url')

browser.maximize_window()

browser.find_element_by_xpath('//div[@class="login-main"]/p[1]/input').send_keys('aaaa')

browser.find_element_by_xpath('//div[@class="login-main"]/p[2]/input').send_keys('ddddd')

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_("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_('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()

#--coding=utf-8

from selenium import webdriver

import time

browser = webdriver.Chrome()

browser.get('url')

browser.maximize_window()

browser.find_element_by_xpath('//div[@class="login-main"]/p[1]/input').send_keys('aaaa')

browser.find_element_by_xpath('//div[@class="login-main"]/p[2]/input').send_keys('ddddd')

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_("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_('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()

5e8c5fa8715bfb2e1d6ee65c6d15389f.png

f4ab2333d6aaccf4901d8bceadfe3e15.png

f57abb3f77b6b3b9aedc0cef0ee58e78.png

11798d0d4676a596261898c412081e0f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值