『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解
1、什么是元素定位
- 元素定位就是查找HTML元素的过程。
- HTML元素指的是从开始标签(
start tag
)到结束标签(end tag
)的所有代码。 - 操作页面元素之前,首先要对元素进行定位,所以定位是自动化脚本编写的开始。
- 通常使用
find_element
或find_elements
方法来定位元素。find_element
使用给定的方法定位和查找一个元素find_elements
使用给定的方法定位和查找所有元素,并以列表(list
)的形式返回。
2、Selenium元素定位常用API
(1)By_id 定位
说明:
当所定位的元素具有id
属性的时候我们可以通过by_id
来定位该元素。
例如:打开百度首页,定位搜索框。
搜索框页面源代码:属性id
值为kw
。
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="255" autocomplete="off">
示例:
"""
1.学习目标
必须掌握selenium中元素定位方法,id定位方法
2.操作步骤(语法)通过元素id属性定位
driver.find_element_by_id(id属性的值)
3.需求
在百度页面中使用id属性定位百度输入框
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器(获取浏览器对象)
driver = webdriver.Chrome()
# 3.输入网址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.元素定位(id定位方法),百度输入框
"""
注意:
如果有多个相同属性值的元素,单数形式,定位第一个.
"""
srk = driver.find_element_by_id("kw")
# 打印srk对象
print(srk)
# 查看元素对应的源码
print(srk.get_attribute("outerHTML"))
# 5.关团浏览器
driver.quit()
"""
输出结果:
<selenium.webdriver.remote.webelement.WebElement
(session="6fbad6d63614e1cae6cd346153a7105e",
element="0dd374b6-74ed-4f4c-b610-5c772fd8c366")>
我们可以看到srk是一个WebElement类型的对象。
查看元素对应的源码如下:
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
说明我们已经把百度首页的输入框获取到了。
"""
复数形式:
"""
学习目标
复数形式
复数定位形式:driver.find_elements_XXX
复数定位,返回的列表类型数据<list>
遍历列表操作具体元素
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.输入网址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.通过by_id复数定位
srk = driver.find_elements_by_id("kw")
# 5.查看返回结果数据类型
print("结果数据类型", type(srk))
print("元素个数", len(srk))
# 6.遍历结果,查看源码
for i in srk:
# 查看元素对应的源码
print(i.get_attribute("outerHTML"))
# 7.关团浏览器
driver.quit()
"""
结果数据类型 <class 'list'>
元素个数 1
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
"""
异常总结:
异常1:
AttributeError:'list' object has no attribute 'get_attribute' :
表示定位元素返回的是一个列表格式,原因:使用复数定位方式 find_elements获取的定位
异常2
NoSuchElementException :
表示元素没找到元素,原因是定位方式出现问题,有一种情况是属性值写错了。
(2)by_name 定位
说明:
当所定位的元素具有name
属性的时候,我们可以通过by_name
来定位该元素。
如上图中的百度搜索页面,搜索框页面源代码:属性name
值为wd
。
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
示例:
使用name
属性定位百度搜索框。
"""
1.学习目标:
必须掌握selenium的元素定位方法by_name
2.语法
name定位
driver.find_element_by_name(name属性的值)
3.需求
使用name属性定位百度搜索框
4.总结
当元素中有name属性时才能使用上述定位方法
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器(获取浏览器对象)
driver = webdriver.Chrome()
# 3.输入网址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4. 使用name定位百度搜索框
"""
注意:
如果有多个相同属性值的元素,单数形式,定位第一个.
"""
srk = driver.find_element_by_name("wd")
# 打印srk对象
print(srk)
# 打印定位元素所在行的源码
print(srk.get_attribute("outerHTML"))
# 5.关闭浏览器
driver.quit()
"""
输出结果:
<selenium.webdriver.remote.webelement.WebElement
(session="3149d334336f0eab9e4d8d394e4efd72",
element="0.1359081202533734-1")>
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
"""
复数形式:
"""
学习目标
复数形式
复数定位形式:driver.find_elements_XXX
复数定位,返回的列表类型数据<list>
遍历列表操作具体元素
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.输入网址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.通过by_id复数定位
srk = driver.find_elements_by_name("wd")
# 5.查看返回结果数据类型
print("结果数据类型", type(srk))
print("元素个数", len(srk))
# 6.遍历结果,查看源码
for i in srk:
# 查看元素对应的源码
print(i.get_attribute("outerHTML"))
# 7.关团浏览器
driver.quit()
"""
结果数据类型 <class 'list'>
元素个数 1
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
"""
(3)by_class_name 定位
说明:
当所定位的元素具有class
属性的时候,我们可以通过by_class_name
来定位该元素。
搜索框页面源代码:属性classname
值为s_ipt
。
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="255" autocomplete="off">
示例:
使用class
属性定位百度搜索框。
"""
1.学习目标:
必须掌握selenium的元素定位方法by_class_name
2.语法
classname定位
driver.find_element_by_class_name(class属性值)
3.需求
使用class属性定位百度搜索框
4.总结
当元素中有class属性时才能使用上述定位方法
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器(获取浏览器对象)
driver = webdriver.Chrome()
# 3.输入网址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4. 使用name定位百度搜索框
"""
注意:
如果有多个相同属性值的元素,单数形式,定位第一个.
"""
srk = driver.find_element_by_class_name("s_ipt")
# 打印srk对象
print(srk)
# 查看元素对应的源码
print(srk.get_attribute("outerHTML"))
# 5.关闭浏览器
driver.quit()
"""
输出结果:
<selenium.webdriver.remote.webelement.WebElement
(session="e4f97a48e7f113e681950b62c7789966",
element="0.5782514739919584-1")>
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
"""
复数形式:
"""
学习目标
复数形式
复数定位形式:driver.find_elements_XXX
复数定位,返回的列表类型数据<list>
遍历列表操作具体元素
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.输入网址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.通过by_id复数定位
srk = driver.find_elements_by_class_name("s_ipt")
# 5.查看返回结果数据类型
print("结果数据类型", type(srk))
print("元素个数", len(srk))
# 6.遍历结果,查看源码
for i in srk:
# 查看元素对应的源码
print(i.get_attribute("outerHTML"))
# 7.关团浏览器
driver.quit()
"""
结果数据类型 <class 'list'>
元素个数 1
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
"""
(4)by_tag_name 定位
说明:
by_tag_name
方法可以通过元素的标签名来查找元素。由于搜索到的标签名通常不止一个,所以一般结合使用find_elements
方法来使用。
假设页面中有一个button
按钮。
<button type="submitA" value="注册A" title="加入会员A">注册用户A</button>
示例:
"""
1.学习目标:
必须掌握selenium中tag_name定位方法
2.语法
driver.find_element_by_tag_name(标签名) # 单数形式
driver.find_elements_by_tag_name(标签名) # 定位一组标签名相同的元素
3.需求
在页面中,使用tag_name对按钮注册用户A定位
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器(获取浏览器对象)
driver = webdriver.Chrome()
# 3.打开注册A页面
url = "file:///" + os.path.abspath("./练习页面/注册A.html")
driver.get(url)
sleep(2)
# 4.使用tag_name定位按钮
"""
注意:
如果有多个相同标签的元素,单数形式,定位第一个.
"""
button = driver.find_element_by_tag_name("input")
print(button.get_attribute("outerHTML"))
# 5.关闭浏览器
sleep(2)
driver.quit()
"""
输出结果:
<input type="textA" name="userA" id="userA" placeholder="账号A" required="" value="">
"""
复数形式:
"""
1.学习目标:
必须掌握selenium中tag_name定位方法
2.语法
driver.find_element_by_tag_name(标签名) # 单数形式
driver.find_elements_by_tag_name(标签名) # 定位一组标签名相同的元素
3.需求
在页面中,使用tag_name复数形式定位 input标签
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开注册A页面
url = "file:///" + os.path.abspath("./练习页面/注册A.html")
driver.get(url)
sleep(2)
# 4.使用tag_name复数形式定位 input标签
input_elements = driver.find_elements_by_tag_name("input")
# 查看结果类型
print(type(input_elements))
print(len(input_elements))
# 5.遍历列表打印每个元素的源码
for element in input_elements:
print(element.get_attribute("outerHTML"))
# 6.关闭浏览器
driver.quit()
"""
输出结果:
<class 'list'>
16
<input type="textA" name="userA" id="userA" placeholder="账号A" required="" value="">
<input type="password" name="passwordA" id="passwordA" placeholder="密码A" value="">
<input type="telA" name="telA" id="telA" placeholder="电话A" class="telA" value="">
<input type="emailA" name="emailA" id="emailA" placeholder="电子邮箱A" value="">
......等等
"""
总结:
tag_name
定位:
- 单数形式
当页面中如果定位的标签是唯一的,可以直接使用tag_name
方法定位。
如果所定位的标签在页面中的索引位置是第一个,也可以用tag_name
方法定位。- 复数形式
复数定位形式:driver.find_elements_XXX
。
复数定位,返回的列表类型数据。
遍历列表操作具体元素。
(5)by_link_text 定位
说明:
by_link_text
通过超文本链接上的文字信息来定位元素,这种方式一般专门用于定位页面上的超文本链接。
例如打开百度首页,定位点击超链接地图。
超链接地图源代码:
<a class="mnav" name="tj_trmap" href="http://map.baidu.com">地图</a>
示例:
脚本代码需求:使用link_text定位百度首页地图链接。
"""
1.学习目标:
必须掌握selenium中超链接的定位方法
2.语法
link_text # 需要链接的全部文本
driver.find_element_by_link_text(全部文本)
3.需求
在页面中,使用定位连接的方法,访问百度网站,定位点击超链接地图。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.使用link_text定位
"""
注意:
连接的全部文本,表示<a>标签中的全部内容,有空格也要算。
如果有相同部分文本的元素,单数形式,定位第一个。
"""
linkText = driver.find_element_by_link_text("地图")
print(linkText.get_attribute("outerHTML"))
# 5.关闭浏览器
driver.quit()
"""
输出结果:
<a href="http://map.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">地图</a>
"""
复数形式:
# 定位一组标超链接文本全部内容相同的元素,很少用到。
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.使用link_text定位
"""
注意:
连接的全部文本,表示<a>标签中的全部内容,有空格也要写。
"""
linkText = driver.find_elements_by_link_text("地图")
# 5.遍历列表打印每个元素的源码
for element in linkText:
print(element.get_attribute("outerHTML"))
# 6.关闭浏览器
driver.quit()
"""
输出结果:
<a href="http://map.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">地图</a>
"""
(6)by_partial_link_text 定位
说明:
当你不能准确知道超链接上的文本信息或者只想通过一些关键字进行匹配时,可以使用by_partial_link_text
这个方法来通过部分链接文字进行匹配。
例如打开百度首页,定位点击超链接<hao123>
。
超链接地图源代码:在代码里用”ao1”
进行匹配
<a href="https://www.hao123.com" target="_blank" class="mnav c-font-normal c-color-t">hao123</a>
示例:
脚本代码:使用partial_link_text
方法定位百度首页<hao123>
链接
"""
1.学习目标:
必须掌握selenium中超链接的定位方法
2.语法
partial_link_text # 需要连接部分文本
driver.find_element_by_partial_link_text(部分文本)
部分文本必须是连续的文字(中可包含空格)
3.需求
在页面中,使用定位连接的方法,访问百度网站,定位点击超链接<hao123>。
"""
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.使用by_partial_link_text定位
"""
注意:
连接的部分文本,表示<a>标签中的连续的部分内容,之中有空格也要算。
如果有相同部分文本的元素,单数形式,定位第一个。
"""
pLinkText = driver.find_element_by_partial_link_text("ao1")
print(pLinkText.get_attribute("outerHTML"))
# 6.关闭浏览器
sleep(2)
driver.quit()
"""
输出结果:
<a href="https://www.hao123.com" target="_blank" class="mnav c-font-normal c-color-t">hao123</a>
"""
复数形式:
# 定位一组标超链接文本目标内容相同的元素,很少用到。
# 1.导入selenium
from selenium import webdriver
from time import sleep
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.使用by_partial_link_text定位
"""
注意:
连接的部分文本,表示<a>标签中的连续的部分内容,之中有空格也要算。
"""
pLinkText = driver.find_elements_by_partial_link_text("ao1")
# 5.遍历列表打印每个元素的源码
for element in pLinkText:
print(element.get_attribute("outerHTML"))
# 6.关闭浏览器
driver.quit()
"""
输出结果:
<a href="https://www.hao123.com" target="_blank" class="mnav c-font-normal c-color-t">hao123</a>
"""
以上就是Selenium中基础元素定位的常用API。
『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解的更多相关文章
- 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍
目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...
- 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作
目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...
- 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件
目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...
- 『心善渊』Selenium3.0基础 — 10、使用Seleniun定位页面元素归纳总结(超详细)
目录 1.Selenium中8种基本元素定位方式 (1)单数形式 (2)复数形式 2.By类定位的8种定位方式 (1)单数形式 (2)复数形式 3.XPath定位总结 (1)基础定位语法 (2)属性定 ...
- 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍
目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...
- 『心善渊』Selenium3.0基础 — 19、使用Selenium操作文件的上传和下载
目录 1.Selenium实现文件上传 (1)页面中的文件上传说明 (2)文件上传示例 (3)总结 2.Selenium实现文件下载 (1)Firefox浏览器文件下载 1)操作步骤: 2)文件下载示 ...
- 『心善渊』Selenium3.0基础 — 5、XPath路径表达式详细介绍
目录 1.XPath介绍 2.什么是XML 3.XML与HTML对比 4.为什么使用XPath定位页面中的元素 5.XPath中节点之间的关系 (1)节点的概念 (2)节点之间的关系类型 6.XPat ...
- 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素
目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...
- 『心善渊』Selenium3.0基础 — 13、Selenium操作下拉菜单
目录 1.使用Selenium中的Select类来处理下拉菜单(推荐) 2.下拉菜单对象的其他操作(了解) 3.通过元素二次定位方式操作下拉菜单(重点) (1)了解元素二次定位 (2)示例: 页面中的 ...
随机推荐
- Redis6.x学习笔记(四)复制
复制概述 Redis支持复制的功能,以实现当一台服务器的数据更新后,自动将新的数据异步同步到其它数据库. Redis复制实现中,把数据库分为主数据库master和从数据库slave,主数据库可以进行读 ...
- Taro使用多线程Worker相关问题解决
JavaScript 语言采用的是单线程模型,HTML5标准中的Web Worker ,为 JavaScript 创造多线程环境.微信小程序也有相应的Worker,同样具备多线程运行的能力 主页面中创 ...
- 『政善治』Postman工具 — 12、Postman中实现数据驱动
目录 1.什么是数据驱动? 2.测试集说明 3.创建请求与准备数据文件 (1)新增学院结果文档内容如下 (2)编写数据文件 (3)在Postman中创建请求 4.实现Postman中的数据驱动 步骤1 ...
- istio流量管理:非侵入式流量治理
在服务治理中,流量管理是一个广泛的话题,一般情况下,常用的包括: 动态修改服务访问的负载均衡策略,比如根据某个请求特征做会话保持: 同一个服务有多版本管理,将一部分流量切到某个版本上: 对服务进行保护 ...
- python实现UDP通讯
Environment Client:Windows Server:KaLi Linux(VM_virtul) Network:Same LAN Client UDPClient.py #-*- co ...
- 从CentOS7默认安装的/home中转移空间到根目录/ - LVM操作简明教程
一.基础概念 Cent0S 7默认启用LVM2(Logical Volume Manager),把机器的一块硬盘分为两个区sda1和sda2,其中分区sda1作为系统盘/boot挂载,少量空间:sda ...
- Docker Swarm(十一)生产环境使用的一些建议
一.Docker Swarm上的容器选择 并非所有服务都应该部署在Swarm集群内.数据库以及其他有状态服务就不适合部署在Swarm集群内. 理论上,你可以通过使用labels将容器部署到特定节点上, ...
- Linux用户登录查看命令总结 - w,who,last,lastlog
Linux用户登录查看命令总结 - w,who,last,lastlog linux shell 747 次阅读 · 读完需要 15 分钟 0 1. 查看登录用户信息 who -H 命令输出 NA ...
- Ansible_使用文件模块将修改文件复制到受管主机
一.描述常用文件模块 1.常用文件模块 模块名称 模块说明 blockinfile 插入.更新或删除由可自定义标记线包围的多行文本块 copy 将文件从本地或远程计算机复制到受管主机上的某个位置.类似 ...
- inux软件安装管理之——dpkg与apt-*详解
inux软件安装管理之--dpkg与apt-*详解 Nosee123关注 0.5922017.09.12 17:47:44字数 3,894阅读 8,565 [Linux软件安装管理系列]- - 传送门 ...