chrome 右鍵有copy xpath地址
但是有些時候獲取的可能不對
可以自己用代碼驗證一下
如果還是不行 可以考慮從源碼當中取出來
趁熱打鐵,使用前一篇文章中 XPath 節點來定位HTML 頁面。
HTML文件如下(您可以將其拷貝,保存成html文件,跟我筆者實驗):
Storm 這是一個h1標簽
1、節點
上面的HTML文件, 為根節點,他有個lang的屬性,他有兩個子節點和。
2、選取節點實驗
(1)/,從根節點選取
下面的代碼從根節點開始選取所有的html元素(這里只有一個),打印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()
運行結果
C:\Python36\python.exe E:/python/test1/day1/test9.py html Process finished with exit code 0
(2)//,從目標節點下選取
下面的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()
運行結果:
C:\Python36\python.exe E:/python/test1/day1/test9.py head Process finished with exit code 0
如果我換成下面的xpath,結果會如何呢?
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()
從根節點選取head元素,跟節點不是head元素,所以找不到,打印為空
(3). ,選取當前節點;.. ,選取父節點
下面的xpath,第一個,匹配到head元素,然后分配找head當前節點(就是head);head父節點(是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()
運行結果:
C:\Python36\python.exe E:/python/test1/day1/test9.py head html Process finished with exit code 0
(4)@ 選取屬性
下面xpath為,匹配任意元素,其有個屬性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()
運行結果為:
C:\Python36\python.exe E:/python/test1/day1/test9.py meta Process finished with exit code 0
3、謂語實驗
(1)[1]
選擇第一個form元素下面的第一個input元素,打印name屬性值
eles1 = driver.find_elements_by_xpath('//form[1]/input[1]') for ele in eles1: print(ele.get_attribute('name'))
運行結果:first_name
(2)[last()]
eles1 = driver.find_elements_by_xpath('//form[1]/input[last()]')
運行結果:last_name
(3)[last()-1]
eles1 = driver.find_elements_by_xpath('//form[1]/input[last()-1]')
運行結果:first_name
(4)[position()<3]
eles1 = driver.find_elements_by_xpath('//form[1]/input[position()<3]')
運行結果:
first_name last_name
(5)h1[@class]
在body元素下層找具有class屬性的h1標簽
eles1 = driver.find_elements_by_xpath('//body/h1[@class]') for ele in eles1: print(ele.tag_name)
(6)h1[@class="cname"]
在body元素下層找具有class屬性的h1標簽,且值為cname
eles1 = driver.find_elements_by_xpath('//body/h1[@class="cname"]')
(7)input[xxx>35]
這個沒找到合適的例子,暫缺
4、選取未知節點――通過通配符實現
(1)//form[1]/*
選擇form[1]下的所有元素
eles1 = driver.find_elements_by_xpath('//form[1]/*') for ele in eles1: print(ele.get_attribute('name'))
運行結果:
first_name None last_name
(2)//*
選擇所有元素
eles1 = driver.find_elements_by_xpath('//*') for ele in eles1: print(ele.tag_name)
運行結果:
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 節點位置的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
