這篇文章主要介紹了Python2 Selenium元素定位的實現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
當我們想讓 Selenium 自動地操作瀏覽器時,就必須告訴 Selenium 如何去定位某個元素或一組元素,每個元素都有着不同的標籤名和屬性值,Selenium 提供了以下8種定位元素的方式,每種方式對應了2個方法:
find_element_by_( ),是用來定位單個元素的,find_elements_by_( ),是用來定位多個元素的。
- 通過 id 定位
- 通過 name 定位
- 通過 class 定位
- 通過 tag 定位
- 通過 link 定位
- 通過 partial link 定位
- 通過 xpath 定位
- 通過 css 選擇器定位
下面以百度首頁爲例進行舉例說明:
1.通過 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.通過通過 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.通過 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.通過 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/") # 定位標籤爲<input>的元素 input_text = driver.find_elements_by_tag_name("input") print(len(input_text)) driver.quit()
5.通過 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.通過 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.通過 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定位,相對路徑與屬性結合定位搜索框 news = driver.find_element_by_xpath("//input[@id='kw']") news.click() driver.quit()
8.通過 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()
通用的終極定位語法
上面的所有元素定位 find_element_by_xxx和find_elements_by_xxx調用的結果,實際上都是在調用以下兩種方法,我們也可以直接調用一下兩種方法即可。
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 # 根據id,定位id爲“world”的元素 world = driver.find_element(By.ID,"world") print(world.text) # xpath定位,相對路徑與屬性結合 定位密碼輸入框 password = driver.find_element(By.XPATH,"//input[@name='password']") print(password.get_attribute("value")) # css選擇器,標籤+屬性 定位用戶名輸入框 username = driver.find_element(By.CSS_SELECTOR,"input[name='username']") print(username.get_attribute("value"))
這裏只是簡單介紹了8種元素定位方式的使用,比較簡單易用的是通過id、name、class定位,我個人比較喜歡的是用xpath定位,當然,最靈活也是最強大的定位方式就是css,它也是比較難掌握的一種方式。關於xpath和css定位方式的詳細介紹,可以
參考
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。