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实现将doc转化pdf格式文档的方法
Jan 19 Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
python如何生成网页验证码
Jul 28 Python
对python中Librosa的mfcc步骤详解
Jan 09 Python
Django框架组成结构、基本概念与文件功能分析
Jul 30 Python
Python3 使用pillow库生成随机验证码
Aug 26 Python
Python 列表的清空方式
Jan 13 Python
python属于跨平台语言码
Jun 09 Python
python如何写try语句
Jul 14 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
Python中qutip用法示例详解
Oct 02 Python
python中requests库+xpath+lxml简单使用
Apr 29 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设计模式之观察者模式的应用详解
2013/05/21 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
BootStrap 动态添加验证项和取消验证项的实现方法
2016/09/28 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
Python实现获取操作系统版本信息方法
2015/04/08 Python
详解详解Python中writelines()方法的使用
2015/05/25 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
Python进阶之递归函数的用法及其示例
2018/01/31 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
美国校服网上商店:French Toast
2019/10/08 全球购物
学习nginx基础知识
2021/09/04 Servers