《Python+selenium》自動化八大元素定位方法
注:尋找元素必須找到這個元素的唯一定位,否則達不到預期效果,一般來說最有效的為xpath、css定位,ID屬性有時候會出現動態ID不好定位,class、name元素屬性會出現多個相同的值定位不準確
素材地址百度網站:www.baidu.com
本文使用到的方法:
send_keys(value):輸入方法,將value代替為你想輸入的值
click():點選方法,可對定位到的元素進行點選事件
定位之前程式碼:
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get(‘www.baidu.com’)
No.1:元素ID定位
函式:find_element_by_id(self,value)
示例:定位百度的輸入框,方法:滑鼠懸浮在輸入框上,右擊點選檢查
定位到該元素並輸入文字:driver.find_element_by_id(‘kw’).sned_keys(‘python自動化’)
No.2:元素name定位
還是百度的輸入框:
driver.find_element_by_name(‘wd’).send_keys(‘python自動化’)
No.3:元素class定位:
依然為百度輸入框:
driver.find_element_by_class_name(‘s_ipt’).send_keys(‘python自動化’)
No.4:元素Tag定位:
百度輸入框為input標籤,所以寫法為:
driver.find_element_by_tag_name(‘input’).sned_keys(‘python自動化’)
No.5:元素link_text定位:
定位並點選新聞:
driver.find_element_by_link_text(‘新聞’).click()
No.6:元素Partial Link定位:
link_text與partial_link_text定位的區別:
link_text:需要輸入全部的文字連結內容,“新聞”
partial_link_text:只需要輸入部分文字連結內容,“新”
driver.find_element_by_partial_link_text(‘新’).click()
No.7:元素xpath定位:
xpath是一種通過路徑定位的語言,路徑分為絕對路徑和相對路徑
絕對路徑:國家/城市/區/街道/小區/門牌號
相對路徑:A相對B的位置,以B為起點來找A
還是以百度輸入框為例:
a、絕對路徑獲取元素
driver.find_element_by_xpath(’/html/body/div/div/div[5]/div/div/form/span/input’)
b、通過索引來獲取元素,匹配span標籤下的input標籤
driver.find_element_by_xpath(’//span/input’)
c、獲取百度文字連結中更多按鈕
注:last()函式獲取都是指定元素最後的索引號
last()-1:表示倒數第二個元素
driver.find_element_by_xpath(’//div[last()]/a’)
d、通過元素屬性值進行定位新聞
driver.find_element_by_xpath(’//a[@href=‘http://news.baidu.com’]’)
driver.find_element_by_xpath(’//div[@id=‘s-top-left’]/a[@href=‘http://news.baidu.com’]’)
e:模糊匹配(在測試中經常會碰見一些元素屬性是動態生成的,每次訪問的屬性值都會不一樣,這類元素定位難度極大,假如該類元素中有一部分元素內容保持不變則可以使用模糊匹配)
starts-with(str1,str2):查詢屬性str1的屬性值為str2關鍵字開始的頁面元素
driver.find_element_find_by_xpath(’//a[starts-with(@href,‘http://news’)]’)
含即可無需考慮位置
driver.find_element_by_xpath(’//a[contains(@href,‘http://news’)]’)
f:通過text()函式獲取元素文字並定位元素
driver.find_element_by_xpath(’//a[contains(text(),‘新聞’)]’)
driver.find_element_by_xpath(’//a[contains(.,‘新聞’)]’)
定位新聞的上一級
driver.find_element_by_xpath(’//a[contains(.,‘地圖’)]/…’)
谷歌便捷獲取xpath
將滑鼠放在元素屬性上,然後移動到copy,再點選copy xpath即可獲取谷歌提供的xpath定位,當谷歌提供的定位在程式碼實際執行中不準確時,需要自己手動編寫xpath定位
No.8:元素CSS定位:
定位百度一下按鈕:
driver.find_element_by_css_selector(’#su’)
css定位可以在元素上右擊,然後copy–>copy selector
By方法定位:
Find_element(By.ID,“value”)
Find_element(By.NAME,“value”)
Find_element(By.CLASS_NAME,“value”)
Find_element(By.TAG_NAME,“value”)
Find_element(By.LINK_TEXT,“link text”)
Find_element(By.PARTIAL_LINK_TEXT,“partial link text”)
Find_element(By.XPATH,“xpath”)
Find_element(By.CSS_SELECTOR,“selector”)
掃描二維碼
獲取更多精彩