Python2 Selenium元素定位的實(shí)現(xiàn)(8種)
當(dāng)我們想讓 Selenium 自動(dòng)地操作瀏覽器時(shí),就必須告訴 Selenium 如何去定位某個(gè)元素或一組元素,每個(gè)元素都有著不同的標(biāo)簽名和屬性值,Selenium 提供了以下8種定位元素的方式,每種方式對(duì)應(yīng)了2個(gè)方法:
find_element_by_( ),是用來(lái)定位單個(gè)元素的,find_elements_by_( ),是用來(lái)定位多個(gè)元素的。
- 通過(guò) id 定位
- 通過(guò) name 定位
- 通過(guò) class 定位
- 通過(guò) tag 定位
- 通過(guò) link 定位
- 通過(guò) partial link 定位
- 通過(guò) xpath 定位
- 通過(guò) css 選擇器定位
下面以百度首頁(yè)為例進(jìn)行舉例說(shuō)明:
1.通過(guò) id 定位
find_element_by_id(id)
find_elements_by_id(id)
# _*_ coding:utf-8 _*_ from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") # 定位id為“kw”的元素 input_text = driver.find_element_by_id("kw") input_text.send_keys("selenium") driver.quit()
2.通過(guò)通過(guò) name 定位
find_element_by_name(name)
find_elements_by_name(name)
# _*_ coding:utf-8 _*_ from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") # 定位name為“wd”的元素 input_text = driver.find_element_by_name("wd") input_text.send_keys("selenium") driver.quit()
3.通過(guò) class 定位
find_element_by_class_name(name)
find_elements_by_class_name(name)
# _*_ coding:utf-8 _*_ from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") # 定位class名稱為“s_ipt”的元素 input_text = driver.find_element_by_class_name("s_ipt") input_text.send_keys("selenium") driver.quit()
4.通過(guò) tag 定位
find_element_by_tag_name(name)
find_elements_by_tag_name(name)
# _*_ coding:utf-8 _*_ from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") # 定位標(biāo)簽為<input>的元素 input_text = driver.find_elements_by_tag_name("input") print(len(input_text)) driver.quit()
5.通過(guò) link 定位
find_element_by_link_text(link_text)
find_elements_by_link_text(link_text)
# _*_ coding:utf-8 _*_ from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") # 定位鏈接文本完全匹配“我新聞”的元素 news = driver.find_element_by_link_text("新聞") news.click() driver.quit()
6.通過(guò) partial link 定位
find_element_by_partial_link_text(link_text)
find_elements_by_partial_link_text(link_text)
# _*_ coding:utf-8 _*_ from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") # 定位鏈接文本部分匹配“新”的元素 news = driver.find_element_by_partial_link_text("新") news.click() driver.quit()
7.通過(guò) xpath 定位
find_element_by_xpath(xpath)
find_elements_by_xpath(xpath)
# _*_ coding:utf-8 _*_ from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") # xpath定位,相對(duì)路徑與屬性結(jié)合定位搜索框 news = driver.find_element_by_xpath("http://input[@id='kw']") news.click() driver.quit()
8.通過(guò) css 選擇器定位
find_element_by_css_selector(css_selector)
find_elements_by_css_selector(css_selector)
# _*_ coding:utf-8 _*_ from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com/") # css選擇器,id定位密碼輸入框 news = driver.find_element_by_css_selector('#kw') news.click() driver.quit()
通用的終極定位語(yǔ)法
上面的所有元素定位 find_element_by_xxx和find_elements_by_xxx調(diào)用的結(jié)果,實(shí)際上都是在調(diào)用以下兩種方法,我們也可以直接調(diào)用一下兩種方法即可。
find_element(self, by=By.ID, value=None):
find_elements(self, by=By.ID, value=None):
class By(object): """ Set of supported locator strategies. """ ID = "id" XPATH = "xpath" LINK_TEXT = "link text" PARTIAL_LINK_TEXT = "partial link text" NAME = "name" TAG_NAME = "tag name" CLASS_NAME = "class name" CSS_SELECTOR = "css selector"
例如:
from selenium.webdriver.common.by import By # 根據(jù)id,定位id為“world”的元素 world = driver.find_element(By.ID,"world") print(world.text) # xpath定位,相對(duì)路徑與屬性結(jié)合 定位密碼輸入框 password = driver.find_element(By.XPATH,"http://input[@name='password']") print(password.get_attribute("value")) # css選擇器,標(biāo)簽+屬性 定位用戶名輸入框 username = driver.find_element(By.CSS_SELECTOR,"input[name='username']") print(username.get_attribute("value"))
這里只是簡(jiǎn)單介紹了8種元素定位方式的使用,比較簡(jiǎn)單易用的是通過(guò)id、name、class定位,我個(gè)人比較喜歡的是用xpath定位,當(dāng)然,最靈活也是最強(qiáng)大的定位方式就是css,它也是比較難掌握的一種方式。關(guān)于xpath和css定位方式的詳細(xì)介紹,可以
參考
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python腳本Selenium及頁(yè)面Web元素定位詳解
- Python+Selenium定位不到元素常見(jiàn)原因及解決辦法(報(bào):NoSuchElementException)
- python中通過(guò)selenium簡(jiǎn)單操作及元素定位知識(shí)點(diǎn)總結(jié)
- 處理Selenium3+python3定位鼠標(biāo)懸停才顯示的元素
- Python selenium根據(jù)class定位頁(yè)面元素的方法
- python+selenium 定位到元素,無(wú)法點(diǎn)擊的解決方法
- selenium+python自動(dòng)化測(cè)試之頁(yè)面元素定位
- Python?selenium?八種定位元素的方式
相關(guān)文章
python模塊和包的應(yīng)用BASE_PATH使用解析
這篇文章主要介紹了python模塊和包的應(yīng)用BASE_PATH使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12基于TensorFlow的CNN實(shí)現(xiàn)Mnist手寫(xiě)數(shù)字識(shí)別
這篇文章主要為大家詳細(xì)介紹了基于TensorFlow的CNN實(shí)現(xiàn)Mnist手寫(xiě)數(shù)字識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06機(jī)器學(xué)習(xí)、深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)之間的區(qū)別和聯(lián)系
機(jī)器學(xué)習(xí)>神經(jīng)網(wǎng)絡(luò)>深度學(xué)習(xí)≈深度神經(jīng)網(wǎng)絡(luò),機(jī)器學(xué)習(xí)包括了神經(jīng)網(wǎng)絡(luò)在內(nèi)的許多算法,而神經(jīng)網(wǎng)絡(luò)又可以分為淺度神經(jīng)網(wǎng)絡(luò)和深度神經(jīng)網(wǎng)絡(luò),深度學(xué)習(xí)是使用了深度神經(jīng)網(wǎng)絡(luò)的技術(shù),雖然機(jī)器學(xué)習(xí)、深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)是不同的,但在構(gòu)建復(fù)雜系統(tǒng)時(shí),許多相關(guān)概念是混合在一起的2024-02-02django-celery-beat搭建定時(shí)任務(wù)的實(shí)現(xiàn)
本文主要介紹了django-celery-beat搭建定時(shí)任務(wù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03解決python爬蟲(chóng)中有中文的url問(wèn)題
今天小編就為大家分享一篇解決python爬蟲(chóng)中有中文的url問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05只用20行Python代碼實(shí)現(xiàn)屏幕錄制功能
python小哥哥發(fā)現(xiàn)女朋友最近總是很忙的樣子,晚上匆匆忙忙道過(guò)晚安就不說(shuō)話了.可是,QQ頭像卻會(huì)偶爾亮起來(lái).小哥哥非常擔(dān)心,是不是賬號(hào)被盜了呢然后,就想幫女朋友排查一下所以就用python寫(xiě)了一個(gè)錄制腳本,悄悄裝在女友電腦上,需要的朋友可以參考下2021-06-06Python中Array特性與應(yīng)用實(shí)例深入探究
這篇文章主要為大家介紹了Python中Array特性與應(yīng)用實(shí)例深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Python單鏈表簡(jiǎn)單實(shí)現(xiàn)代碼
這篇文章主要介紹了Python單鏈表簡(jiǎn)單實(shí)現(xiàn)代碼,結(jié)合實(shí)例形式分析了Python單鏈表的具體定義與功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-04-04