Selenium提供了八種不同的定位方式:id绿渣,name,xpath燕耿,tag name中符,class name,link_text誉帅,partial link text淀散,css selector
定位優(yōu)先級:id,name,classname,css,xpath
一、id定位:find_element_by_id
示例:在百度搜索框中輸入字符
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://wwww.baidu.com')
driver.find_element_by_id('kw').send_keys('sunsk')
# 等待5秒
sleep(5)
# 退出
driver.quit()
二蚜锨、name定位:find_element_by_name
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://wwww.baidu.com')
driver.find_element_by_name("wd").send_keys('sunsk')
三档插、class定位:find_element_by_class_name
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com");
driver.find_element_by_class_name("s_ipt").send_keys("sunsk")
四、link_text定位:find_element_by_link_text
link_text是以超鏈接全部名字作為關(guān)鍵字來定位元素的踏志,所以用此方法定位元素超鏈接阀捅,中文字需要寫全
以百度新聞為例
driver.find_element_by_link_text("新").click():報錯
因為是精確定位,所以找不到時會報錯
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"新"}
如下為正確寫法
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com");
driver.find_element_by_link_text("新聞").click()
五针余、partial_link_text:find_element_by_partial_link_text
partial_link_text 用超鏈接的部分文字來定位元素
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com");
driver.find_element_by_partial_link_text("新").click()
六饲鄙、tag_name定位:find_element_by_tag_name
通過標簽名稱定位
如下代碼打印結(jié)果為:f
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com");
print(driver.find_element_by_tag_name("form").get_attribute("name"))
七、Xpath定位:必須使用唯一的屬性定位圆雁,否則不唯一的話會報錯
用途:在xml文檔中尋找節(jié)點
優(yōu)點:XPath比CSS定位更加靈活忍级。Xpath可以向前搜索,也可以向后搜索伪朽;CSS定位只能向前搜索
缺點:XPath定位速度比CSS慢
使用示例(使用Xpath定位轴咱,在馬蜂窩登陸中添加手機號和密碼):
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://passport.mafengwo.cn")
# 通過相對路徑的方式
#driver.find_element_by_xpath("/html/body/div[1]/div/div/div[2]/div[1]/div[1]/form/div[1]/input").send_keys("1851461993")
#通過絕對路徑的方式(通過input標簽的id屬性)
# driver.find_element_by_xpath('//*[@id="_j_login_form"]/div[1]/input').send_keys("1851461993")
#通過絕對路徑的方式(通過input標簽的name屬性)報錯了。因為html中有多個name為passport的input框
# driver.find_element_by_xpath("http://*[@name='passport']").send_keys("1851461993")
#通過絕對路徑的方式(通過input標簽的type屬性)
driver.find_element_by_xpath("http://*[@type='password']").send_keys("1111")
sleep(3)
driver.close()
獲取xpath的方式:1、copy xpath(絕對路徑)2朴肺、copy full xpath(相對路徑)
八窖剑、CSS定位:find_element_by_css_selector
CSS選擇器具體參考如下鏈接
https://www.w3school.com.cn/cssref/css_selectors.asp
常用的如下圖
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 通過class="s_ipt定位
# driver.find_element_by_css_selector(".s_ipt").send_keys("sunsk")
# 通過id="kw"定位
# driver.find_element_by_css_selector("#kw").send_keys("sunsk")
# 通過input框中的的name屬性定位
# driver.find_element_by_css_selector("input[name='wd']").send_keys("sunsk")
# 使用元素在頁面中的絕對路徑來定位
driver.find_element_by_css_selector("html>body>div>div>div>div>div>form>span>input[name='wd']").send_keys("sunsk")
sleep(1)
driver.close()
Selenium 3+Python 3 自動化測試項目實戰(zhàn) 從菜鳥到高手 田春成 李靖 /著