selenium獲取元素定位的方法總結(jié)(動(dòng)態(tài)獲取元素)
元素
要想操作一個(gè)元素,首先應(yīng)該識(shí)別這個(gè)元素。人有各種的特征(屬性),可以通過(guò)其特征找到人,如通過(guò)身份證號(hào)、姓名、家庭住址。同理,界面的某個(gè)元素會(huì)有各種的特征(屬性),可以通過(guò)這個(gè)屬性找到這對(duì)象。
例如:
driver.find_element(By.CSS_SELECTOR, 'img[title="點(diǎn)擊圖片重新獲取驗(yàn)證碼"]')
該代碼尋找屬性標(biāo)識(shí)著為 “點(diǎn)擊圖片重新獲取驗(yàn)證碼圖” 的圖片驗(yàn)證碼。
元素:由標(biāo)簽頭 + 標(biāo)簽尾 + 標(biāo)簽頭和標(biāo)簽尾包括的文本內(nèi)容
元素定位最終就是通過(guò)元素的信息或者元素的層級(jí)結(jié)構(gòu)來(lái)進(jìn)行元素定位
查看元素信息
選中元素,右鍵點(diǎn)擊“檢查”,即可查看到該控件的所有屬性
元素定位
selenium提供了常用的8種方法:
定位一個(gè)元素
定位多個(gè)元素
- 通過(guò)元素id定位
find_element_by_id
find_elements_by_id
通過(guò)元素name定位
find_element_by_name
find_elements_by_name
通過(guò)xpath表達(dá)式定位
find_element_by_xpath
find_elements_by_xpath
通過(guò)完整超鏈接定位
find_element_by_link_text
find_elements_by_link_text
通過(guò)部分鏈接定位
find_element_by_partial_link_text
find_elements_by_partial_link_text
通過(guò)標(biāo)簽定位
find_element_by_tag_name
find_elements_by_tag_name
通過(guò)類名進(jìn)行定位
find_element_by_class_name
find_elements_by_class_name
通過(guò)css選擇器進(jìn)行定位
find_element_by_css_selector
find_elements_by_css_selector
通過(guò)元素id定位
find_element_by_id("kw")?
通過(guò)元素name定位
find_element_by_id("kw")?
通過(guò)xpath表達(dá)式定位
Xpath
是一種在XML
和HTML
文檔中查找信息的語(yǔ)言,通過(guò)Xpath
路徑來(lái)定位元素的時(shí)候也是分絕對(duì)路徑和相對(duì)路徑。
絕對(duì)路徑
鼠標(biāo)單機(jī)右鍵-Copy-Copy full XPath即可獲取其XPath絕對(duì)路徑
/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input
selenium通過(guò)xpath定位語(yǔ)句:
find_element_by_xpath('/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input')
相對(duì)路徑
鼠標(biāo)單機(jī)右鍵-Copy-Copy XPath即可獲取其XPath相對(duì)路徑
//*[@id="kw"]
selenium通過(guò)xpath定位語(yǔ)句:
find_element_by_xpath('//*[@id="kw"]')
相對(duì)路徑的xpath定位表達(dá)式更加簡(jiǎn)潔,但是偶然會(huì)出現(xiàn)錯(cuò)誤的尋址,但如果可以推薦使用相對(duì)路徑的xpath表達(dá)式。
通過(guò)完整超鏈接定位
find_element_by_link_text('文庫(kù)')
通過(guò)部分鏈接定位
find_element_by_partial_link_text('庫(kù)')
通過(guò)標(biāo)簽定位
HTML
是通過(guò)tag
來(lái)定義一類功能的,比如input
是輸入,table
是表格,tbody
是表格主體等。每個(gè)元素其實(shí)就是一個(gè)tag
,由于一個(gè)tag
用來(lái)定義一類功能,一個(gè)網(wǎng)頁(yè)往往有很多同類tag
,所以很難通過(guò)tag
去區(qū)分不同的元素。
find_element_by_tag_name('input')?
通過(guò)類名進(jìn)行定位
find_element_by_class_name('s_ipt')
如果class的值中有空格,則需要借助CSS選擇器。
通過(guò)css選擇器進(jìn)行定位
在Selenium
官網(wǎng)當(dāng)中是更加推薦Css Selector()
方法來(lái)進(jìn)行頁(yè)面元素的定位的,Css
定位可以通過(guò)id選擇器、class選擇器、標(biāo)簽選擇器和屬性選擇器。
id選擇器
通過(guò) # 來(lái)定義,通過(guò)元素的id屬性來(lái)定位
find_element_by_css_selector("#kw")?
class選擇器
通過(guò) .來(lái)定義,通過(guò)元素的class屬性來(lái)定位
find_element_by_css_selector(".s_ipt")?
標(biāo)簽選擇器
通過(guò)標(biāo)簽的名字來(lái)定位元素
find_element_by_css_selector("input")?
屬性選擇器
find_element_by_css_selector('[id="kw"]')? find_element_by_css_selector('input[id="kw"]')?
定位帶空格的復(fù)合class屬性
以百度上方欄目元素為例,其class屬性帶有空格。
class="s-top-left-new?s-isindex-wrap"
直接通過(guò)class屬性定位是會(huì)報(bào)錯(cuò)的,需要通過(guò)css selector按class屬性定位。
find_element_by_css_selector('[class="s-top-left-new?s-isindex-wrap"]')
selenium 4.0以后版本用法
from?selenium.webdriver.common.by?import?By element?=?web.find_element(By.ID,'kw') element?=?web.find_element(By.NAME,'wd') element?=?web.find_element(By.CLASS_NAME,'s_ipt') element?=?web.find_element(By.TAG_NAME,'input') element?=?web.find_element(By.LINK_TEXT,'新聞') element?=?web.find_element(By.PARTIAL_LINK_TEXT,'聞') element?=?web.find_element(By.XPATH,'//*[@id="kw"]') element?=?web.find_element(By.CSS_SELECTOR,'#kw') element?=?web.find_element(By.CSS_SELECTOR,'[id="kw"]') element?=?web.find_element(By.CSS_SELECTOR,'input[id="kw"]')
以上就是selenium獲取元素定位的8種方法總結(jié)(動(dòng)態(tài)獲取元素)的詳細(xì)內(nèi)容,更多關(guān)于selenium元素定位的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
django獲取from表單multiple-select的value和id的方法
今天小編就為大家分享一篇django獲取from表單multiple-select的value和id的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07詳解OpenCV自適應(yīng)直方圖均衡化的應(yīng)用
在本文中,將介紹如何應(yīng)用對(duì)比度受限的自適應(yīng)直方圖均衡化 ( Contrast Limited Adaptive Histogram Equalization, CLAHE ) 來(lái)均衡圖像,需要的可以參考一下2022-02-02Python實(shí)現(xiàn)基于權(quán)重的隨機(jī)數(shù)2種方法
這篇文章主要介紹了Python實(shí)現(xiàn)基于權(quán)重的隨機(jī)數(shù)2種方法,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-04-04對(duì)變量賦值的理解--Pyton中讓兩個(gè)值互換的實(shí)現(xiàn)方法
下面小編就為大家分享一篇Pyton中讓兩個(gè)值互換的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11PyTorch CUDA環(huán)境配置及安裝的步驟(圖文教程)
這篇文章主要介紹了PyTorch CUDA環(huán)境配置及安裝的步驟(圖文教程),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Python字符串格式化format()方法運(yùn)用實(shí)例
這篇文章主要給大家介紹了關(guān)于Python字符串格式化format()方法運(yùn)用實(shí)例的相關(guān)資料,字符串格式化是Python編程中十分常用的部分,它可以幫助我們將更具可讀性的數(shù)據(jù)輸出到控制臺(tái)或?qū)懭胛募?需要的朋友可以參考下2023-08-08Python 數(shù)據(jù)科學(xué) Matplotlib圖庫(kù)詳解
Matplotlib 是 Python 的二維繪圖庫(kù),用于生成符合出版質(zhì)量或跨平臺(tái)交互環(huán)境的各類圖形。今天通過(guò)本文給大家分享Python 數(shù)據(jù)科學(xué) Matplotlib的相關(guān)知識(shí),感興趣的朋友一起看看吧2021-07-07Python 實(shí)現(xiàn)使用dict 創(chuàng)建二維數(shù)據(jù)、DataFrame
下面小編就為大家分享一篇Python 實(shí)現(xiàn)使用dict 創(chuàng)建二維數(shù)據(jù)、DataFrame,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04