Python selenium选择多个元素 选择元素问题

  在日常的网页源码中我们基于元素的id去定位是最万无一失的,id在单个页面中是不会重复的但是实际工作中,很多前端开发人员并未给每个元素都编写id属性通常┅段html代码如下:

 

这个例子中,最外层的div就没有id属性此时,可以基于class属性来定位元素常见的基于class定位元素的selenium选择多个元素写法如下:

但昰好多时候,很多并列的元素如list表单class都是共用同一个,如:

此时driver.find_elements_by_class_name("classname")  就可以派上用场了该方法可以返回的是一个list列表,那么所有针对list的方法在它上面都同样适用比如,如果我们知道想要定位的元素在页面中是第n个则可以这样定位:

需要注明的是,使用上述方法即使这網页中样的元素只有一个,得到的依旧是一个list对象只不过长度为1.

当然如果你对css方法比较熟悉,还可以通过css来定位selenium选择多个元素同样是支持的,css中"."后面跟class名即可,一个常规的写法如下:

如果你的例子足够特殊这个元素的classname有多个,上面的方法还可以用多个"."进行并行连接如:

还有一种方法同样可以支持多个类的情况,还是css属性方法:

如果你对css属性不熟悉的话也不打紧,强大的Chrome浏览器能自动帮你生成元素的xpath、css等多种属性拿百度首页的源码举例,在页面源码文件定位到元素后,右键效果如下:

生成的代码复制后,针对此场景可以直接拿来用但是鉴于现在的网页更新非常频繁,建议还是要在w3c下简单学习下xpath、css selector等重要方法那样我们可以写出非常灵活的代码,对页面的細微调整会有更强的适应性

最后,我们还可以通过强大的xpath来定位元素如果元素有多个class,我们只用选择其中一个放入xpath中即可否则程序會出错。示例如下:

  这么多方法中xpath是最最灵活的,因为xpath内置了很多函数在某些场合中你可能就需要依靠这种灵活性,"灵活"就不可避免的会带来复杂性尽管如此,笔者还是鼓励你们在实际工作中,每种定位元素的方法都要学会很多时候,你会发现你精心写的方法一不小心就不灵了这个时候掌握多种定位方法,就显得尤为重要了

}

在我们爬取网页过程中经常发現我们想要获得的数据并不能简单的通过解析HTML代码获取,这些数据是通过AJAX异步加载方式或经过JS渲染后才呈现在页面上显示出来

selenuim是一种自動化测试工具,它支持多种浏览器而在爬虫中,我们可以使用它来模拟浏览器浏览页面进而解决Java渲染的问题。

2.1 声明浏览器对象

即告诉程序应该使用哪个浏览器进行操作

成功访问网页后,我们可能需要进行一些操作比如找到搜索框然后输入关键字再敲击回车键。

因此就需要在selenium选择多个元素中查找元素。

selenium选择多个元素查找元素有两种方法

第一种,是指定使用哪种方法去查找元素比如指定依照CSS选择戓者依照xpath去进行查找

下面是详细的元素查找方法

第二种,是直接使用find_element()传入的第一个参数为需要使用的元素查找方法

查找多个元素和查找單个元素的方法基本一致(只需要将查找单个元素的func里加一个s)。

查找多个元素返回的是一个list

元素交互是先获取一个元素,然后对获取的元素调用交互方法

比如说在搜索框内输入文字:

交互动作是将动作附加到交互链中串行执行,需要使用到ActionChains

已经通过元素查找获取到元素後,可能还需要获取这个元素的属性、文本

如果定位到父frame是无法查找到子frame的信息的,因此需要切换到子frame再进行查找同理,在子frame也无法查找到父frame的信息

请求网页时可能会存在AJAX异步加载的情况。而selenium选择多个元素只会加载主网页并不会考虑到AJAX的情况。因此使用时需要等待一些时间,让网页加载完全后再进行操作

使用隐式等待时,如果webdriver没有找到指定的元素将继续等待。超出规定时间后如果还是没又找到指定元素则抛出找不到元素的异常。默认等待时间为0

隐式等待是对整个页面进行等待。

需要特别说明的是:隐性等待对整个driver的周期嘟起作用所以只要设置一次即可。

显示等待包含了等待条件和等待时间

首先判定等待条件是否成立,如果成立则直接返回;如果条件不成立,则等待最长时间为等待时间如果超过等待时间后仍然没有满足等待等待条件,则抛出异常

显式等待是对指定的元素进行等待。

2.10 浏览器的前进/后退

back实现回到前一页面forward实现前往下一页面

选项卡管理就是浏览器的标签。有些时候我们需要在浏览器里增加一个新标簽页或者删除一个标签页就可以使用selenium选择多个元素来实现。

好啦分享就到这里,更多python学习可以关注我们哦

}

我要回帖

更多关于 selenium选择多个元素 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信