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(Tornado)模拟登录小米抢手机
Nov 12 Python
python中global与nonlocal比较
Nov 21 Python
python实现马耳可夫链算法实例分析
May 20 Python
Python元字符的用法实例解析
Jan 17 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
Python八皇后问题解答过程详解
Jul 29 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
python连接PostgreSQL过程解析
Feb 09 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 Python
序列化Python对象的方法
Aug 01 Python
图解Python中深浅copy(通俗易懂)
Sep 03 Python
解决Python字典查找报Keyerror的问题
May 26 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和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
this和执行上下文实现代码
2010/07/01 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
使用Javascript简单计算器
2018/11/17 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
JavaScript 面向对象基础简单示例
2019/10/02 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
Python类属性与实例属性用法分析
2015/05/09 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
澳大利亚领先的美容护肤品零售商之一:SkincareStore
2018/01/22 全球购物
面向对象设计的原则是什么
2013/02/13 面试题
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
2013的个人自我评价
2013/12/26 职场文书
初中学生期末评语
2014/04/24 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
买房协议书范本
2014/10/23 职场文书
教师求职信怎么写
2015/03/20 职场文书
导游词幽默开场白
2019/06/26 职场文书
导游词之井冈山
2019/11/20 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
win10清理dns缓存
2022/04/19 数码科技
使用Apache Camel表达REST服务的方法
2022/06/10 Servers
MySQL数据库表约束讲解
2022/06/21 MySQL