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 相关文章推荐
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
scrapy-redis的安装部署步骤讲解
Feb 27 Python
PyQt5实现简易计算器
May 30 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
Python pip 安装与使用(安装、更新、删除)
Oct 06 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
python 调试冷知识(小结)
Nov 11 Python
pyecharts调整图例与各板块的位置间距实例
May 16 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
PyTorch 导数应用的使用教程
Aug 31 Python
分享Python获取本机IP地址的几种方法
Mar 17 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 adodb介绍
2009/03/19 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
详解Python编程中包的概念与管理
2015/10/16 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
一文读懂Python 枚举
2020/08/25 Python
python3实现飞机大战
2020/11/29 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
马来西亚最好的婴儿商店:Motherhood
2017/09/14 全球购物
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
绿化先进工作者事迹材料
2014/01/30 职场文书
银行委托书范本
2014/04/04 职场文书
竞选卫生委员演讲稿
2014/04/28 职场文书
大型营销活动计划书
2014/04/28 职场文书
广播节目策划方案
2014/05/23 职场文书
党员个人党性分析材料
2014/12/18 职场文书
委托书格式范文
2015/01/28 职场文书
2015年检验科工作总结
2015/04/27 职场文书
安全生产奖惩制度
2015/08/06 职场文书
创业计划书之酒店
2019/08/30 职场文书
导游词之五台山
2019/10/11 职场文书
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技