Selenium元素定位的几种方式
一、通过id查找
例:<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
element = driver.find_element_by_id("kw")
二、通过name查找
例:<input name="cheese" type="text"/>
cheese = driver.find_element_by_name("cheese")
三、通过classname查找
例:<div class="cheese"><span>Cheddar</span></div>
cheeses = driver.find_elements_by_class_name("cheese")
四、通过标签名查找
例:<iframe src="..."></iframe>
frame = driver.find_element_by_tag_name("iframe")
五、通过链接文本查找
例:<a href="http://www.baidu.com">转到百度</a>
ele = driver.find_element_by_link_text("转到百度")
注:有的时候,链接的文本很长,我们甚至只需要通过部分文本去找到该链接元素
只要这个链接文本是唯一的就行
六、通过CSS选择器查找
eles = driver.find_element_by_css_selector('#choose_car option')
基本用法:
|
方式 |
用法 |
举例 |
描述 |
|
根据class查找 |
.class |
.intro |
查找class=”intro”元素 |
|
根据id查找 |
#id |
#firstname |
查找id=”firstname”的元素 |
|
根据标签名查找 |
tagname |
div |
查找<div>元素 |
|
根据属性查找 |
[attribute] |
[target] |
查找具有”target”属性的元素 |
|
[attribute=value] |
[target=_blank] |
查找包含target=”_blank”的元素 |
|
|
[attribute^=value] |
[href^=”https”] |
查找包含href属性,且该属性的值以”https”开头的元素 |
|
|
[attribute$=value] |
[href$=”.pdf”] |
查找包含href属性,且该属性的值以”.pdf”结尾的元素 |
|
|
[attribute*=value] |
[href*=”abc”] |
查找包含href属性,且该属性的值包含“abc”的元素 |
高级用法:
|
用法 |
举例 |
描述 |
|
后代元素选择器 |
div p |
选择所有在<div>里面的<p> |
|
子元素选择器 |
div>p |
选择所有<div>的<p>子元素 |
|
组选择器,同时选择多个元素 |
<div>,<p> |
同时选择所有的<div>元素和<p>元素 |
|
相邻兄弟元素 |
<div>+<p> |
选择所有<div>后面紧跟的<p>元素 |
|
兄弟元素 |
<div>~<p> |
选择所有<div>元素后面的<P>元素(不一定要紧跟) |
|
:empty |
p:empty |
选择没有子节点(包括文本)的<p>元素 |
|
:first-child |
p:first-child |
选择所有是 父元素第一个元素的<p>元素 |
|
:first-of-type |
p:first-of-type |
选择所有是 父元素第一个<p>元素的<p>元素 |
|
:last-child |
p:last-child |
选择所有是其父元素最后一个元素的<p>元素 |
|
:last-of-type |
p:last-of-type |
选择所有是其父元素最后一个<p>元素的<p>元素 |
|
:nth-child(n) |
p:nth-child(2) |
选择所有是其父元素第二个元素的<p>元素 |
|
:nth-of-type(n) |
p:nth-of-type(2) |
选择所有是其父元素的第二个<p>元素的<p>元素 |
|
:nth-last-child(n) |
p:nth-last-child(2) |
选择所有是其父元素倒数第二个元素的<p>元素 |
|
:nth-last-of-type(n) |
p:nth-last-of-type |
选择所有是其父元素倒数第二个<p>元素的<p>元素 |
|
:only-child |
p:only-child |
选择所有是其父元素唯一一个子元素的<p>元素 |
|
:only-of-type |
p:only-of-type |
选择所有是其父元素唯一一个<P>子元素的<p>元素 |
|
:not(selector) |
:not(p) |
选择所有不是<p>元素的元素 |
七、通过Xpath查找
eles = food.find_elements_by_xpath('./p')
基本用法:
|
用法 |
举例 |
描述 |
|
绝对路径(/) |
/html/body/div/p |
表示html文档中的p节点,xpath路径表示了元素的位置 |
|
相对路径(//) |
//footer//p |
表示footer元素中所有的后代P类型元素 |
|
混合使用 |
//footer/div/p |
表示html文档中footer元素下的div元素下的p元素 |
|
根据属性选择 |
//*[@style] |
表示选择HTML文档下所有包含style属性的元素 |
|
//p[@spec='len2'] |
选择所有具有spec 属性且值为“len2” 的p元素 |
|
|
//a[contains(@href,'51job.com')] |
选择所有具有href属性,且该属性的值包含“51job.com”的a元素 |
|
|
//a[starts-with(@href,'http://big5.51job')] |
表示属性href以“http://big5.51job”开头 |
高级用法:
|
方式 |
用法 |
举例 |
描述 |
|
子元素选择器 |
根据下标获取(下标从1开始) |
//div[@id='food']/p[1] |
获取第一个p子元素 |
|
倒数索引 |
//div[@id='food']/*[last()](倒数第一个) //div[@id='food']/*[last()-1](倒数第二个) //div[@id='food']/*[last()-2](倒数第三个) |
last()代表倒数第一个元素 |
|
|
postion():代表元素的位置 |
//div[@id='food']/*[position()=2] |
表示第二个元素 |
|
|
//div[@id='food']/[position()=last()] |
表示最后一个元素 |
||
|
//div[@id='food']/[position()=last()-2] |
表示倒数第三个元素 |
||
|
//div[@id='food']/[position()>=last()-2] |
表示最后三个元素 |
||
|
组选择器 |
用竖线隔开 |
//p | //button |
等价于css中的p, button |
|
相邻兄弟选择器 |
following-sibling:: |
//*[@id=’food’]/following-sibling::div |
选择id=food节点的相邻兄弟div元素 |
|
preceding-sibling:: |
//*[@id=’food’]/preceding-sibling::div |
选择id=food节点的前面的兄弟P元素 |
元素的相对定位:
如:
food = driver.find_element_by_id("food")
eles = food.find_elements_by_xpath('./p')
如果不加点 ,eles = food.find_elements_by_xpath('/p') 与 eles = driver.find_elements_by_xpath('/p') -----这两个方式效果是一样的
Selenium元素定位的几种方式的更多相关文章
- 史上最全!Selenium元素定位的30种方式
Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制,我在这里将对各种元素定位方式进行总结归纳一下. 这里将统一使用百度 ...
- selenium(1)-详细解读元素定位的八种方式
安装selenium和下载webdriver 安装selenium pip install selenium pip install selenium -U (判断是否有最新版本) 下载drive ...
- Selenium3 + Python3自动化测试系列二——selenium元素定位
一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...
- selenium元素定位之css选择器
在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...
- selenium元素定位陷阱规避
为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...
- UI自动化学习笔记- Selenium元素定位及元素操作
一.元素定位 1. 如何进行元素定位? 元素定位就是通过元素的信息或元素层级结构来定位元素的 2.定位工具 浏览器开发者工具 3.元素定位方式 Selenium提供了八种定位元素方式 id name ...
- 自动化测试基础篇--Selenium元素定位
摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...
- android 定位的四种方式
[原文] 开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面总结了一下网络中现有对于介绍android定位的4种方式,希望对大家有帮助: android 定 ...
- 网站开发进阶(十七)Html元素隐藏的几种方式
Html元素隐藏的几种方式 隐藏Html元素的方法最常用的方法有css的display:none,一种方法两种实现方式,感兴趣的朋友可以了解下. 1.使用css style="display ...
随机推荐
- 【转载】数字IC设计流程及开发工具
原文链接:https://www.zhihu.com/question/28322269/answer/42048070 Design Flow &lt;img src="h ...
- 一、docker 入坑(win10和Ubuntu 安装)
前言 终究还是绕不过去了,要学的知识真的是太多了,好在我们还有时间,docker 之前只闻其声,不曾真正的接触过,现在docker 越来越火,很多公司也都开始使用了.所以对于我们程序员而言,又得修炼一 ...
- kubeadm安装依赖镜像
使用kubeadm安装的时候如果不能翻墙下载镜像是个很大的问题,这里自己把需要的镜像下载push下留作不时之需 docker pull davygeek/kube-proxy:v1.14.2 dock ...
- APIO2019简要题解
Luogu P5444 [APIO2019]奇怪装置 看到这种题,我们肯定会想到\((x,y)\)一定有循环 我们要找到循环节的长度 推一下发现\(x\)的循环节长为\(\frac{AB}{B+1}\ ...
- docker学习之路-build asp.net core 2.2产生 warning MSB3245: Could not resolve this reference.错误的解决办法
在docker build的时候有时我们可以直接使用dotnet publish来发布,但是如果用docker构建镜像的时候却会出现下面的错误: 解决办法:https://stackoverflow. ...
- k8s+jenkins(DevOps全流程)
k8s集群搭建是参照别人的,链接找不到了.需要5台机器,3主2从,主最少搭建3台才能实现高可用. 流程jenkins打包代码 >> 把打包代码生成镜像 >> 备份镜像库旧镜像 ...
- 2019 哔哩哔哩java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.哔哩哔哩等公司offer,岗位是Java后端开发,因为发展原因最终选择去了哔哩哔哩,入职一年时间了,也成为了面 ...
- python爬虫User Agent用户代理
UserAgent简介 UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA.它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及 ...
- 什么是B+树
什么是B+树呢?在说B+树之前我们先了解一下为什么要有B树,其实这些树最开始都是为了解决某种系统中,查询效率低的问题.B树其实最开始源于的是二叉树,二叉树是只有左右孩子的树,当数据量越大的时候,二叉树 ...
- python 常用的标准库
glob模块 提供了一个函数,用于匹配符合要求的文件: import glob list=glob.glob("*.py") #匹配当前目录下的所有匹配的文件名(包括后缀),以 ...