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获得linux下所有挂载点(mount points)的方法
Apr 29 Python
简单介绍Python中的round()方法
May 15 Python
windows10系统中安装python3.x+scrapy教程
Nov 08 Python
浅谈Python对内存的使用(深浅拷贝)
Jan 17 Python
对Python协程之异步同步的区别详解
Feb 19 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
elasticsearch python 查询的两种方法
Aug 04 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
序列化Python对象的方法
Aug 01 Python
python用分数表示矩阵的方法实例
Jan 11 Python
python中的unittest框架实例详解
Feb 05 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 setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
js简单时间比较的方法
2016/08/02 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
python实现批量修改服务器密码的方法
2019/08/13 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
Python项目打包成二进制的方法
2020/12/30 Python
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
应届毕业生个人求职自荐信
2014/01/06 职场文书
石油大学毕业生自荐信
2014/01/28 职场文书
优秀学生获奖感言
2014/02/15 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
2016年小学“公民道德宣传日”活动总结
2016/04/01 职场文书
Python pandas之求和运算和非空值个数统计
2021/08/07 Python
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js