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编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
Python实现字符串与数组相互转换功能示例
Sep 22 Python
详解python里使用正则表达式的全匹配功能
Oct 19 Python
python matplotlib中文显示参数设置解析
Dec 15 Python
python奇偶行分开存储实现代码
Mar 19 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 Python
Puppeteer使用示例详解
Jun 20 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
wxpython绘制圆角窗体
Nov 18 Python
tensorflow查看ckpt各节点名称实例
Jan 21 Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 04 Python
python time.strptime格式化实例详解
Feb 03 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自动注册登录验证机制实现代码
2011/12/20 PHP
php数字游戏 计算24算法
2012/06/10 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
jquery的键盘事件修改代码
2011/02/24 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
Python的字典和列表的使用中一些需要注意的地方
2015/04/24 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
python对一个数向上取整的实例方法
2020/06/18 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
安全教育心得体会
2013/12/29 职场文书
爸爸的花儿落了教学反思
2014/02/20 职场文书
社区网格化管理实施方案
2014/03/21 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书