,我们知道很多时候爬虫也不是万能的,这个时候就需要我们的自动化测试框架了。,于是Selenium就应运而生了,它可以算的上是自动化测试框架中的佼佼者,因为它解决了大多数用来爬取页面的模块的一个永远的痛,那就是Ajax异步加载 。今天将给大家详解如何用Selenium爬取数据,并最后附上一个真实的案例。,Selenium是一个web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏 。,chromedriver是一个驱动Chrome浏览器的驱动程序,使用他才可以驱动浏览器。当然针对不同的浏览器有不同的driver。以下列出了不同浏览器及其对应的driver:,安装配置chromedriver:https://blog.csdn.net/weixin_43901998/article/details/88087832,安装Selenium:,安装好浏览器后,将浏览器驱动放在浏览器同级目录下,这样前期工作就算都预备好了。,要注意,find_element是获取第一个满足条件的元素。find_elements是获取所有满足条件的元素。,操作输入框:分为两步。,第一步:找到这个元素。,第二步:使用send_keys(value),将数据填充进去,使用clear方法可以清除输入框中的内容,操作checkbox,因为要选中checkbox标签,在网页中是通过鼠标点击的。因此想要选中checkbox标签,那么先选中这个标签,然后执行click事件。,操作按钮,操作按钮有很多种方式。比如单击、右击、双击等。这里讲一个最常用的。就是点击。直接调用click函数就可以了。,选择select,select元素不能直接点击。因为点击后还需要选中元素。这时候selenium就专门为select标签提供了一个类selenium.webdriver.support.ui.Select。将获取到的元素当成参数传到这个类中,创建这个对象。以后就可以使用这个对象进行选择了[1]。,切换iframe,我们知道网页中有一种节点叫作 iframe,也就是子 Frame,相当于页面的子页面,它的结构和外部网页的结构完全一致。Selenium打开页面后,默认是在父级 Frame 里面操作,而此时如果页面中还有子 Frame,Selenium是不能获取到子 Frame 里面的节点的。这时就需要使用 switch_to.frame 方法来切换 Frame。,
,接下来通过豆瓣模拟登录来切换iframe,示例如下:,有时候在页面中的操作可能要有很多步,那么这时候可以使用鼠标行为链类ActionChains来完成。比如现在要将鼠标移动到某个元素上并执行点击事件。,还有更多的鼠标相关的操作。,豆瓣模拟登录(定位元素,切换iframe,以及行为链操作)。,
,
,获取所有的cookie,根据cookie的name获取cookie,删除某个cookie,现在的网页越来越多采用了 Ajax 技术,这样程序便不能确定何时某个元素完全加载出来了。如果实际页面等待时间过长导致某个dom元素还没出来,但是你的代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。为了解决这个问题。所以 Selenium 提供了两种等待方式:一种是隐式等待、一种是显式等待。,一些其他的等待条件,更多条件请参考:http://selenium-python.readthedocs.io/waits.html,有时候窗口中有很多子tab页面。这时候肯定是需要进行切换的。selenium提供了一个叫做switch_to_window来进行切换,具体切换到哪个页面,可以从driver.window_handles中找到。,下面我们用企鹅电竞为案例,演示一下如何使用Selenium爬取数据。,1、打开官网首页:通过分析页面知道全部直播的信息储存在ul(class='livelist-mod resize-list-container-280-livelist-live)下面的li里面。,
,但是通过测试可以发现这个页面瀑布流布局,他不需要翻页,需要滚到页面底部加载更多数据。所以:,2、我们要获取的是主题(title),界面图片链接(pic),主播名(name),人气(popu),类型(types)。,3、数据提取,这里我们把数据保存到一个csv文件中。,4、运行程序,开始:,
,结尾:,
,然后我们看下csv文件:,
,成功爬取到了想要的数据。
© 版权声明
文章版权归作者所有,未经允许请勿转载。