前言
selenium元素定位分爲兩大模塊,單數定位和複數定位。單數定位定位到的是某個具體的元素,複數定位定位到的是具有相同屬性的一組元素。這裏講解下python中selenium庫的元素定位方法。
前提-打開瀏覽器開發者模式
定位元素前需先打開瀏覽器開發者模式,查看頁面源碼
例:chrome瀏覽器
windows:快捷鍵F12
Mac ios :快捷鍵option+command+i
單數定位
單數定位,即定位單個元素。selenium單數定位方法有八種,如下:
1,根據元素id、class、name屬性定位
1 driver.find_element_by_id("J_searchbg") #根據id定位上圖搜索框-推薦詞
2 driver.find_element_by_class_name("search_bg") #根據class定位上圖搜索框-推薦詞
3 driver.find_element_by_name("name屬性值") #根據元素name屬性定位
2,定位文本超鏈接
文本超鏈接定位分爲兩種:精確匹配和模糊匹配
精確匹配:匹配相同目標文本的超鏈接
driver.find_element_by_link_text("我的訂單") #定位文本爲"我的訂單"的文本超鏈接
模糊匹配:匹配包含目標文本的超鏈接
driver.find_element_by_partial_link_text("訂單") #定位文本包含"訂單"的文本超鏈接
3,根據元素標籤定位
HTML源碼中有多個<div>、<a>、<input>。。。等標籤,可根據標籤來定位元素,但是同一個頁面有很多相同標籤導致無法確定元素唯一性,很難確定到具體的元素,該方法使用較少。
driver.find_element_by_tag_name("input") #定位input標籤
4,根據xpath路徑定位
XPath 即爲 XML 路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言。
基本語法
詳細語法可參考:https://www.w3school.com.cn/xpath/xpath_syntax.asp
備註:層級之間"/"隔開
實例一
1 search_xpath = '//div[@id="J_searchbg"]'
2
3 driver.find_element_by_xpath(search_xpath) # 使用xpath定位,上圖搜索-推薦詞
備註:字符串引號需單雙結合,單引號中嵌套雙引號,或者雙引號中嵌套單引號。
實例二:定位屬性不唯一的元素
某元素屬性頁面存在多個時,可根據屬性索引查找元素
driver.find_element_by_xpath('//*[@id="navitems-group1"]/li[1]/a[1]') # 查找秒殺菜單
注意:xpath索引下角標從1開始
實例三:層級定位
兄弟關係定位
從上圖中可見,搜索推薦詞和搜索btn在同一個class="form"的div下,故搜索btn爲搜索推薦詞的兄弟元素,定位如下
driver.find_element_by_xpath('//div[@id="J_searchbg"]/../button') #定義搜索推薦詞的兄弟元素搜索按鈕
爺孫關係定位
driver.find_element_by_xpath('//*[@class="fr"]//a[@class="link-login"]') #定義class="fr"的<div>元素的孫子元素<a>(class="link-login")
實例四:文本定位
1 #精確匹配
2 driver.find_element_by_xpath('//*[text()="我的訂單"]') # 定位text="我的訂單"的所有元素
3
4 #模糊匹配
5 driver.find_element_by_xpath('//*[contains(text(),"訂單")]') # 定位text包含"訂單"的所有元素
5,根據css查找元素定位
css selector即css選擇器,可以選擇HTML或者XML中的元素
基本語法
備註:層級之間使用">"隔開
詳細語法可參考:https://www.w3school.com.cn/cssref/css_selectors.ASP
實例一
driver.find_elements_by_css_selector("#J_searchbg") # 使用css selector定位,上圖搜索-推薦詞
實例二:定位屬性不唯一的元素
driver.find_elements_by_css_selector('#div[id="navitems-group1"]>li[1]>a[1]') # 使用css selector定位,上圖-秒殺菜單
注意:css selector索引下角標從1開始
複數定位
複數定位,是指定位具有相同屬性的一組元素。selenium複數定位,也是八種定位方法,和單數定位一樣只是element是複數形式elements,如下:
上圖中複數八種定位方法的使用和單數定位是一樣的,這裏不展示詳細說明,具體使用參考可單數定位。
當頁面有多個相同屬性的元素時,可使用複數定位,例:
1 jingdong_menu = driver.find_elements_by_class_name("navitems-lk") #京東-菜單欄,所有菜單具有相同屬性,故可使用複數定位所有菜單
2
3 jingdong_menu[0].click() #點擊第一個菜單-秒殺,根據索引值獲取對應元素
元素常用操作
點擊元素:click()
輸入文本:send_keys("文本")
清空:clear()
例:
1 driver.find_element_by_id("J_searchbg").click() # 點擊京東-搜索框
2 driver.find_element_by_id("J_searchbg").send_keys("洗衣機") # 京東-搜索框,輸入“洗衣機”
3 driver.find_element_by_id("J_searchbg").clear() # 京東-搜索框,清空內容