Selenium八大元素定位及相对定位器

38 篇文章 6 订阅
23 篇文章 0 订阅


'''
 八种元素定位法则:
 id、name、link text、Partial Link Text、Tag Name、Class Name、Xpath、Css Selector
 xpath与cssSelector在速度的区别上大概就是10ms左右
 自动化领域下,正确率和稳定性永远排在第一位。
'''
from selenium import webdriver

driver = webdriver.Chrome()

driver.get('http://www.baidu.com')

1.ID定位

# 在元素具备有ID的属性时,可以通过ID去进行定位,ID就相当于身份证号码,一般而言是不会重复的。
driver.find_element("id",'su')

2.Name定位

# 在元素具备有Name属性时,通过Name属性去定位。重复的概率相对而言还是可能存在的。类似于身份证上的名字
# document.getElementsByName("Name名")根据length长度判断是否存在多个同名Name值
driver.find_element('name','rn')

3.Link Text定位

# 针对于a标签来实现的定位,定位条件是a标签的text内容
driver.find_element('link text','新闻')

4.Partial Link Text定位

# 针对于A标签来实现的定位,是基于a标签的text内容进行模糊查找。类似于sql中的like

els = driver.find_element("partial link text","关于百度")
# for el in els:
#     print(el.text)
print(els.text)

5.TagName定位

# 测试用不上,一般是爬虫时候应用,基于标签名称来进行元素定位
els = driver.find_elements("tag name","input")
print(len(els))

6.ClassName定位

# 基于元素class属性进行定位,较长class属性值不推荐使用,如果class值只有一个,可以考虑使用,但是要避免重复
# driver.find_element('class name','s_ipt').send_keys('s_ipt')
# el = driver.find_element('class name','bg s_ipt_wr new-pmd quickdelete-wrap')
# print(el.get_attribute('class'))
#form > span.bg.s_ipt_wr.new-pmd.quickdelete-wrap

7.CSS Selector定位

# 元素定位:万金油型的元素定位。原理就是基于CSS样式来对元素进行定位。也是传说中最快的方法。
# driver.find_element("css selector","#kw").send_keys("#kw")

8.Xpath元素定位

# 虚竹个人推荐常用款:定位界的万金油,原理是基于html的结构来对元素进行定位,类似于操作系统下的文件管理系统
# 绝对路径:不到穷途末路之时,不要使用这个定位方法
# /html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input
# 相对路径:元素的查询功能,通过右键copy,copy xpath获取元素的相对路径(此方法不推荐),一般都是通过手写xpath的方式来解决
# //*[@id="kw"]
# //*[@type="submit"]
e1 = driver.find_element('xpath','//*[@id="kw"]').send_keys("司小幽")
driver.find_element('xpath','//*[@type="submit"]').click()

9.相对定位器

'''
 相对定位器进行元素定位,在selenium4 中所新增的内容
 基于人的方向来对元素进行定位,只需要定位一个元素,就可以把这个元素周围的所有元素定位到
 实际使用中,会出现定位不准确
'''
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')

# 核心元素
el = driver.find_element("id","kw")
# 上
a = driver.find_elements(locate_with(By.TAG_NAME,'div').above(el))
# 下
b = driver.find_elements(locate_with(By.TAG_NAME,'div').below(el))
# 左
l = driver.find_elements(locate_with(By.TAG_NAME,'div').to_left_of(el))
# 右
r = driver.find_elements(locate_with(By.TAG_NAME,'div').to_right_of(el))
# 附近
n = driver.find_elements(locate_with(By.TAG_NAME,'div').near(el))
print(a)
print(b)
print(l)
print(r)
print(n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

司小幽

真诚赞赏,手留余香。

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

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

打赏作者

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

抵扣说明:

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

余额充值