Selenium提供8種元素定位的方法
id,name,class name,link text,xpath,css selector,tag name ,partial link text
這八種用python語言表示為
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
這是百度首頁的輸入框的屬性
1、通過class、id、name定位元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com/")
# 通過class定位搜索框
a = browser.find_element_by_class_name("s_ipt")
# 通過id定位搜索框
b = browser.find_element_by_id("kw")
# 通過name定位搜索框
c = browser.find_element_by_name("wd")
print(a)
print(b)
print(c)
browser.close()
>>>
<selenium.webdriver.remote.webelement.WebElement (session="1720d5370aeb03aca930539033559b4c", element="0.4967300544744968-1")>
<selenium.webdriver.remote.webelement.WebElement (session="1720d5370aeb03aca930539033559b4c", element="0.4967300544744968-1")>
<selenium.webdriver.remote.webelement.WebElement (session="1720d5370aeb03aca930539033559b4c", element="0.4967300544744968-1")>
2、通過tag定位元素
HTML是通過 tag 來定位元素的功能的,比如 table是表格,a是超鏈接 等等,但是一個網(wǎng)頁中會有許多 tag,所以一般來說不會通過 tag 來定位元素
3、通過 link text、partial link text定位元素
通過腳本定位到 新聞 這個超鏈接,并點擊
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com/")
link = browser.find_element_by_link_text("新聞").click()
如果鏈接的字符串太長的話,全部輸入影響代碼美觀也容易出錯,這時就可以采用 partial link text,模糊匹配、截取字符串的一部分定位到元素 就可以了
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com/")
link = browser.find_element_by_partial_link_text("聞").click()
4、通過 Xpath 定位元素
XPath定位元素的方法有很多中,這里介紹一種最簡單粗暴的:
那就是利用瀏覽器調(diào)試功能,定位到元素所在的那一行右鍵-->Copy-->Copy XPath
當然這也是一個辦法,但是最好還是自己了解到到底應該怎么用Xpath定位到元素
4、通過 CSS selector 定位元素
與Xpath比較
- 優(yōu)點:更高效更準確更易編寫
- 缺點:根據(jù)頁面文字定位時,沒有Xpath直接
詳情請參考:http://www.w3school.com.cn/cssref/css_selectors.asp