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