selenium 元素查找與屬性


 

1.首先你要安裝selenium庫啦

pip install selenium

2.selenium查找元素就八種方法

from selenium import webdriver

driver=webdriver.Chrome()

#說明find_elements_by 多了一個s,返回的就是一個列表形式

1) driver.find_element_by_id()     

#傳入元素標簽對里面的id數據    driver.find_element_by_id("kw")   

2) driver.find_element_by_name()   

#傳入元素標簽對里面的name數據    driver.find_element_by_name("wd")   

3)driver.find_element_by_class_name()    

#傳入元素標簽對里面class的名稱    driver.find_element_by_class_name("s_ipt")  

 

 

4) driver.find_elements_by_link_text()   

#傳入元素標簽對a里面的文本數據    driver.find_elements_by_link_text("hao123")   

5) driver.find_element_by_partial_link_text()     

#傳入元素標簽對a里面的部分文本數據    driver.find_element_by_partial_link_text("hao")   

6) driver.find_element_by_tag_name() 

#傳入元素標簽對的標簽名    driver.find_element_by_tag_name("a")   

 

 

7) driver.find_element_by_xpath()    #格式://+標簽名+[@屬性(例如,id,name,class)="屬性對應的值"]

一.以普通元素定位

driver.find_element_by_xpath(‘//a[@name="tj_trnews"]’)    #定位新聞

二.以text()進行元素定位

driver.find_element_by_xpath(‘//a[text()="新聞"]’)       #定位新聞      //為固定格式,a為標簽名,text()取標簽對中間的文本

三.以contains()進行元素定位

driver.find_element_by_xpath(‘//a[contains(text(),"hao")]’)  #定位hao123  //為固定格式,a為標簽名,text()取標簽對中間的文本,contains為匹配部分數據

四.以or ,and 輔助定位,有時候一個屬性定位不了,那么可以用or,and輔助一起定位    #格式:     //+標簽名+[@屬性(例如,id,name,class)="屬性對應的值" and或or @屬性(例如,id,name,class)="屬性對應的值"]

driver.find_element_by_xpath('//a[@name="tj_briicon" and @class="bri"]')    #定位更多產品

五.軸定位,parent(父親),ancestor(祖先,包括父親),perceding-sibling(當前元素節點標簽之前的所有兄弟結點),following-sibling(當前元素節點標簽之后的所有兄弟結點)    #格式://+標簽名+[@屬性(例如,id,name,class)="屬性對應的值"]+/+軸定位+::+標簽名

1)定位父親

driver.find_element_by_xpath('//a[@name="tj_briicon"]/parent::div[@id="u1"]')    #定位更多產品的父親那么就是u1

2)定位祖先

driver.find_element_by_xpath('//a[@name="tj_briicon"]/ancestor::div')    #定位更多產品的祖先有4個,包括父親

3)perceding-sibling(當前元素節點標簽之前的所有兄弟結點)

driver.find_element_by_xpath(‘//a[@name="tj_briicon"]/preceding-sibling::a[@name="tj_settingicon"]’)    #定位更多產品前面的兄弟節點設置,如果不寫[@name="tj_settingicon"],那么會出現8個兄弟節點

4)following-sibling(當前元素節點標簽之后的所有兄弟結點)

driver.find_element_by_xpath('//a[@name="tj_trnews"]/following-sibling::a[@name="tj_trhao123"]')    #定位新聞后面的兄弟節點hao123,如果不寫[@name="tj_trhao123"],那么會出現8個兄弟節點

8) driver.find_element_by_css_selector() 

一.以ID進行元素定位

#號表示通過id屬性來定位元素

driver.find_element_by_css_selector("#kw")

二.以class屬性定位元素

.號表示通過class屬性來定位元素

driver.find_element_by_css_selector(".s_ipt")

三.以元素屬性定位元素(常用)

driver.find_element_by_css_selector(‘[name=“wd”]‘)

driver.find_element_by_css_selector(‘[maxlength=“100”]‘)

~號表示匹配部分屬性值

屬性值包含s_btn:適用於由空格分隔的屬性值。

driver.find_element_by_css_selector(‘[class~="s_btn”]‘)

四.以父子定位元素

查找有父級元素的標簽名為span,它的所有標簽名叫input的子元素

driver.find_element_by_css_selector("span>input") 

五.以組合定位元素

標簽名#id屬性值:指的是該input標簽下id屬性為kw的元素

driver.find_element_by_css_selector("input#kw")

標簽名.class屬性值:指的是該input標簽下class屬性為s_ipt的元素

driver.find_element_by_css_selector("input.s_ipt")

標簽名[屬性=’屬性值‘]:指的是該input標簽下name屬性為wd的元素

driver.find_element_by_css_selector(‘input[name=“wd”]‘)

父級元素標簽名>標簽名.class屬性值:指的是span下的input標簽下class屬性為s_ipt的元素

find_element_by_css_selector("span>input.s_ipt")

多個屬性組合定位元素(常用)

指的是input標簽下id屬性為kw且name屬性為wd的元素

driver.find_element_by_css_selector(‘input.s_ipt[name=“wd”]‘)

指的是input標簽下name屬性為wd且maxlength為100的元素

driver.find_element_by_css_selector(‘input[name=“wd“][maxlength=“100“]‘)

3.查找元素返回WebElement對象背后的屬性(以id為例子)

 

 1)返回元素屬性值

1 ele=driver.find_element_by_id("kw").get_attribute("class")
2 print(ele)
結果:s_ipt

2)返回元素屬性值,但是該方法只能獲取元素中id或name的屬性值,其他的都不能獲取

 1 ele=driver.find_element_by_id("kw").get_property("id")
 2 print(ele)
 3 ele1=driver.find_element_by_class_name("s_ipt").get_property("id")
 4 print(ele1)
 5 ele2=driver.find_element_by_id("kw").get_property("name")
 6 print(ele2)
 7 ele3=driver.find_element_by_class_name("s_ipt").get_property("name")
 8 print(ele3)
 9 ele4=driver.find_element_by_class_name("s_ipt").get_property("class")  #這種是不行的返回None
10 print(ele4)
結果:

kw
kw
wd
wd
None

property是DOM中的屬性,是JavaScript里的對象;attribute是HTML標簽上的特性,它的值只能夠是字符串;

3)返回內部存儲id,這個屬性用於判斷兩個webelements是否引用同個元素

1 ele=driver.find_element_by_id("kw").id
2 print(ele)
3 ele1=driver.find_element_by_name("wd").id
4 print(ele1)
結果:因為都是引用同一個標簽對里面的數據所以id肯定一樣

0.822772467010251-1
0.822772467010251-14)

4)返回標簽對的名稱

1 ele=driver.find_element_by_id("kw").tag_name
2 print(ele)
結果:input

5)判斷元素是否可見(返回bool值)
1 ele=driver.find_element_by_id("kw").is_displayed()
2 print(ele)
結果:True

 

 6)判斷元素是否被選中(一般用於單選框或者復選框)

 1 from  selenium import webdriver
 2 from selenium.webdriver.common.action_chains import ActionChains
 3 driver=webdriver.Chrome()
 4 driver.get("http://www.baidu.com")
 5 ele=driver.find_element_by_xpath('//a[@name="tj_login"]/following-sibling::a[text()="設置"]')
 6 ActionChains(driver).move_to_element(ele).perform()
 7 driver.find_element_by_class_name("setpref").click()
 8 time.sleep(3)
 9 a=driver.find_element_by_id("sh_2").is_selected()  
10 print(a)
11 driver.quit()
結果:True

7)判斷元素是否存在HTML上(is_displayed()本身這個函數用於判斷某個元素是否存在頁面上(這里的存在不是肉眼看到的存在,而是html代碼的存在,很少用到)

1 from selenium import webdriver
2 driver=webdriver.Chrome()
3 driver.get("http://www.baidu.com")
4 a=driver.find_element_by_id('su').is_displayed()
5 print(a)
6 driver.quit()
結果:True

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM