python selenium xpath相对路径,绝对路径表达式包含什么,以什么开头,以什么结尾xpath具有css没有的属性是什么?xpath的坑有哪些?


#Xpath 里/html 表示根节点
# xpath 绝对路径里 /html/body/div 等价于 css html>body>div
from selenium import webdriver
wd=webdriver.Chrome()
url='http://cdn1.python3.vip/files/selenium/test1.html'
wd.get(url)
# eles=wd.find_elements_by_xpath('/html/body/div')
# for ele in eles:#当成多个小的元素处理
#     print('--'*30)
#     print(ele.text)

eles=wd.find_element_by_xpath('/html/body/div')
print(eles.text) #把它当成单个大的元素

# xpath 相对路径选择div //div//p(等价于css里 div>p )双斜杠表示下面的相对子节点,
# 可以不是直接子节点,直接子节点用单斜杠/,//div/p(等价于 css里 div p)
#div下的所有节点 //div/*

#Xpath可以根据属性来选择元素 [@属性名=‘属性值’];注意前面有@,属性值必须用单引号或者双引号,
# 比如选择//*[@id='west'] (css表达式 *[id='west'])

#xpath里class名有多个 //p[@class="capital huge-city"] (在css里 可以 .capital)
#//*[@multiple]

# http://cdn1.python3.vip/files/selenium/sample1.html
# CSS属性值包含某个字符窜的元素,可以用css这种表达式选择a[href*="miitbeian"];Xpath 表达式 //*[contains(@href,'miitbeian')]
#要选择a节点,里面的href属性以http开头 a[href^="http"];Xpath 表达式//*[starts-with(@class,'m')],//*[starts-with(@class,'m')]
#要选择a节点,以gov.cn结尾 a[href$='gov.cn'];Xpath2.0 表达式 //*[ends-with(@href,'vn')] Xpath1.0不支持
wd.quit()

更新一下,新增点内容,xpath定位法和css的其它区别,以及xpath所具有css没有的属性

Xpath里按次序选择,//p[2]选择的是 p类型第2个的子元素 , 不是第2个子元素,并且是p类型,(相当于CSS p:nth-of-type(2))
看链接“http://cdn1.python3.vip/files/selenium/test1.html”里Ctrl+F 搜索下,比较区别就知道了
//div//p[2] (等价于CSS div p:nth-of-type(2) )
假如我们就是想选择父元素为div的第2个子元素,不管是什么类型//div/*[2] (等价于CSS div > :nth-child(2))
倒数第1个用Xpath  //p[last()] 代表p类型的最后一个(等价于CSS p:nth-last-of-type(1)),倒数第2个Xpath用 //p[last()-1],倒数第三 -2
Xpath的范围选择,选取option类型第12个子元素 //option[position()<=2]或者//option[position()<3],选取前2个元素
选取后2个,//*[@class='multi_choice']//option[position()>=last()-1]

Xpath 组合选择用|分开,比如要选择所有的option元素和所有的h4元素,可以使用 //option|//h4(等价于option,h4)
Xpath可以选择父节点,这是CSS做不到,比如//div[@id="china"]/..是选取这个元素//div[@id="china"]的父节点,继续父节点就再加/..,/div[@id="china"]/../..
Xpath兄弟节点选择 following-sibling::,如选择后面的所有兄弟节点//*[@class='single_choice']/following-sibling::*(等同于.single_choice~*)
假如要选择后面的select类,直接加//*[@class='single_choice']/following-sibling::select,在前的用preceding-sibling 如//*[@class='multi_choice']/preceding-sibling::*前面的所有兄弟节点
'''
# Xpath的坑
# CSS #china>p  Xpath //div[@id='china']/p
china=wd.find_element_by_id('china')
# elements=china.find_elements_by_xpath('.//p')#从上面的对象china里找元素,一定要加.代表从返回的对象内部查找,如果不加点是从全部网页里找,不加点相当于从webdriver里查找
# for ele in elements:
#     print('-'*30)
#     print(ele.get_attribute('outerHTML'))
#验证一下,CSS没有这个问题
elements=china.find_elements_by_css_selector('p')#从上面的对象china里找元素,一定要加.代表从返回的对象内部查找,如果不加点是从全部网页里找,不加点相当于从webdriver里查找
# elements=china.find_elements_by_tag_name('p')
for ele in elements:
    print('-'*30)
    print(ele.get_attribute('outerHTML'))
sleep(3)
wd.quit()

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Onesiphorus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值