目錄
一、selenium模塊中的find_element_by_id方法無法使用
二、Python+selenium自動化八大元素定位方法
使用場景:
1、通過id屬性定位:driver.find_element(By.ID,"value")
2、通過name屬性定位:driver.find_element(By.NAME,"value")
3、通過class屬性定位:driver.find_element(By.CLASS_NAME,"value")
4、通過tag_name屬性定位:driver.find_element(By.TAG_NAME,"input")
5、通過link_text屬性定位:driver.find_element(By.LINK_TEXT,"value")
6、通過partial_link屬性定位:driver.find_element(By.PARTIAL_LINK_TEXT,"value")
7、通過xpath屬性定位:find_element_by_xpath()
8、通過css屬性定位:find_element_by_css_selector("css")
補充操作
三、實例
一、selenium模塊中的find_element_by_id方法無法使用
之前學(xué)習(xí)的時候都是白嫖B站大學(xué)的視頻,現(xiàn)在規(guī)范了之后導(dǎo)致之前學(xué)習(xí)的方法會報錯。
例如:selenium模塊中的find_element_by_id方法無法使用,會報錯:
AttributeError: 'WebDriver' object has no attribute 'find_element_by_id'
改用driver.find_element(By.ID,"value"),并導(dǎo)入from selenium.webdriver.common.by import By就可以了。
其他元素定位方法同理修改下即可。
二、Python+selenium自動化八大元素定位方法
使用場景:
①優(yōu)先用id、name(保證唯一性)
②是否是超鏈接,是超鏈接用link_text、partial_link_text,否則用css_selector、xpath
③class_name、tag_name很少用,因為這倆個難以保證被定為元素或?qū)傩缘奈ㄒ恍?/p>
1、通過id屬性定位:driver.find_element(By.ID,"value")
driver.find_element(By.ID,"stu_username_hide").send_keys("1234567879")
driver.find_element(By.ID,"stu_password_hide").send_keys("123456")
2、通過name屬性定位:driver.find_element(By.NAME,"value")
driver.find_element(By.NAME,"username").send_keys("1234567879")
driver.find_element(By.NAME,"password").send_keys("123456")
3、通過class屬性定位:driver.find_element(By.CLASS_NAME,"value")
driver.find_element(By.CLASS_NAME,"Validform_error")
4、通過tag_name屬性定位:driver.find_element(By.TAG_NAME,"input")
driver.find_element(By.TAG_NAME,"input")
5、通過link_text屬性定位:driver.find_element(By.LINK_TEXT,"value")
driver.find_element(By.LINK_TEXT,"登錄")//點擊登錄
6、通過partial_link屬性定位:driver.find_element(By.PARTIAL_LINK_TEXT,"value")
driver.find_element(By.PARTIAL_LINK_TEXT,"登")//模糊匹配帶“登”字的鏈接
7、通過xpath屬性定位:find_element_by_xpath()
driver.find_element(By.XPATH,'/html/body/div/p[1]')//根據(jù)元素的路徑查找
(1)絕對路徑:從最外層元素到指定元素之間所有經(jīng)過元素層級路徑,以/開頭,從源頭標(biāo)簽開始從上到下查找所需元素
例如:/html/body/div/p[1]
(2)相對路徑:從第一個符合條件元素開始(一般配合屬性來區(qū)分),以//開頭,后邊必須跟標(biāo)簽名稱或*(*表示所有標(biāo)簽)
幾個例子:
①相對路徑+索引定位
//標(biāo)簽名/標(biāo)簽名[有同名標(biāo)簽時,所需標(biāo)簽的序號]/標(biāo)簽名
例://form/span[1]/input
②相對路徑+屬性定位
搜索標(biāo)簽名下屬性為屬性名1='屬性值1'的標(biāo)簽://標(biāo)簽名[@屬性名1='屬性值1']
例://input[@autocomplete='off']
③相對路徑+通配符定位
搜索整個網(wǎng)頁找到標(biāo)簽里有屬性名1='屬性值1'的標(biāo)簽://標(biāo)簽名*[@屬性名1='屬性值1']
例://input[@autocomplete='off']
搜索整個網(wǎng)頁找到標(biāo)簽里有屬性值為'屬性值1'的標(biāo)簽://標(biāo)簽名*[@*='屬性值1']
例://input[@*='off']
④相對路徑+部分屬性值定位
搜素屬性值以x開頭的標(biāo)簽://*[starts-with(@屬性名,'x')]
例://*[starts-with(@autocomplete,'of')]
搜素屬性值以x結(jié)尾的標(biāo)簽://*[substring(@屬性名.a,'x')]
例://*[substring(@autocomplete,'ff')]
搜素屬性值包含x的標(biāo)簽://*[contains(@屬性名,'x')]
例://*[contains(@autocomplete,'ff')]
⑤相對路徑+文本定位
//標(biāo)簽名[text()='x')]? ? ? ? ? 或? ? ? ?//*[text()="xxx"]
例://span[text()='按圖片搜索')]
8、通過css屬性定位:find_element_by_css_selector("css")
driver.find_element(By.CSS_SELECTOR, '#id')//根據(jù)id查找
提示:在selenium中極力推薦css定位,因為它比XPath定位速度要快;css選擇器語法非常強大。
(1)id選擇器
使用#號表示id屬性,如:driver.find_element(By.CSS_SELECTOR, '#user')
(2)class選擇器
使用.表示class屬性,如:driver.find_element(By.CSS_SELECTOR, '.tel')
(3)通過標(biāo)簽名定位
格式:element,如:driver.find_element(By.CSS_SELECTOR, 'input')
(4)通過屬性或部分屬性定位
格式:[”attribute=value”]
以字符^指明從字符串的開始匹配,以字符以字符*指明在需要進行模糊查詢,以字符$指明在字符串的結(jié)尾匹配。
舉例說明:
driver.find_element(By.CSS_SELECTOR,"[autocomplete='off']")//查找屬性autocomplete='off'的元素
driver.find_element(By.CSS_SELECTOR,"[autocomplete='off'][name='user']")//查找屬性autocomplete='off'且name='user'的元素
//通過部分屬性值定位
driver.find_elemen(By.CSS_SELECTOR,"[autocomplete^='o']")//查找autocomplete屬性值從o開始的元素
driver.find_elemen(By.CSS_SELECTOR,"[autocomplete*='f']")//查找autocomplete屬性值含有f的元素
driver.find_elemen(By.CSS_SELECTOR,"[autocomplete$='f']")//查找autocomplete屬性值以f結(jié)尾的元素
(5)層級選擇器
根據(jù)元素的父子關(guān)系來選擇,層級定位一般很難唯一定位到元素,所以一般情況下層級跟id/class/屬性或者部分屬性值一起組合定位。
格式:element>element,> 可以用空格代替
舉例說明:
driver.find_element(By.CSS_SELECTOR,"form>span>input")
driver.find_element(By.CSS_SELECTOR,"form span input")
driver.find_element(By.CSS_SELECTOR,"form>span>input>[type='password']")
driver.find_element(By.CSS_SELECTOR,"form span input [type='password']")
(6)通過兄弟節(jié)點定位(通過元素的并列索引定位)
說明:兄弟節(jié)點就是同一父級元素下,存在多個相同子標(biāo)簽,那么這些子元素就是兄弟節(jié)點。
舉例說明:
存在多個并列的<a></a>標(biāo)簽
?通過索引a:nth-child(1)來定位子元素
//選擇第1個<a>里元素
driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:nth-child(1)")
//選擇第2個<a>里元素
driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:nth-child(2)")
//選擇第n個<a>里元素
driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:nth-child(n)")
補充操作
1、send_keys函數(shù):模擬輸入?yún)?shù)
2、clear函數(shù):清空數(shù)據(jù),無參
3、click函數(shù):點擊元素,無參
#在元素id=user的地方輸入"admin"
driver.find_element(By.CSS_SELECTOR, '#user').send_key("admin")
#清除元素id=user的原先內(nèi)容
driver.find_element(By.CSS_SELECTOR, '#user').clear() ?
#點擊元素id=user的地方
driver.find_element(By.CSS_SELECTOR, '#user').click() ?
4、maximize_window()? 模擬瀏覽器最大化按鈕
5、set_window_size(100,100)? ? 設(shè)置瀏覽器大小
6、set_window_position(300,200)? ?設(shè)置瀏覽器位置
7、back() 控制瀏覽器后退
8、forward() 控制瀏覽器前進
9、refresh() 刷新當(dāng)前頁面
10、close()? 關(guān)閉當(dāng)前窗口
11、quit()? ?關(guān)閉所有WebDriver啟動的窗口
三、實例
實例一
需求:1)打開登錄A.html頁面,使用id定位,自動填寫賬號:admin、密碼:123456;
? ? ? ? 2)點擊登錄按鈕
? ? ? ? 3)登錄成功3秒后關(guān)閉瀏覽器窗口
步驟:1、導(dǎo)包
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
2、實例化瀏覽器對象
driver = webdriver.Chrome()
3、打開項目
driver.get(url)
4、找到元素填寫
driver.find_element(By.ID,"username").send_keys("admin") driver.find_element(By.ID,"password").send_keys("123456")
5、點擊登錄按鈕
driver.find_element(By.LINK_TEXT,"登錄").click()
6、3秒后關(guān)閉瀏覽器
sleep(3)
driver.quit()文章來源:http://www.zghlxwxcb.cn/news/detail-827723.html
實現(xiàn):文章來源地址http://www.zghlxwxcb.cn/news/detail-827723.html
#1、導(dǎo)包
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
#2、實例化瀏覽器對象
driver = webdriver.Chrome()
#3、打開url
driver.get("index.html")
#4、查找操作元素
driver.find_element(By.ID,"stu_username_hide").send_keys("1234567879")
driver.find_element(By.ID,"stu_password_hide").send_keys("123456")
#5、關(guān)閉瀏覽器
sleep(3)
driver.quit()
到了這里,關(guān)于Python+selenium自動化八大元素定位方法及實例(超詳細)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!