亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python selenium 父子、兄弟、相鄰節(jié)點定位方式詳解

 更新時間:2016年09月15日 11:46:38   作者:huilan_same  
這篇文章主要介紹了Python selenium 父子、兄弟、相鄰節(jié)點定位方式詳解的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

今天跟大家分享下selenium中根據(jù)父子、兄弟、相鄰節(jié)點定位的方法,很多人在實際應(yīng)用中會遇到想定位的節(jié)點無法直接定位,需要通過附近節(jié)點來相對定位的問題,但從父節(jié)點定位子節(jié)點容易,從子節(jié)點定位父節(jié)點、定位一個節(jié)點的哥哥節(jié)點就一籌莫展了,別急,且看博主一步步講解。

1. 由父節(jié)點定位子節(jié)點

最簡單的肯定就是由父節(jié)點定位子節(jié)點了,我們有很多方法可以定位,下面上個例子:

對以下代碼:

<html>
<body>
<div id="A">
<!--父節(jié)點定位子節(jié)點-->
<div id="B">
<div>parent to child</div>
</div>
</div>
</body>
</html>

想要根據(jù) B節(jié)點 定位無id的子節(jié)點,代碼示例如下:

# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('D:\\py\\AutoTestFramework\\src\\others\\test.html')
# 1.串聯(lián)尋找
print driver.find_element_by_id('B').find_element_by_tag_name('div').text
# 2.xpath父子關(guān)系尋找
print driver.find_element_by_xpath("http://div[@id='B']/div").text
# 3.css selector父子關(guān)系尋找
print driver.find_element_by_css_selector('div#B>div').text
# 4.css selector nth-child
print driver.find_element_by_css_selector('div#B div:nth-child(1)').text
# 5.css selector nth-of-type
print driver.find_element_by_css_selector('div#B div:nth-of-type(1)').text
# 6.xpath軸 child
print driver.find_element_by_xpath("http://div[@id='B']/child::div").text
driver.quit()

結(jié)果:

parent to child
parent to child
parent to child
parent to child
parent to child
parent to child

第1到第3都是我們熟悉的方法,便不再多言。第4種方法用到了css選擇器:nth-child(n),該選擇器返回第n個節(jié)點,該節(jié)點為div標簽;第5種方法用到了另一個css選擇器: nth-of-type(n),該選擇器返回第n個div標簽,注意與上一個選擇器的區(qū)別;第6種方法用到了xpath軸 child,這個是xpath默認的軸,可以忽略不寫,其實質(zhì)是跟方法2一樣的。

當然,css中還有一些選擇器是可以選擇父子關(guān)系的如last-child、nth-last-child等,感興趣可以自行百度,有機會博主會講講css selector。

2. 由子節(jié)點定位父節(jié)點

由子節(jié)點想要定位到父節(jié)點就有點難度了,對以下代碼:

<html>
<body>
<div id="A">
<!--子節(jié)點定位父節(jié)點-->
<div>
<div>child to parent
<div>
<div id="C"></div>
</div>
</div>
</div>
</div>
</body>
</html>

我們想要由 C節(jié)點 定位其兩層父節(jié)點的div,示例代碼如下:

# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('D:\\py\\AutoTestFramework\\src\\others\\test.html')
# 1.xpath: `.`代表當前節(jié)點; '..'代表父節(jié)點
print driver.find_element_by_xpath("http://div[@id='C']/../..").text
# 2.xpath軸 parent
print driver.find_element_by_xpath("http://div[@id='C']/parent::*/parent::div").text
driver.quit()

結(jié)果:

child to parent
child to parent

這里我們有兩種辦法,第1種是 .. 的形式,就像我們知道的,. 表示當前節(jié)點,.. 表示父節(jié)點;第2種辦法跟上面一樣,是xpath軸中的一個:parent,取當前節(jié)點的父節(jié)點。這里也是css selector的一個痛點,因為css的設(shè)計不允許有能夠獲取父節(jié)點的辦法(至少目前沒有)

3. 由弟弟節(jié)點定位哥哥節(jié)點

這是第3、第4種情況,我們這里要定位的是兄弟節(jié)點了。如以下源碼:

<html>
<body>
<div id="A">
<!--下面兩個節(jié)點用于兄弟節(jié)點定位-->
<div>brother 1</div>
<div id="D"></div>
<div>brother 2</div>
</div>
</body>
</html>

怎么通過 D節(jié)點 定位其哥哥節(jié)點呢?看代碼示例:

# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('D:\\Code\\py\\AutoTestFramework\\src\\others\\test.html')
# 1.xpath,通過父節(jié)點獲取其哥哥節(jié)點
print driver.find_element_by_xpath("http://div[@id='D']/../div[1]").text
# 2.xpath軸 preceding-sibling
print driver.find_element_by_xpath("http://div[@id='D']/preceding-sibling::div[1]").text
driver.quit()

結(jié)果

brother 1
brother 1

這里博主也列舉了兩種方法,一種是通過該節(jié)點的父節(jié)點來獲得哥哥節(jié)點,另外一種比較優(yōu)雅,是通過 xpath軸:preceding-sibling,其能夠獲取當前節(jié)點的所有同級哥哥節(jié)點,注意括號里的標號,1 代表著離當前節(jié)點最近的一個哥哥節(jié)點,數(shù)字越大表示離當前節(jié)點越遠,當然,xpath軸:preceding也可以,但是使用起來比較復雜,它獲取到的是該節(jié)點之前的所有非祖先節(jié)點(這里不太好解釋,改天專門寫篇博文講解下所有的軸)

4. 由哥哥節(jié)點定位弟弟節(jié)點

源碼與 3 一致,要想通過 D節(jié)點 定位其弟弟節(jié)點,看代碼示例:

# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('D:\\Code\\py\\AutoTestFramework\\src\\others\\test.html')
# 1.xpath,通過父節(jié)點獲取其弟弟節(jié)點
print driver.find_element_by_xpath("http://div[@id='D']/../div[3]").text
# 2.xpath軸 following-sibling
print driver.find_element_by_xpath("http://div[@id='D']/following-sibling::div[1]").text
# 3.xpath軸 following
print driver.find_element_by_xpath("http://div[@id='D']/following::*").text
# 4.css selector +
print driver.find_element_by_css_selector('div#D + div').text
# 5.css selector ~
print driver.find_element_by_css_selector('div#D ~ div').text
driver.quit()

結(jié)果:

brother 2
brother 2
brother 2
brother 2
brother 2

博主分享了五種方法定位其弟弟節(jié)點,上面三種是用xpath,第一種很好理解,第二種用到了xpath軸:following-sibling,跟preceding-sibling類似,它的作用是獲取當前節(jié)點的所有同級弟弟節(jié)點,同樣,1 代表離當前節(jié)點最近的一個弟弟節(jié)點,數(shù)字越大表示離當前節(jié)點越遠;第三種用到了xpath軸:following,獲取到該節(jié)點之后所有節(jié)點,除了祖先節(jié)點(跟preceding方向相反,但因為往下順序容易讀,不容易出錯,所以也是可以用來獲取弟弟節(jié)點的,但也不建議這么使用);第四、第五種,我們用到了css selector,+ 和 ~ 的區(qū)別是: + 表示緊跟在當前節(jié)點之后的div節(jié)點,~ 表示當前節(jié)點之后的div節(jié)點,如果用find_elements,則可獲取到一組div節(jié)點。

以上所述是小編給大家介紹的Python selenium 父子、兄弟、相鄰節(jié)點定位方式詳解的全部敘述,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的,在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Python:__eq__和__str__函數(shù)的使用示例

    Python:__eq__和__str__函數(shù)的使用示例

    這篇文章主要介紹了Python:__eq__和__str__函數(shù)的使用示例,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-09-09
  • python openpyxl模塊的使用詳解

    python openpyxl模塊的使用詳解

    這篇文章主要介紹了python openpyxl模塊的使用詳解,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-02-02
  • Pyside2中嵌入Matplotlib的繪圖的實現(xiàn)

    Pyside2中嵌入Matplotlib的繪圖的實現(xiàn)

    這篇文章主要介紹了Pyside2中嵌入Matplotlib的繪圖的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Pandas中DataFrame數(shù)據(jù)刪除詳情

    Pandas中DataFrame數(shù)據(jù)刪除詳情

    這篇文章主要以介紹的是Pandas中DataFrame的數(shù)據(jù)刪除的相關(guān)資料,主要使用drop、del方式,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • 使用Python Tkinter實現(xiàn)剪刀石頭布小游戲功能

    使用Python Tkinter實現(xiàn)剪刀石頭布小游戲功能

    這篇文章主要介紹了使用Python Tkinter實現(xiàn)剪刀石頭布小游戲功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Python類和方法注釋規(guī)范說明

    Python類和方法注釋規(guī)范說明

    這篇文章主要介紹了Python類和方法注釋規(guī)范說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • python編寫的最短路徑算法

    python編寫的最短路徑算法

    本文給大家分享的是python 無向圖最短路徑算法:請各位大大指教,繼續(xù)改進。(修改了中文字符串,使py2exe中文沒煩惱),需要的朋友可以參考下
    2015-03-03
  • Django的多表查詢操作實戰(zhàn)

    Django的多表查詢操作實戰(zhàn)

    Django提供一種強大而又直觀的方式來"處理"查詢中的關(guān)聯(lián)關(guān)系,它在后臺自動幫你處理JOIN,下面這篇文章主要給大家介紹了關(guān)于Django多表查詢操作的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • python中獲得當前目錄和上級目錄的實現(xiàn)方法

    python中獲得當前目錄和上級目錄的實現(xiàn)方法

    這篇文章主要介紹了python中獲得當前目錄和上級目錄的實現(xiàn)方法,需要的朋友可以參考下
    2017-10-10
  • python利用logging模塊實現(xiàn)根據(jù)日志級別打印不同顏色日志的代碼案例

    python利用logging模塊實現(xiàn)根據(jù)日志級別打印不同顏色日志的代碼案例

    這篇文章主要介紹了python利用logging模塊實現(xiàn)根據(jù)日志級別打印不同顏色日志,本文通過實例代碼給大家詳細講解,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12

最新評論