Python selenium根据class定位页面元素的方法


Posted in Python onFebruary 26, 2019

在日常的网页源码中,我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的。但是实际工作中,很多前端开发人员并未给每个元素都编写id属性。通常一段html代码如下:

<div class="sui-tips s-isindex-wrap sui-tips-exceedtipnews" style="display: none; width: auto;">
<div class="sui-tips-arrow" style="left: 15px;"><em></em></div>
<div class="sui-tips-body">今天召唤我太多次啦,<br>明天再来调教小度吧!`(*∩_∩*)′</div>
</div>

这个例子中,最外层的div就没有id属性,此时,可以基于class属性来定位元素。常见的基于class定位元素的selenium写法如下:

一、driver.find_element_by_class_name("classname")

但是好多时候,很多并列的元素如list表单,class都是共用同一个,如:

Python selenium根据class定位页面元素的方法

此时driver.find_elements_by_class_name("classname") 就可以派上用场了,该方法可以返回的是一个list列表,那么所有针对list的方法在它上面都同样适用。比如,如果我们知道想要定位的元素在页面中是第n个,则可以这样定位:

二、driver.find_elements_by_class_name("classname")[n] (注意:是elements,不是element)

需要注明的是,使用上述方法,即使这网页中样的元素只有一个,得到的依旧是一个list对象,只不过长度为1.

当然如果你对css方法比较熟悉,还可以通过css来定位,selenium同样是支持的,css中,"."后面跟class名即可,一个常规的写法如下:

三、driver.find_element_by_css_selector('.dtb-style-1').click()

如果你的例子足够特殊,这个元素的classname有多个,上面的方法还可以用多个"."进行并行连接。如:

driver.find_element_by_css_selector('.dtb-style-1.table-dragColumns').click()

还有一种方法同样可以支持多个类的情况,还是css属性方法:

driver.find_element_by_css_selector("[class='dtb-style-1 table-dragColumns']") 用空格分隔即可。

如果你对css属性不熟悉的话,也不打紧,强大的Chrome浏览器能自动帮你生成元素的xpath、css等多种属性。拿百度首页的源码举例,在页面源码文件,定位到元素后,右键,效果如下:

Python selenium根据class定位页面元素的方法

生成的代码复制后,针对此场景可以直接拿来用,但是鉴于现在的网页更新非常频繁,建议还是要在w3c下简单学习下xpath、css selector等重要方法,那样我们可以写出非常灵活的代码,对页面的细微调整会有更强的适应性。

最后,我们还可以通过强大的xpath来定位元素,如果元素有多个class,我们只用选择其中一个放入xpath中即可,否则程序会出错。示例如下:

四、driver.find_element_by_xpath('//div[@class="u_sp"]/a[1]').click()

这么多方法中,xpath是最最灵活的,因为xpath内置了很多函数,在某些场合中你可能就需要依靠这种灵活性,"灵活"就不可避免的会带来复杂性。尽管如此,笔者还是鼓励你们,在实际工作中,每种定位元素的方法都要学会,很多时候,你会发现你精心写的方法一不小心就不灵了,这个时候掌握多种定位方法,就显得尤为重要了。

有了这些技能,从此在python selenium的世界里,基于class属性定位元素将显得so easy。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用python代码写的12306订票代码
Dec 20 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
python利用正则表达式提取字符串
Dec 08 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
Python 列表理解及使用方法
Oct 27 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
解决django后台样式丢失,css资源加载失败的问题
Jun 11 Python
django之对FileField字段的upload_to的设定方法
Jul 28 Python
python内存管理机制原理详解
Aug 12 Python
python KNN算法实现鸢尾花数据集分类
Oct 24 Python
python等差数列求和公式前 100 项的和实例
Feb 25 Python
python语言中pandas字符串分割str.split()函数
Aug 05 Python
python实现诗歌游戏(类继承)
Feb 26 #Python
Python实现简单查找最长子串功能示例
Feb 26 #Python
基于Python实现用户管理系统
Feb 26 #Python
python selenium firefox使用详解
Feb 26 #Python
Django实现学员管理系统
Feb 26 #Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 #Python
Django实现学生管理系统
Feb 26 #Python
You might like
php jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
PHP中的array数组类型分析说明
2010/07/27 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
javascript 面向对象编程基础 多态
2009/08/21 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
JavaScript 变量作用域分析
2011/07/04 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
Python 文件读写操作实例详解
2014/03/12 Python
Python深入学习之对象的属性
2014/08/31 Python
Python的时间模块datetime详解
2017/04/17 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
2020/01/08 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
新电JAVA笔试题目
2014/08/31 面试题
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
中间件的定义
2016/08/09 面试题
计划生育宣传标语
2014/06/21 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
项目投资意向书范本
2015/05/09 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server
python在package下继续嵌套一个package
2022/04/14 Python