selenium元素定位

selenium ----元素定位

webDriver 8种元素定位方法

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

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

from time import sleep
from selenium import webdriver
from 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()
#休眠3miao
sleep(20)
#关闭浏览器
driver.quit()

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

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = 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 webdriver
from selenium.webdriver.common.by import By

driver = 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 sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = 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 webdriver
from selenium.webdriver.common.by import By

driver = 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 webdriver
from selenium.webdriver.common.by import By

driver = 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 sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = 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"的所有元素
**选择所有元素
elementinput选择所有的 input 元素
element > elementdiv > input选择父元素 div 标签的所有 input 元素
element + elementdiv + input选择同级别紧跟着 div 标签中的第一个input标签
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = 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 sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = 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标签文本信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qi诺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值