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实现问号表达式(?)的方法
Nov 27 Python
Python读写配置文件的方法
Jun 03 Python
python利用装饰器进行运算的实例分析
Aug 04 Python
python中logging包的使用总结
Feb 28 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
Dec 04 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 Python
itchat-python搭建微信机器人(附示例)
Jun 11 Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 Python
Pytorch的mean和std调查实例
Jan 02 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
python复合条件下的字典排序
Dec 18 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
PHP parse_url 一个好用的函数
2009/10/03 PHP
php编写一个简单的路由类
2011/04/13 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
Add Formatted Text to a Word Document
2007/06/15 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
Vue keep-alive实践总结(推荐)
2017/08/31 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
详解javascript appendChild()的完整功能
2018/08/18 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
Django 导出 Excel 代码的实例详解
2017/08/11 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
如何通过python检查文件是否被占用
2020/12/18 Python
Pandas的数据过滤实现
2021/01/15 Python
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
幼儿园保育员岗位职责
2014/04/13 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
信访维稳工作汇报
2014/10/27 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
教师节主持词开场白
2015/05/29 职场文书
民政局未婚证明
2015/06/15 职场文书
2016新年晚会开场白
2015/12/03 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS