selenium(一)8种元素定位方式

本文详细介绍了使用Selenium进行网页元素定位的8种方法,包括id、name、class_name、tag_name、link_text、partial_link_text、xpath和css定位。针对每种方法,文章提供了定位示例和使用技巧,如xpath的路径定位、属性与逻辑结合定位等,帮助开发者更精准地操控网页元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.id定位


通过元素的id属性进行元素定位,在html标准规范中,id值是唯一的
定位方法:find_element_by_id(属性值)

2.name定位


通过name属性来定位元素,name是允许重复的,默认匹配第一个
定位方法:find_element_by_name(属性值)

3.class_name定位


通过class属性来定位元素,class是允许重复的
定位方法:find_element_by_class_name(属性值),属性值若有多个单词,如:“password input”,只需要取其中一个就好“password”或“input”

4.tag_name定位


通过tag属性来定位元素,tag是允许重复的,会自动定位到第一个tag_name
定位方法:find_element_by_tag_name(属性值)

5.link_text定位


通过A标签属性来定位元素,要求元素为当前标签的全部文本信息,link_text标签允许重复,会自动定位到第一个
定位方法:find_element_by_link_text(属性值)

6.partail_link_text定位


通过A标签属性来定位元素,可以通过超链接的局部文本信息定位
定位方法:find_element_by_partail_link_text(属性值)

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://a.admin.com:8010/zentao/index.php?m=user&f=login")

# 使用id元素找到用户名输入框,并输入字符
driver.find_element_by_id("account").send_keys("admin")
# 使用name元素找到密码输入框,并输入字符
driver.find_element_by_name("password").send_keys("admin123")
# 使用tag元素找到登录按钮,并点击
driver.find_element_by_tag_name("button").click()
time.sleep(5)
driver.quit()


driver.get("https://www.baidu.com/")
# 使用link_text元素找到新闻链接并点击进入页面
driver.find_element_by_link_text("新闻").click()
time.sleep(5)
# 使用class_name元素找到密码输入框,并输入字符
driver.find_element_by_class_name("s_ipt").send_keys("python函数")
# 使用id元素找到登录按钮,并点击
driver.find_element_by_id("su").click()
time.sleep(5)
driver.quit()


"""
定位一组元素
定位方法:find_elements_by_定位方式
定位一组元素返回的是一个列表,通过下标的方式来使用列表中的元素,下标顺序从0开始
"""
driver.get("https://www.jianshu.com/sign_up")
# 定位一组input元素并将它赋给elements变量
elements = driver.find_elements_by_tag_name("input")
# 取该列表的其中一个元素,并输入字符
elements[2].send_keys("admin")
time.sleep(5)
driver.quit()

7.xpath定位

7.1 路径定位-通过元素路径来定位

绝对路径:以/html开头,元素层级之间以/分隔,相同层级元素可以使用从1开始的下标,如:/html/body/div[1]/form/input[2]

相对路径:匹配任意层级元素,相同层级元素可以使用从1开始的下标,以//tag_name或者//*开头,如://div[1]/form/input[2]

可在浏览器如chrome中f12,使用ctrl+f来验证路径正确性

定位方法:find_element_by_xpass(属性值)

7.2 元素属性定位

//*或//tag_name 如://*[@id="属性值"]

可以用来对非id、name等不常见属性的定位

定位方法:find_element_by_xpass("//*[@id="属性值"]")

若报语法错误需要将最外面的双引号变为单引号即可('//*[@id="属性值"]')

7.3 属性与逻辑结合定位

//*或//tag_name  如://*[@id1="属性值1" and @id2="属性值2"]

多个属性结合起来对元素进行定位

7.4 属性与层级结合定位

//*或//tag_name开头 上级目录+属性+当前目录 如://*form[@id="属性值"]/input

在任意层级中都可以结合属性来定位

7.5 xpath扩展

//*[text()="元素全部文本内容"]--------通过元素文本内容定位

//*[contains(@属性名,"文本内容")] 如 //*[contains(@name,"mytest")]--------属性name中包含文本mytest的元素

//*[starts-with(@属性名,"文本内容")] 如 //*[starts-with(@name,"mytest")]--------属性name的值是以mytest开头

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.jianshu.com/sign_up")

# 定位一组input元素并将它赋给elements变量
elements = driver.find_elements_by_tag_name("input")
# 取该列表的其中一个元素,并输入字符
elements[2].send_keys("admin")
time.sleep(3)
# 使用xpath的绝对路径方法找到手机号码输入框元素,并输入字符
driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div/form/div[2]/input[2]").send_keys("13000000000")
# 使用xpath的相对路径方法找到验证码输入框元素,并输入字符
driver.find_element_by_xpath("//div[3]/input").send_keys("111111")
# 使用xpath元素属性定位方法找到密码输入框元素,并输入字符
driver.find_element_by_xpath('//*[@type="password"]').send_keys("111111")
# 使用xpath元素属性与逻辑结合定位方法找注册按钮,并点击
driver.find_element_by_xpath('//*[@type="submit" and @name="commit"]').click()
# 同
driver.find_element_by_xpath('//input[@type="submit" and @name="commit"]').click()
time.sleep(3)
# 使用xpath元素属性与层级结合定位方法找到用户协议按钮,并点击
driver.find_element_by_xpath('//p[@class="sign-up-msg"]/a[1]').click()
time.sleep(2)
driver.quit()

8.css定位元素

比xpath定位速度快,但无法使用下标,若查询到有多个结果会匹配第一个

定位方法:find_element_by_css_selector("css选择器表达式")

8.1 id选择器

#id -----表示通过元素的id属性进行元素选择,#后面跟id的属性值,如 #user_nickname

8.2 class选择器

.class ------表示通过元素的class属性值其中一个属性值进行定位,.后面跟class的其中一个属性值,class="iconfont ic-wechat",如 .iconfont

8.3 元素选择器

通过元素标签名称来定位元素,表达式:tag_name,缺点是容易重复,默认定位到第一个,多数无法精准定位,不推荐使用

8.4 属性选择器

[属性名称=‘all属性值’] ------表示通过属性=属性值来定位,如 [class='iconfont ic-wechat']

8.5 层级选择器

父子关系表达式1:元素1>元素2 ------通过元素1来定位元素2,元素2需为元素1的直接子元素,如 定位<p />标签下的<input />标签,p>input 可以为元素1加属性,如 p[id='mytest']>input,也可结合id选择器写为:#mytest>input

父子或隔代关系表达式2:元素1 元素2------通过元素1来定位元素2,元素2需为元素1的后代元素,可为父子关系或隔代元素,如 p input 或p[id='mytest'] input,也可结合id选择器写为:p #mytest2

8.6 css扩展

input[属性名称^='p'] ------属性以p字母开头的元素 如:input[id^='my']

input[属性名称$='p'] ------属性以p字母结束的元素 如:input[type$='用户名']

input[属性名称*='p'] ------属性包含p字母的元素 如:input[name*='user']

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.jianshu.com/sign_up")
# 通过css的id选择器定位用户名输入框,并输入字符
driver.find_element_by_css_selector("#user_nickname").send_keys("admin")
# 通过css的class选择器定位注册按钮,并点击
driver.find_element_by_css_selector(".sign-up-button").click()
# 使用css的属性选择器定位方法找到手机号码输入框元素,并输入字符
driver.find_element_by_css_selector("[id='user_mobile_number']").send_keys("13000000000")
# 使用css的父子层级选择器定位方法找到验证码输入框,并输入字符
driver.find_element_by_css_selector('div[class="input-prepend restyle no-radius security-up-code js-security-number"]>input').send_keys("111111")
# 使用css的隔代层级选择器定位方法找到密码输入框,并输入字符
driver.find_element_by_css_selector('form #user_password').send_keys("111111")
# 通过css的包含字符串扩展定位方式找到注册按钮,并点击
driver.find_element_by_css_selector("input[name*='comm']").click()
time.sleep(2)
driver.quit()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值