selenium基础定位元素入门

这篇具有很好参考价值的文章主要介绍了selenium基础定位元素入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考文章链接

什么是selenium?

selenium是一个web自动化测试工具

selenium环境部署安装

首先需要安装python环境
1、安装

在cmd 直接输入 :pip install selenium

2、卸载:

在cmd输入:pip uninstall selenium

3、查看:

pip show selenium 或者 pip list



4、安装浏览器驱动
谷歌(国内镜像地址)
其他浏览器的话需要自行下载查看,对应自身浏览器的版本进行选择即可
若没发现对应的64位的驱动,用32位的也可以,不影响使用。

5、浏览器驱动安装
下载好驱动压缩包过后,解压得到 chromedriver.exe 驱动程序把他放进Python解释器根目录下,就ok了

selenium基础定位元素入门

selenium初体验

"""
web 自动化基本代码
"""
# 1、导包
from time import sleep
from selenium import webdriver

# 2、实例化浏览器对象:类名()
driver = webdriver.Chrome()

# 3、打开网页包含协议头
driver.get('https://www.baidu.com/')

# 4、时间轴观察效果
sleep(5)

# 5、关闭网页
driver.quit()

八大元素定位

浏览器点击f12或者右键点击浏览器的检查,调出开发者工具进行元素选择的调试

定位方式:
1、id
2、name
3、class_name(使用的是class属性进行定位)
4、teg_name (标签名称)
5、link_text(定位超链接 a 标签)
6、partial_link_text(定位超链接 a 标签 包含关系)
7、xpath (路径)
8、css (元素选择器)

id定位法(由于版本迭代,新版的selenium已经不再使用find_element_by_id方法。)

改用方法为:

driver.find_element(By.ID, 'kw').send_keys('苹果15')

selenium基础定位元素入门
同理其他方式定位则用By.对应的定位方式

name定位方式

说明:通过元素的name属性来定位, name一般名称为重复
提示:元素必须要有name属性

1、name方法:由于元素的 name 属性值可能存在重复, 必须确定其能够代表⽬标元素唯⼀性之后, ⽅可使⽤
2、当页⾯面内有多个元素的特征值是相同的时候, 定位元素的⽅法执⾏时,默认只会获取第⼀个符合要求的特征对应的元素
3、因此, 定位元素时需要尽量保证使⽤的特征值能够代表⽬标元素在当前⻚页⾯内的唯⼀性!否则定不了位,添加在第一个定位的位置
driver.find_element(By.NAME, 'wd').send_keys('苹果15')

class_name 方法

说明:通过元素的class属性来定位,class属性一般为多个值。
提示:元素必须要有class属性

driver.find_element(By.CLASS_NAME, 's_ipt').send_keys('苹果15')

tag_name 方法

说明:通过元素的标签名称来定位,标签名(查看元素时尖括号(<)紧挨着的单词或字母就是标签名) (标签名也就是元素名)

tag_name 方法:由于存在大量标签,并且重复性更高,因此必须确定其能够代表目标元素唯一性之后,方可以使用;如果页面中存在多个相同标签,默认返回第一个标签元素。

注意:一般标签重复性过高,要精确定位,都不会选择tag_name !

link_text

说明:定位超链接标签

注意:
1、只能使用精准匹配(a标签的全部文本内容)
​ 2、该⽅法只针对超链接元素(a 标签),并且需要输入超链接的全部⽂本信息

driver.find_element(By.LINK_TEXT, '新闻').click()

partial_link_text

说明:定位超链接标签
注意:
1. 可以使用精准或模糊匹配,如果使用模糊匹配最好使用能代表唯一的关键词
2. 如果有多个值,默认返回第一个值

他和link_text的区别在于,他可以模糊的匹配,但link_text只能精确匹配

driver.find_element(By.PARTIAL_LINK_TEXT, '新').click()

定位一组元素的方法

​ 通常我们定义元素方法的是 driver.find_element,但是也有driver.find_elements()这种element后面带s,表示执行结果返回的是列表类型,里面的数据是多个元素对象。

其用法与获取单个元素时差不多,但driver.find_elements()返回的则是一个数组列表

# 说明:通过元素的id属性定位,id一般情况下在当前页面中是唯一。
# 提示:元素必须要有id属性。

"""
语法:find_element_by_id(元素value)
1、元素定位:首先调用find_element_by_id(元素value)获得元素定位(过时了)
2、调用send_keys来填写内容
3、通过⽬标元素的 id 属性值定位, 由于 id 值一般是唯一的,因此当元素存在 id 属性值时, 优先使用 id 方法定位元素
"""

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

# 实例化浏览器对象
driver = webdriver.Chrome()

# 打开网址url
driver.get('https://www.baidu.com/')

# 需求
# driver.find_element_by_id('kw').send_keys('苹果15')
# driver.find_element(By.ID, 'kw').send_keys('苹果15')
# driver.find_element(By.NAME, 'wd').send_keys('苹果15')
# driver.find_element(By.CLASS_NAME, 's_ipt').send_keys('苹果15')
# driver.find_element(By.LINK_TEXT, '新闻').click()
# driver.find_element(By.PARTIAL_LINK_TEXT, '新').click()
aLinks = driver.find_elements(By.CLASS_NAME, 'c-color-t')
aLinks[0].click()
aLinks[1].click()
aLinks[2].click()
# 观察效果
sleep(3)

# 关闭网页
driver.quit()

总结:

1、id,name,class,都是依赖于元素这三个对应的属性,如果元素没有这个三个属性,定位方法不能使用;

2、link_text, partial_link_text: 只适合超链接定位

3、tag_name: 只能找页面唯一元素,或者 页面中多个相同元素中的第一个元素

xpath (重点掌握,这个是常用的方式)

说明:Xpath策略有多种,无论使用哪一种策略(方法),定位的方法都是同一个,不同策略只决定方法的参数的写法

什么是xpath定位
基于元素的路径定位

Xpath常用的定位策略:
绝对路径:从最外层元素到指定元素之间所有经过元素层级的路径 ,绝对路径是以/html根节点开始,使用 / 来分割元素层级
语法:/html/body/div/fieldset/form/p[1]/input (可能会有多个p标签,所以也是用索引的方式定位,是从一开始以便读者看懂)
绝对路径对页⾯结构要求比较严格,不建议使⽤!!!!

相对路径:匹配任意层级的元素,不限制元素的位置 ,相对路径是以 // 开始, // 跟元素名称,不知元素名称可以使用*代替。
语法://input 或者 //*
推荐使用相对路径!!

selenium基础定位元素入门

利用元素属性策略

1、路径结合属性

该方法可以使用目标元素的任意一个属性和属性值(需要保证唯⼀性)

# 语法1://标签名[@属性名='属性值']
# 语法2://*[@属性名='属性值']

注意:
1、使用 XPath 策略, 需要在浏览器⼯具中根据策略语法, 组装策略值,验证后再放入代码中使用
2、⽬标元素的有些属性和属性值, 可能存在多个相同特征的元素, 需要注意唯一性


2、路径结合逻辑(多个属性)

解决的是单个属性和属性值无法定位元素唯一性的问题。

# 语法: //*[@属性1="属性值1" and @属性2="属性值2"]

注意:多个属性可有由 多个 and 链接,每一个属性前面都要有 @ 开头,可以根据需求使用更多属性值

3、层级和属性结合策略

目标元素⽆法直接定位, 可以考虑先定位其父层级或祖辈层级, 再获取目标元素

# 语法://*[@id='父级id属性值']/input    (⽗层级定位策略/目标元素定位策略)
# 导包
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By


# 实例化浏览器对象
driver = webdriver.Chrome()
# 打开网址url
driver.get('https://www.baidu.com/')
# 需求
# 1、相对路径
# ele = driver.find_element(By.XPATH, '//*[@id="kw"]')
# ele.send_keys('苹果15')


# # 2、绝对路径//这个验证会报错找不到元素
# driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input').send_keys('苹果15')
#
# # 3、路径结合属性  语法1://标签名[@属性名='属性值']
# driver.find_element(By.XPATH, "//input[@id='kw']").send_keys('苹果15')
# # 语法2: //*[@属性名='属性值']
# driver.find_element(By.XPATH, "//*[@id='kw']").send_keys('苹果15')
#
# # 4、路径结合逻辑(多个属性)
# driver.find_element(By.XPATH, "//*[@id='kw' and @name ='wd']").send_keys('苹果15')
#
# 5、层级和属性结合策略//这个验证会报错找不到元素
driver.find_element(By.XPATH, "//*[@id='s_kw_wrap']/input").send_keys('苹果15')

# 观察效果
sleep(3)

# 关闭网页
driver.quit()

xpath 扩展
1. //*[text()='文本信息'] # 定位文本值等于XXX的元素  
	提示:一般适合 p标签,a标签 
2. //*[contains(@属性,'属性值的部分内容')] # 定位属性包含xxx的元素 【重点】
	提示:contains为关键字,不可更改。 
3. //*[starts-with(@属性,'属性值的开头部分')] # 定位属性以xxx开头的元素
	提示:starts-with为关键字不可更改

driver.find_element(By.XPATH, "//*[text()='新闻']").click()
driver.find_element(By.XPATH, "//*[contains(@autocomplete,'f')]").send_keys('苹果15')
driver.find_element(By.XPATH, "//*[starts-with(@autocomplete,'o')]").send_keys('苹果15')

css定位 (重点掌握)

通过 css 的选择器语法定位元素文章来源地址https://www.toymoban.com/news/detail-501419.html

1、Selenium框架官方推荐使用 css ,因为定位效率高于xpath

2、 CSS一种标记语言,焦点:数据的样式。控制元素的显示样式,就必须先找到元素,在css标记语言中找元素使用css选择器;

3、css的选择策略也有很多,但是无论选择哪一种选择策略都是用的同一种定位方法
	
# 导包
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By


# 实例化浏览器对象
driver = webdriver.Chrome()
# 打开网址url
driver.get('https://www.baidu.com/')
# 需求
# 方法:
# driver.find_element(By.CSS_SELECTOR, '#kw').send_keys('苹果15')
# driver.find_element(By.CSS_SELECTOR, '[class="s_ipt"]').send_keys('苹果15')

# 语法属性选择器
# driver.find_element(By.CSS_SELECTOR, 'input[id="kw"]').send_keys('苹果15')
# driver.find_element(By.CSS_SELECTOR, '[name="wd"]').send_keys('苹果15')



# 观察效果
sleep(3)

# 关闭网页
driver.quit()

css的扩展方法 (重点掌握)

1. [属性^='开头的字母'] # 获取指定属性以指定字母开头的元素
2. [属性$='结束的字母'] # 获取指定属性以指定字母结束的元素
3. [属性*='包含的字母'] # 获取指定属性包含指定字母的元素
# 语法1:[属性^='开头的字母'] # 获取指定属性以指定字母开头的元素
driver.find_element(By.CSS_SELECTOR, "[class^='s_i']").send_keys('苹果15')

# 语法2:[属性$='结束的字母'] # 获取指定属性以指定字母结束的元素
driver.find_element(By.CSS_SELECTOR, "[class$='pt']").send_keys('苹果15')

# 语法3:[属性*='包含的字母'] # 获取指定属性包含指定字母的元素
driver.find_element(By.CSS_SELECTOR, "[autocomplete*='f']").send_keys('苹果15')

到了这里,关于selenium基础定位元素入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python - selenium-元素定位

    目录 一.前序工作 二.webdriver测试 三.元素定位方式    根据ID定位                a = wd.find_element(By.ID, \\\'值\\\') 根据NAME定位                 a = wd.find_element(By.NAME, \\\'值\\\') 根据CLASS_NAME定位            a = wd.find_element(By.CLASS_NAME, \\\'值\\\')   根据TAG_NAME定位      

    2024年02月01日
    浏览(76)
  • selenium元素定位与操作

    说明:本篇博客基于selenium 4.1.0 在selenium中,想要对元素进行操作,一般需要如下步骤: 在浏览器中查看元素属性,便于selenium在页面中找到该元素 在代码中创建元素对象 元素操作、获取元素信息 方法1:右键-检查 方法2:设置-更多工具-开发者模式 方法3:默认快捷键F12 出

    2024年02月15日
    浏览(48)
  • selenium元素定位

    元素定位: 一、单元素定位           1、id定位:使用元素的id属性定位     2、name定位:使用元素的name属性定位     3、class定位:使用元素的class属性定位           当class属性值有空格时,空格要用点代替           class属性值有空格时,说明元素属于由空格分隔的

    2024年02月02日
    浏览(38)
  • Selenium元素定位方法大全

    作为当下最流行的web UI自动化测试工具,selenium是很多测试同学入门接触自动化测试时学习的第一个工具。想要自动化操作页面上的内容,元素定位是首先必须要学习的核心知识。 因此本文主要介绍selenium的几种最常用的元素定位方法,掌握了这些方法,希望能帮助大家快速

    2024年02月02日
    浏览(67)
  • Selenium环境+元素定位大法

    selenium 与 webdriver Selenium 是一个用于 Web 测试的工具,测试运行在浏览器中,就像真正的用户在手工操作一样。支持所有主流浏览器 WebDriver 就是对浏览器提供的原生API进行封装,使其成为一套更加面向对象的Selenium WebDriver API。 使用这套API可以操控浏览器的开启、关闭,打开

    2024年02月12日
    浏览(47)
  • selenium 元素定位攻略大全

    元素名称 描述 Webdriver API id id属性 driver.find_element(By.ID, \\\"id属性值\\\") name name属性 driver.find_element(By.NAME, \\\"name属性值\\\") class_name class属性 driver.find_element(By.CLASS_NAME, \\\"class_name属性值\\\") tag_name 标签名 driver.find_element(By.TAG_NAME, \\\"标签名\\\") link_text a元素的文本内容-精准匹配 driver.find_elemen

    2024年04月12日
    浏览(65)
  • 学会Selenium元素定位

    UI自动化测试的本质就是将手工测试的一系列动作转化成机器自动执行,可以简单概括为五大步骤:定位元素 - 操作元素 - 模拟页面动作 - 断言结果 - 生成报告。 所以很多同学在学习时,都是以元素定位作为入门导向,好的开始就是成功的一半。 因此,本篇将详细介绍Selen

    2024年02月11日
    浏览(51)
  • Selenium(一):八大元素定位

    find_element() 中 类型为空,默认为By.ID

    2024年04月23日
    浏览(74)
  • selenium【元素定位与操作】

    定位元素 [@属性=‘属性值’] [@属性] [tag] [text()=‘文本’] 返回的是元素两个间的文本 [contains(text(),“元素两个间的部分文本”)] [contains(@属性名,“部分属性值”)] 定位下拉列表的某个选项:driver.find_element(By.XPATH,‘//option[text()=“联想”]’) driver.find_element(By.XPATH,‘//o

    2024年04月18日
    浏览(58)
  • selenium定位rect元素

    rect元素的属性如下: x:此属性确定矩形的x坐标。 值类型:| ; 默认值:0 动画:是 y:此属性确定矩形的y坐标。 值类型:| ; 默认值:0 动画:是 width:此属性确定矩形的宽度。 值类型:自动|| ; 默认值:自动;动画:是 height:此属性确定矩形的高度。 值类型:自动|| ; 默认

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包