Selenium定位元素的方法小結(jié)及語(yǔ)法詳解
以下是以百度網(wǎng)站為例,詳細(xì)介紹 Selenium 中各種定位元素方法的語(yǔ)法及使用場(chǎng)景:
1. 通過(guò) ID 定位
- 語(yǔ)法:使用
By.ID
定位策略,在 Python 代碼里通過(guò)find_element(By.ID, 'element_id')
來(lái)定位元素,其中element_id
是網(wǎng)頁(yè)元素的id
屬性值。 - 使用場(chǎng)景:適用于元素具有唯一
id
屬性的情況,定位準(zhǔn)確且速度快。在百度搜索頁(yè)面,搜索框的id
通常是kw
,可以使用該方法定位搜索框。
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('https://www.baidu.com') search_box = driver.find_element(By.ID, 'kw')
2. 通過(guò) Name 定位
- 語(yǔ)法:運(yùn)用
By.NAME
定位策略,代碼為find_element(By.NAME, 'element_name')
,element_name
是元素的name
屬性值。 - 使用場(chǎng)景:常用于表單元素,在百度搜索場(chǎng)景中,如果搜索框有
name
屬性,就可以用這種方式定位。不過(guò)百度搜索框name
也是wd
,與功能相關(guān),方便表單提交數(shù)據(jù)。
driver.get('https://www.baidu.com') search_box = driver.find_element(By.NAME, 'wd')
3. 通過(guò) Class Name 定位
- 語(yǔ)法:采用
By.CLASS_NAME
定位策略,代碼是find_element(By.CLASS_NAME, 'element_class')
,element_class
是元素的class
屬性值。 - 使用場(chǎng)景:當(dāng)需要定位一組具有相同樣式或功能的元素時(shí)使用。在百度搜索結(jié)果頁(yè)面,每個(gè)搜索結(jié)果的標(biāo)題可能有相同的
class
名,可借此定位所有標(biāo)題元素。
driver.get('https://www.baidu.com/s?wd=python') result_titles = driver.find_elements(By.CLASS_NAME, 'cosc-title-slot') # 這里'cosc-title-slot' 需要替換為實(shí)際的 class 名
4. 通過(guò) Tag Name 定位
- 語(yǔ)法:使用
By.TAG_NAME
定位策略,代碼為find_element(By.TAG_NAME, 'tag_name')
,tag_name
是 HTML 標(biāo)簽名,像div
、input
、a
等。 - 使用場(chǎng)景:可快速定位某一類標(biāo)簽元素,但通常會(huì)結(jié)合其他定位方法。例如在百度頁(yè)面獲取所有的鏈接元素(
<a>
標(biāo)簽)。
driver.get('https://www.baidu.com') links = driver.find_elements(By.TAG_NAME, 'a')
5. 通過(guò) Link Text 定位
- 語(yǔ)法:使用
By.LINK_TEXT
定位策略,代碼是find_element(By.LINK_TEXT, 'link_text')
,link_text
是<a>
標(biāo)簽的完整文本內(nèi)容。 - 使用場(chǎng)景:專門用于定位鏈接元素,當(dāng)知道鏈接的完整文本內(nèi)容時(shí)使用。比如百度頁(yè)面上可能有“新聞”鏈接。
driver.get('https://www.baidu.com') news_link = driver.find_element(By.LINK_TEXT, '新聞')
6. 通過(guò) Partial Link Text 定位
- 語(yǔ)法:使用
By.PARTIAL_LINK_TEXT
定位策略,代碼為find_element(By.PARTIAL_LINK_TEXT, 'partial_link_text')
,partial_link_text
是<a>
標(biāo)簽文本內(nèi)容的一部分。 - 使用場(chǎng)景:當(dāng)鏈接文本較長(zhǎng),只記得部分內(nèi)容時(shí)適用。假設(shè)百度頁(yè)面有個(gè)鏈接文本是“百度學(xué)術(shù) - 權(quán)威學(xué)術(shù)資源平臺(tái)”,只記得“百度學(xué)術(shù)”。
driver.get('https://www.baidu.com') academic_link = driver.find_element(By.PARTIAL_LINK_TEXT, '百度學(xué)術(shù)')
7. 通過(guò) CSS Selector 定位
- 語(yǔ)法:使用
By.CSS_SELECTOR
定位策略,代碼是find_element(By.CSS_SELECTOR, 'css_selector')
,css_selector
是符合 CSS 選擇器語(yǔ)法的表達(dá)式。 - 使用場(chǎng)景:CSS 選擇器很靈活,可結(jié)合元素的標(biāo)簽名、類名、
id
、屬性等進(jìn)行定位。比如定位百度搜索按鈕,它可能有特定的class
和type
屬性。
driver.get('https://www.baidu.com') search_button = driver.find_element(By.CSS_SELECTOR, 'input.some-class[type="submit"]') # 這里'some-class' 需要替換為實(shí)際的 class 名
8. 通過(guò) XPath 定位
- 語(yǔ)法:使用
By.XPATH
定位策略,代碼為find_element(By.XPATH, 'xpath_expression')
,xpath_expression
是符合 XPath 語(yǔ)法的表達(dá)式。 - 使用場(chǎng)景:XPath 是最強(qiáng)大的定位方式,能根據(jù)元素的屬性、層級(jí)關(guān)系、文本內(nèi)容等進(jìn)行定位,適用于復(fù)雜的定位需求。例如定位百度搜索結(jié)果中第一個(gè)標(biāo)題元素。
driver.get('https://www.baidu.com/s?wd=python') first_result_title = driver.find_element(By.XPATH, '//*[@id="1"]/div/div[1]/div[1]/h3/a[1]/em') # 這里的 XPath 要根據(jù)實(shí)際頁(yè)面結(jié)構(gòu)調(diào)整
在實(shí)際操作中,要根據(jù)百度頁(yè)面元素的特點(diǎn)和定位的準(zhǔn)確性、便捷性來(lái)選擇合適的定位方法。百度頁(yè)面結(jié)構(gòu)可能會(huì)更新,實(shí)際定位時(shí)要以最新頁(yè)面為準(zhǔn)。
以上就是Selenium定位元素的方法小結(jié)及語(yǔ)法詳解的詳細(xì)內(nèi)容,更多關(guān)于Selenium定位元素的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
window7下的python2.7版本和python3.5版本的opencv-python安裝過(guò)程
這篇文章主要介紹了window7下的python2.7版本和python3.5版本的opencv-python安裝過(guò)程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10Django中URL的參數(shù)傳遞的實(shí)現(xiàn)
這篇文章主要介紹了Django中URL的參數(shù)傳遞的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08python3.x實(shí)現(xiàn)發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了python3.x實(shí)現(xiàn)發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05快速一鍵生成Python爬蟲(chóng)請(qǐng)求頭
這篇文章主要介紹了如何快速一鍵生成Python爬蟲(chóng)請(qǐng)求頭,幫助大家更好的理解和學(xué)習(xí)使用python爬蟲(chóng),感興趣的朋友可以了解下2021-03-03Python運(yùn)行出現(xiàn)DeprecationWarning的問(wèn)題及解決
這篇文章主要介紹了Python運(yùn)行出現(xiàn)DeprecationWarning的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07numpy數(shù)據(jù)類型dtype轉(zhuǎn)換實(shí)現(xiàn)
這篇文章主要介紹了numpy數(shù)據(jù)類型dtype轉(zhuǎn)換實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04對(duì)Matlab中共軛、轉(zhuǎn)置和共軛裝置的區(qū)別說(shuō)明
這篇文章主要介紹了對(duì)Matlab中共軛、轉(zhuǎn)置和共軛裝置的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05在SAE上部署Python的Django框架的一些問(wèn)題匯總
這篇文章主要介紹了在SAE上部署Python的Django框架的一些問(wèn)題匯總,SAE是新浪的一個(gè)在線APP部署平臺(tái),并且對(duì)Python應(yīng)用提供相關(guān)支持,需要的朋友可以參考下2015-05-05