python定位xpath 節(jié)點(diǎn)位置的方法
chrome 右鍵有copy xpath地址
但是有些時(shí)候獲取的可能不對(duì)
可以自己用代碼驗(yàn)證一下
如果還是不行 可以考慮從源碼當(dāng)中取出來(lái)
趁熱打鐵,使用前一篇文章中 XPath 節(jié)點(diǎn)來(lái)定位HTML 頁(yè)面。
HTML文件如下(您可以將其拷貝,保存成html文件,跟我筆者實(shí)驗(yàn)):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Storm</title> </head> <body> <h1 id="h1" name="hname" class="cname">這是一個(gè)h1標(biāo)簽</h1> <form> 文本域1:<input type="text" name="first_name"> <br> 文本域2:<input type="text" name="last_name"> </form> <form> 密碼字段:<input type="password" name="password"> </form> <form> 單選按鈕1: <input type="radio" name="radio1" value="nan">male <input type="radio" name="radio1" value="nv">female </form> <form> 寵物: <input type="checkbox" name="cw">貓 <input type="checkbox" name="cw">狗 <input type="checkbox" name="cw">兔子 </form> </body> </html>
1、節(jié)點(diǎn)
上面的HTML文件,<html> 為根節(jié)點(diǎn),他有個(gè)lang的屬性,他有兩個(gè)子節(jié)點(diǎn)<head>和<body>。
2、選取節(jié)點(diǎn)實(shí)驗(yàn)
(1)/,從根節(jié)點(diǎn)選取
下面的代碼從根節(jié)點(diǎn)開(kāi)始選取所有的html元素(這里只有一個(gè)),打印tag name,就是html
from selenium import webdriver driver = webdriver.Chrome() driver.get(r'file:///E:\python\test1\day1\test0.html') eles = driver.find_elements_by_xpath('/html') for ele in eles: print(ele.tag_name) driver.quit()
運(yùn)行結(jié)果
C:\Python36\python.exe E:/python/test1/day1/test9.py html Process finished with exit code 0
(2)//,從目標(biāo)節(jié)點(diǎn)下選取
下面的xpath,意思就是我要去找head,找到就保存到eles里面,不一定需要在根目錄下面找
from selenium import webdriver driver = webdriver.Chrome() driver.get(r'file:///E:\python\test1\day1\test0.html') eles = driver.find_elements_by_xpath('//head') for ele in eles: print(ele.tag_name) driver.quit()
運(yùn)行結(jié)果:
C:\Python36\python.exe E:/python/test1/day1/test9.py head Process finished with exit code 0
如果我換成下面的xpath,結(jié)果會(huì)如何呢?
from selenium import webdriver driver = webdriver.Chrome() driver.get(r'file:///E:\python\test1\day1\test0.html') eles = driver.find_elements_by_xpath('/head') for ele in eles: print(ele.tag_name) driver.quit()
從根節(jié)點(diǎn)選取head元素,跟節(jié)點(diǎn)不是head元素,所以找不到,打印為空
(3). ,選取當(dāng)前節(jié)點(diǎn);.. ,選取父節(jié)點(diǎn)
下面的xpath,第一個(gè),匹配到head元素,然后分配找head當(dāng)前節(jié)點(diǎn)(就是head);head父節(jié)點(diǎn)(是html)
from selenium import webdriver driver = webdriver.Chrome() driver.get(r'file:///E:\python\test1\day1\test0.html') eles2 = driver.find_elements_by_xpath('//head/.') eles3 = driver.find_elements_by_xpath('//head/..') for ele in eles2: print(ele.tag_name) for ele in eles3: print(ele.tag_name) driver.quit()
運(yùn)行結(jié)果:
C:\Python36\python.exe E:/python/test1/day1/test9.py head html Process finished with exit code 0
(4)@ 選取屬性
下面xpath為,匹配任意元素,其有個(gè)屬性charset,值為UTF-8。
from selenium import webdriver driver = webdriver.Chrome() driver.get(r'file:///E:\python\test1\day1\test0.html') eles3 = driver.find_elements_by_xpath('//*[@charset="UTF-8"]') for ele in eles3: print(ele.tag_name) driver.quit()
運(yùn)行結(jié)果為:
C:\Python36\python.exe E:/python/test1/day1/test9.py meta Process finished with exit code 0
3、謂語(yǔ)實(shí)驗(yàn)
(1)[1]
選擇第一個(gè)form元素下面的第一個(gè)input元素,打印name屬性值
eles1 = driver.find_elements_by_xpath('//form[1]/input[1]') for ele in eles1: print(ele.get_attribute('name'))
運(yùn)行結(jié)果:first_name
(2)[last()]
eles1 = driver.find_elements_by_xpath('//form[1]/input[last()]')
運(yùn)行結(jié)果:last_name
(3)[last()-1]
eles1 = driver.find_elements_by_xpath('//form[1]/input[last()-1]')
運(yùn)行結(jié)果:first_name
(4)[position()<3]
eles1 = driver.find_elements_by_xpath('//form[1]/input[position()<3]')
運(yùn)行結(jié)果:
first_name last_name
(5)h1[@class]
在body元素下層找具有class屬性的h1標(biāo)簽
eles1 = driver.find_elements_by_xpath('//body/h1[@class]') for ele in eles1: print(ele.tag_name)
(6)h1[@class="cname"]
在body元素下層找具有class屬性的h1標(biāo)簽,且值為cname
eles1 = driver.find_elements_by_xpath('//body/h1[@class="cname"]')
(7)input[xxx>35]
這個(gè)沒(méi)找到合適的例子,暫缺
4、選取未知節(jié)點(diǎn)——通過(guò)通配符實(shí)現(xiàn)
(1)//form[1]/*
選擇form[1]下的所有元素
eles1 = driver.find_elements_by_xpath('//form[1]/*') for ele in eles1: print(ele.get_attribute('name'))
運(yùn)行結(jié)果:
first_name None last_name
(2)//*
選擇所有元素
eles1 = driver.find_elements_by_xpath('//*') for ele in eles1: print(ele.tag_name)
運(yùn)行結(jié)果:
html head meta title body h1 form input br input form input form input input form input input input input
(3)//input[@*]
匹配只要有任意屬性的input元素
以上這篇python定位xpath 節(jié)點(diǎn)位置的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
pycharm重置設(shè)置,恢復(fù)默認(rèn)設(shè)置的方法
今天小編就為大家分享一篇pycharm重置設(shè)置,恢復(fù)默認(rèn)設(shè)置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10Python 字典一個(gè)鍵對(duì)應(yīng)多個(gè)值的方法
這篇文章主要介紹了Python 字典一個(gè)鍵對(duì)應(yīng)多個(gè)值的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09python實(shí)現(xiàn)爬蟲統(tǒng)計(jì)學(xué)校BBS男女比例之?dāng)?shù)據(jù)處理(三)
這篇文章主要介紹了python實(shí)現(xiàn)爬蟲統(tǒng)計(jì)學(xué)校BBS男女比例之?dāng)?shù)據(jù)處理,需要的朋友可以參考下2015-12-12Python技法之簡(jiǎn)單遞歸下降Parser的實(shí)現(xiàn)方法
遞歸下降解析器可以用來(lái)實(shí)現(xiàn)非常復(fù)雜的解析,下面這篇文章主要給大家介紹了關(guān)于Python技法之簡(jiǎn)單遞歸下降Parser的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05詳解Python+Pyecharts實(shí)現(xiàn)漏斗圖的繪制
漏斗圖是一個(gè)簡(jiǎn)單的散點(diǎn)圖,反映研究在一定樣本量或精確性下單個(gè)研究的干預(yù)效應(yīng)估計(jì)值。本文將用Python Pyecharts實(shí)現(xiàn)漏斗圖的繪制,需要的可以參考一下2022-06-06使用python爬取連續(xù)降水?dāng)?shù)據(jù)信息實(shí)例
這篇文章主要為大家介紹了使用python提取連續(xù)降水?dāng)?shù)據(jù)信息實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01在macOS上搭建python環(huán)境的實(shí)現(xiàn)方法
今天小編就為大家分享一篇在macOS上搭建python環(huán)境的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08pyecharts如何實(shí)現(xiàn)顯示數(shù)據(jù)為百分比的柱狀圖
這篇文章主要介紹了pyecharts如何實(shí)現(xiàn)顯示數(shù)據(jù)為百分比的柱狀圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11全面了解Python的getattr(),setattr(),delattr(),hasattr()
下面小編就為大家?guī)?lái)一篇全面了解Python的getattr(),setattr(),delattr(),hasattr()。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06