欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Selenium常見八大定位法總結(jié)

 更新時間:2023年02月17日 14:17:59   作者:小胖虎*  
自動化最基礎的就屬于定位元素了,元素不會定位,基本上已經(jīng)團滅了,就不用再去考慮什么自動化了,下面這篇文章主要給大家介紹了關于Selenium常見八大定位法的相關資料,需要的朋友可以參考下

1.1 ID定位

HTML Tag 的 id 屬性值是唯一的,故不存在根據(jù) id 定位多個元素的情況。下面以在百度首頁搜索框輸入文本“python”為例。搜索框的 id 屬性值為“kw”,如圖1.1所示:

代碼如下,“find_element_by_id”方法已廢棄,使用find_element(By.ID, 'kw')

from selenium import webdriver
from selenium.webdriver.common.by import By
 
driver = webdriver.Firefox()
# 需要將瀏覽器驅(qū)動添加到環(huán)境變量中
# 打開百度
driver.get('https://www.baidu.com/')
# 通過id,在搜索輸入框中輸入文本“python”
driver.find_element(By.ID, 'kw').send_keys('python')
# 點擊搜索
driver.find_element(By.ID, 'su').click()
# 關閉瀏覽器
driver.close()

1.2 name 定位

以上百度搜索框也可以用 name 來實現(xiàn),如圖 1.1 所示,其 name 屬性值為“wd”,方法“find_element(By.NAME, 'wd')”表示通過 name 來定位

代碼如下:

driver = webdriver.Firefox()
# 打開百度
driver.get('https://www.baidu.com/')
# 通過name,在搜索輸入框中輸入文本“自動化測試”
driver.find_element(By.NAME, 'wd').send_keys('自動化測試')
# 點擊搜索
driver.find_element(By.ID, 'su').click()
# 關閉瀏覽器
driver.close()

注意:用 name 方式定位需要保證 name 值唯一,否則定位失敗。

1.3 class 定位

以百度首頁搜索框為例,如圖 1.1所示,其 class 屬性值為“s_ipt”,“By.CLASS_NAME, 's_ipt'”表示通過 class_name 來定位

代碼如下:

driver = webdriver.Firefox()
# 打開百度
driver.get('https://www.baidu.com/')
# 通過class,在搜索輸入框中輸入文本“web測試”
driver.find_element(By.CLASS_NAME, 's_ipt').send_keys('web測試')
# 點擊搜索
driver.find_element(By.ID, 'su').click()
# 關閉瀏覽器
driver.close()

1.4 link_text 定位

link_text 是以超鏈接全部名字作為關鍵字來定位元素的。以百度首頁“新聞”超鏈接為例,如圖 1.2 所示,關鍵字為“新聞”。

代碼如下:

driver = webdriver.Firefox()
# 打開百度
driver.get('https://www.baidu.com/')
# 通過link_text定位,點擊‘新聞'超鏈接
driver.find_element(By.LINK_TEXT, '新聞').click()
# 關閉瀏覽器
driver.close()

注意:用此方法定位元素超鏈接,中文字需要寫全。

1.5 partial_link_text 定位

即用超鏈接文字的部分文本來定位元素,類似數(shù)據(jù)庫的模糊查詢。以“新聞”超鏈接為例,只需“新”一個字即可,即取超鏈接全部文本的一個子集。

代碼如下:

driver = webdriver.Firefox()
# 打開百度
driver.get('https://www.baidu.com/')
# 通過partial_link_text定位,用超鏈接文字的部分文本來定位元素,類似數(shù)據(jù)庫的模糊查詢
driver.find_element(By.PARTIAL_LINK_TEXT, '新').click()
# 關閉瀏覽器
driver.close()

1.6 tag_name 定位

tag_name 定位即通過標簽名稱定位,如圖 1.6所示,定位標簽“form”并打印標簽屬性值“name”。

代碼如下:

driver = webdriver.Firefox()
# 打開百度
driver.get('https://www.baidu.com/')
# tag_name 定位即通過標簽名稱定位
print(driver.find_element(By.TAG_NAME, 'form').get_attribute('name'))

成功后控制臺輸出“f”:

1.7 CSS 定位

CSS 定位的優(yōu)點是速度快、語法簡潔。表 1.1 中的內(nèi)容出自 W3School 的 CSS 參考手冊。CSS 定位的選擇器有十幾種,在本節(jié)中主要介紹幾種比較常用的選擇器。

仍以百度搜索框為例,代碼如下:

driver = webdriver.Firefox()
# 打開百度
driver.get('https://www.baidu.com/')
 
#  以class選擇器為例,實現(xiàn)CSS定位,在搜索框輸入“python3”
driver.find_element(By.CSS_SELECTOR, '.s_ipt').send_keys('python3')
 
#  以id定位語法結(jié)構為:#加 id 名,實現(xiàn)CSS定位,在搜索框輸入“python3”
driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('python3')
 
# CSS 定位主要利用屬性 class 和 id 進行元素定位。也可以利用常規(guī)的標簽名稱來定位,如輸入框標簽“input”,在標簽內(nèi)部又設置了屬性值為“name='wd'”
driver.find_element(By.CSS_SELECTOR, "input[name='wd']").send_keys('python3')
 
# CSS 定位方式可以使用元素在頁面布局中的絕對路徑來實現(xiàn)元素定位。百度首頁搜索輸入框元素的絕對路
# 徑為“html>body>div>div>div>div>div>form>span>input[name="wd"]”
driver.find_element(By.CSS_SELECTOR, 'html>body>div>div>div>div>div>form>span>input[name="wd"]').send_keys('python3')
 
# CSS 定位也可以使用元素在頁面布局中的相對路徑來實現(xiàn)元素定位。相對路徑的寫法和直接利用標簽名稱來定位,兩者
# 的代碼實現(xiàn)的功能是一致的
driver.find_element(By.CSS_SELECTOR, "input[name='wd']").send_keys('python3')
 
# 點擊搜索
driver.find_element(By.ID, 'su').click()
# 關閉瀏覽器
driver.close()

1.8 XPath 定位

通過 XPath 來定位元素的方式,對比較難以定位的元素來說很有效,幾乎都可以解決,特別是對于有些元素沒有 id、name 等屬性的情況。

XPath 是 XML Path 語言的縮寫,是一種用來確定 XML 文檔中某部分位置的語言。它在 XML 文檔中通過元素名和屬性進行搜索,主要用途是在 XML 文檔中尋找節(jié)點。XPath定位比 CSS 定位有更大的靈活性。XPath 可以向前搜索也可以向后搜索,而 CSS 定位只能向前搜索,但是 XPath 定位的速度比 CSS 慢一些。

XPath 語言包含根節(jié)點、元素、屬性、文本、處理指令、命名空間等。以下文本為 XML實例文檔,用于演示 XML 的各種節(jié)點類型,便于理解 XPath。

<?xml version = "1.0" encoding = "utf-8" ?> 
<!-- 這是一個注釋節(jié)點 --> 
<animalList type="mammal"> 
 <animal categoruy = "forest"> 
 <name>Tiger</name> 
 <size>big</size> 
 <action>run</action> 
 </animal> 
</animalList>

其中<animalList>為文檔節(jié)點,也是根節(jié)點;<name>為元素節(jié)點;type=“mammal”為屬性節(jié)點。

節(jié)點之間的關系:

• 父節(jié)點。每個元素都有一個父節(jié)點,如上面的 XML 示例中,animal 元素是 name、size,以及 action 元素的父節(jié)點。

• 子節(jié)點。與父節(jié)點相反,這里不再贅述。

• 兄弟節(jié)點,有些也叫同胞節(jié)點。它表示擁有相同父節(jié)點的節(jié)點。如上代碼所示,name、size 和 action 元素都是同胞節(jié)點。

• 先輩節(jié)點。它是指某節(jié)點的父節(jié)點,或者父節(jié)點的父節(jié)點,以此類推。如上代碼所示,name 元素節(jié)點的先輩節(jié)點有 animal 和 animalList。

• 后代節(jié)點。它表示某節(jié)點的子節(jié)點、子節(jié)點的子節(jié)點,以此類推。如上代碼所示,animalList 元素節(jié)點的后代節(jié)點有 animal、name 等。

仍以百度搜索框為例,代碼如下:

driver = webdriver.Firefox()
# 打開百度
driver.get('https://www.baidu.com/')
# XPath 有多種定位策略,最簡單直觀的就是寫出元素的絕對路徑。
driver.find_element(By.XPATH, '/html/body/div/div/div/div/div/form/span/input').send_keys('python3')
 
# XPath還可以使用元素的屬性值來定位。//input 表示當前頁面某個 input 標簽,[@id='kw'] 表示這個元素的 id 值是 kw。
driver.find_element(By.XPATH, "http://input[@id='kw']").send_keys('python3')
 
# 如果一個元素本身沒有可以唯一標識這個元素的屬性值,我們可以查找其上一級元素。
# form[@class='fm  has-soutu']通過 class 定位到父元素,后面的/span/input 表示父元素下面的子元素。
driver.find_element(By.XPATH, "http://form[@class='fm  has-soutu']/span/input").send_keys('python3')
 
# 如果一個屬性不能唯一區(qū)分一個元素,那么我們可以使用邏輯運算符連接多個屬性來查找元素
driver.find_element(By.XPATH, "http://input[@id='kw' and @class='s_ipt']").send_keys('python3')
 
# 點擊搜索
driver.find_element(By.ID, 'su').click()
# 關閉瀏覽器
driver.close()

本章主要介紹了 Selenium 元素的八大定位,每一種定位方式都有其特殊的用法,讀者只要掌握其特殊性即可。需要在項目中多用多想、總結(jié)經(jīng)驗,時間久了會對這些定位方式有更深的理解。

總結(jié)

到此這篇關于Selenium常見八大定位法總結(jié)的文章就介紹到這了,更多相關Selenium定位法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python中enumerate的用法實例解析

    python中enumerate的用法實例解析

    這篇文章主要介紹了python中enumerate的用法,對Python初學者而言是非常重要的概念,需要的朋友可以參考下
    2014-08-08
  • Python?Tornado?框架使用終極指南

    Python?Tornado?框架使用終極指南

    這篇文章主要為大家介紹了Python?Tornado?框架使用終極指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Python3實現(xiàn)發(fā)送QQ郵件功能(附件)

    Python3實現(xiàn)發(fā)送QQ郵件功能(附件)

    這篇文章主要為大家詳細介紹了Python3實現(xiàn)發(fā)送QQ郵件功能,附件方面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Python實現(xiàn)自動化處理Word文檔的方法詳解

    Python實現(xiàn)自動化處理Word文檔的方法詳解

    本文主要介紹了如何使用Python實現(xiàn)Word文檔的自動化處理,包括批量生成Word文檔、在Word文檔中批量進行查找和替換、將Word文檔批量轉(zhuǎn)換成PDF等,希望對你有所幫助
    2022-08-08
  • Python實現(xiàn)批量下載文件的示例代碼

    Python實現(xiàn)批量下載文件的示例代碼

    下載文件是我們在日常工作中常常要做的一件事情,當我們需要從互聯(lián)網(wǎng)上批量下載大量文件時,手動一個一個去下載顯然不夠高效,所以本文為大家介紹一下如何利用python批量下載文件吧
    2023-11-11
  • Django實現(xiàn)后臺上傳并顯示圖片功能

    Django實現(xiàn)后臺上傳并顯示圖片功能

    這篇文章主要介紹了Django實現(xiàn)后臺上傳并顯示圖片功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • python3.8+django2+celery5.2.7環(huán)境準備(python測試開發(fā)django)

    python3.8+django2+celery5.2.7環(huán)境準備(python測試開發(fā)django)

    這篇文章主要介紹了python測試開發(fā)django之python3.8+django2+celery5.2.7環(huán)境準備工作,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Python中查找缺失值的三種方法

    Python中查找缺失值的三種方法

    本文主要介紹了Python中查找缺失值的三種方法,包括pandas庫的isnull()方法、numpy庫的isnan()方法和scikit-learn庫的SimpleImputer類,感興趣的可以了解一下
    2023-11-11
  • wxPython窗口中文亂碼解決方法

    wxPython窗口中文亂碼解決方法

    這篇文章主要介紹了wxPython窗口中文亂碼解決方法,在Python程序設計中比較常見,是非常實用的技巧,需要的朋友可以參考下
    2014-10-10
  • Python Django 頁面上展示固定的頁碼數(shù)實現(xiàn)代碼

    Python Django 頁面上展示固定的頁碼數(shù)實現(xiàn)代碼

    這篇文章主要介紹了Python Django 頁面上展示固定的頁碼數(shù)實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08

最新評論