> 文档中心 > selenium元素定位

selenium元素定位


selenium ----元素定位

webDriver 8种元素定位方法

序号 类型 示例
1 id 定位 find_element(By.ID,“id值”)
2 name 定位 find_element(By.NAME,“name值”)
3 tag 定位 find_element(By.TAG_NAME,“id值”)
4 class 定位 find_element(By.CLASS_NAME,“class值”)
5 link_text 定位 find_element(By.LINK_TEXT,“文本值”)
6 partial_link 定位 find_element(By.PARTIAL_LINK_TEXT,“文本模糊值”)
7 XPath 定位 find_element(By.XPATH,“唯一路径标识”)
8 CSS_selector 定位 find_element(By.CSS_SELECTOR,“各种组合”) ,实际使用最多

1、通过id定位(精准定位)

from time import sleepfrom selenium import webdriverfrom selenium.webdriver.common.by import By#模拟百度搜索功能driver = webdriver.Chrome()driver.get("https://www.baidu.com")#隐式等待implicitly_wait(后期文章详细介绍)driver.implicitly_wait(2)#通过id定位百度文本输入框driver.find_element(By.ID,"kw").send_keys("selenium通过id定位")#通过id定位百度一下按钮,并单击事件driver.find_element(By.ID,"su").click()#休眠3miaosleep(20)#关闭浏览器driver.quit()

2、通过name定位(可能重复,属性值不唯一)

from time import sleepfrom selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.implicitly_wait(3)driver.get("https://www.baidu.com")#通过Name获取百度搜索框,并模拟输入内容driver.find_element(By.NAME,"wd").send_keys("selenium通过name定位元素")#由于“百度一下”按钮没有name属性,使用id来进行定位driver.find_element(By.ID,"su").click()sleep(3)driver.quit()

3、通过tag定位(标签定位)

由于网页中tag(标签)比较多,比如等标签众多,不唯一,准确定位相对比较困难,不建议使用

from selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.implicitly_wait(2)driver.get("http://www.baidu.com")#通过tag定位百度搜索框driver.find_element(By.TAG_NAME,"input").send_keys("selenium通过tag定位")

运行上面程序出现报错:元素不可交互(原因:由于html中存在众多标签,不能够精准定位引起的)

在这里插入图片描述

4、通过class定位(可能存在相同的class,可能重复)

from time import sleepfrom selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.implicitly_wait(3)driver.get("https://www.baidu.com")#通过class定位百度搜索框driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("selenium通过class定位元素")#通过class定位百度一下按钮driver.find_element(By.CLASS_NAME,"s_btn").click()sleep(5)driver.quit()

5、通过link_text定位(网页上的文本信息定位)

from selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.implicitly_wait(3)driver.get("https://www.baidu.com")#通过link_text定位新闻driver.find_element(By.LINK_TEXT,"新闻").click()

6、通过partial_link_text定位(是对link_text的补充,如果文本信息太长可截取部分作为唯一标识))

from selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.get("https://www.baidu.com")driver.implicitly_wait(3)#通过partial_link_text定位京公网安备11000002000001号driver.find_element(By.PARTIAL_LINK_TEXT,"001号").click()

7、通过Xpath定位元素

from time import sleepfrom selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.implicitly_wait(3)driver.get("https://www.baidu.com")#1、通过绝对路径dir ="/html/body/div/div/div[5]/div/div/form/span/input"driver.find_element(By.XPATH,dir).send_keys("selenium通过XPath通过绝对路径定位")sleep(5)driver.find_element(By.XPATH,dir).clear()#清除文本#2、利用元素属性定位driver.find_element(By.XPATH,"//input[@id='kw']").send_keys("XPath利用元素属性定位")sleep(5)driver.find_element(By.XPATH,"//input[@id='kw']").clear()driver.find_element(By.XPATH,"//*[@id='kw']").send_keys("XPath利用元素属性定位")sleep(5)driver.find_element(By.XPATH,"//*[@id='kw']").clear()#3、结合层级关系定位driver.find_element(By.XPATH,"//*[@id='form']/span[1]/input").send_keys("XPath结合层级关系定位")sleep(5)driver.find_element(By.XPATH,"//*[@id='form']/span[1]/input").clear()#4、通过逻辑运算符driver.find_element(By.XPATH,"//input[@id='kw' and @class='s_ipt']").send_keys("XPath通过逻辑运算符定位元素")sleep(5)driver.find_element(By.XPATH,"//input[@id='kw' and @class='s_ipt']").clear()#5、使用contains(包含)的方法driver.find_element(By.XPATH,"//span[contains(@class,'s_ipt_wr ')]/input").send_keys("XPath通过使用contains(包含)的方法")sleep(5)driver.find_element(By.XPATH,"//span[contains(@class,'s_ipt_wr ')]/input").clear()#6、使用text()方法driver.find_element(By.XPATH,"//a[text()='百度首页']").click()

8、通过CSS_selector定位

选择器 例子 描述
.class .s_btn_wr 选择class = "s_btn_wr"的所有元素
#id #su 选择id= "su"的所有元素
* * 选择所有元素
element input 选择所有的 input 元素
element > element div > input 选择父元素 div 标签的所有 input 元素
element + element div + input 选择同级别紧跟着 div 标签中的第一个input标签
from selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.implicitly_wait(3)driver.get("https://www.baidu.com")"""以百度搜索框为例"""#1、通过id定位(#标识)driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("css根据id定位")#2、通过class定位(.标识)driver.find_element(By.CSS_SELECTOR,".s_ipt").send_keys("css根据class定位")#3、通过tag定位(不建议使用标签定定位,不精准)driver.find_element(By.CSS_SELECTOR,"input")#4、通过层级关系定位(以 > 指向下一级标签)driver.find_element(By.CSS_SELECTOR,"span > input")#5、通过元素的属性定位(以[]标识)driver.find_element(By.CSS_SELECTOR,'[name="wd"]').send_keys("css通过元素属性定位")#6、组合定位driver.find_element(By.CSS_SELECTOR,'span > input.s_ipt').send_keys("css组合定位")

9、定位一组元素(find_elements())

from time import sleepfrom selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = webdriver.Chrome()driver.implicitly_wait(3)driver.get("https://www.baidu.com")"""依次打开百度左上角 新闻 hao123 等页面"""#使用CSS组合定位:id为s-top-left下的a标签elements = driver.find_elements(By.CSS_SELECTOR,"#s-top-left > a")#循环遍历for element in elements:    sleep(3)    element.click()    print(element.text)#向控制台输出a标签文本信息

小故事网