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中对list去重的多种方法
Sep 18 Python
python读取word文档的方法
May 09 Python
整理Python 常用string函数(收藏)
May 30 Python
Python selenium文件上传方法汇总
Nov 19 Python
Python面向对象特殊成员
Apr 24 Python
Python内置函数 next的具体使用方法
Nov 24 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
Python unittest模块用法实例分析
May 25 Python
Python实现栈和队列的简单操作方法示例
Nov 29 Python
PyTorch 对应点相乘、矩阵相乘实例
Dec 27 Python
Python使用进程Process模块管理资源
Mar 05 Python
Python基础之操作MySQL数据库
May 06 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
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
Javascript-Mozilla和IE中的一个函数直接量的问题
2007/01/09 Javascript
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
浅谈django中的认证与登录
2016/10/31 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
浅谈python3中input输入的使用
2019/08/02 Python
Pytorch之parameters的使用
2019/12/31 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
Python 中如何使用 virtualenv 管理虚拟环境
2021/01/21 Python
幼儿园秋游感想
2014/03/12 职场文书
大学班级学风建设方案
2014/05/01 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript