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