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中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 Python
python实现数据库跨服务器迁移
Apr 12 Python
Python面向对象类继承和组合实例分析
May 28 Python
Python控制键盘鼠标pynput的详细用法
Jan 28 Python
python tkinter组件摆放方式详解
Sep 16 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
Oct 16 Python
详解python中*号的用法
Oct 21 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
Python利用机器学习算法实现垃圾邮件的识别
Jun 28 Python
python的html标准库
Apr 29 Python
详解OpenCV获取高动态范围(HDR)成像
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网站提速三大“软”招
2006/10/09 PHP
php去除HTML标签实例
2013/11/06 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
JS 继承实例分析
2008/11/04 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
python实现清屏的方法
2015/04/30 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
建筑工程专业学生的自我评价
2013/12/25 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
土建施工员岗位职责
2014/07/16 职场文书
合理化建议书
2015/02/04 职场文书
计划生育目标责任书
2015/05/09 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle