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 自动化将markdown文件转成html文件的方法
Sep 23 Python
Python实现的寻找前5个默尼森数算法示例
Mar 25 Python
python 多维切片之冒号和三个点的用法介绍
Apr 19 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
如何在Cloud Studio上执行Python代码?
Aug 09 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
python return逻辑判断表达式实现解析
Dec 02 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
Python如何使用队列方式实现多线程爬虫
May 12 Python
如何实现一个python函数装饰器(Decorator)
Oct 12 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相当简单的分页类
2008/10/02 PHP
php生成zip文件类实例
2015/04/07 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
js Flash插入函数免激活代码
2009/03/31 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
jquery检测input checked 控件是否被选中的方法
2014/03/26 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
举例讲解Python中装饰器的用法
2015/04/27 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
浅谈Python中的私有变量
2018/02/28 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
django加载本地html的方法
2018/05/27 Python
python中字符串的操作方法大全
2018/06/03 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
python字符串的拼接方法总结
2019/11/18 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
python与js主要区别点总结
2020/09/13 Python
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
网络专业学生个人的自我评价
2013/12/16 职场文书
化学教育专业求职信
2014/07/08 职场文书
小学生清明节演讲稿
2014/09/05 职场文书
2015年药店工作总结
2015/04/20 职场文书
婚礼家长致辞
2015/07/27 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis