Selenium提供了八种不同的定位方式:id,name,xpath,tag name,class name,link_text,partial link text,css selector
定位优先级:id,name,classname,css,xpath
图片1
一、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是以超链接全部名字作为关键字来定位元素的,所以用此方法定位元素超链接,中文字需要写全
以百度新闻为例
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
通过标签名称定位
如下代码打印结果为: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文档中寻找节点
优点: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("//*[@name='passport']").send_keys("1851461993")
#通过绝对路径的方式(通过input标签的type属性)
driver.find_element_by_xpath("//*[@type='password']").send_keys("1111")
sleep(3)
driver.close()
获取xpath的方式:1、copy xpath(绝对路径)2、copy full xpath(相对路径)
获取xpath
靠自己的智慧获得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 自动化测试项目实战 从菜鸟到高手 田春成 李靖 /著
网友评论