Selenium自动化不为人知的秘密武器


大家都知道大名鼎鼎的Selenium,是一个用于Web应用程序自动化测试工具。可以帮助测试人员解决回归测试和多浏览器兼容性测试的问题,通过自动化脚本来提升测试效率,今天本文来介绍下Selenium的另外的一个应用小场景,网页内容爬取。
说到爬虫,大家应该并不陌生,Python下面用requests库就可以实现,但是如果你对接口测试只是不是很熟悉,用Selenium来简单爬取下页面上的内容也是一个很便捷的方案,毕竟Selenium入门上手还是很简单的。
Selenium环境不会搭建的小伙伴请自行百度下环境搭建的步骤,本文不对基础环境搭建进行讲解哦。

下面我们以Testfan社区(ask.testfan.cn)为例,介绍下如何使用Selenium自动化工具实现简单的爬虫功能,我们先用Python脚本实现下,Java代码类似,主要借鉴代码逻辑思路即可。我们的需求是把testfan社区文章模块下的前面N页的文章爬取下来(文章标题和每个文章的url,文章模块的地址是http://ask.testfan.cn/articles)

首先我们分析下testfan社区文章模块的url格式,我先随便翻几页看看:

上面的图,这是第2页

上面的图,这是第5页

分析上面2个页面的url,我们发现http: // ask.testfan.cn /articles?page= 2  //此处的page=2是控制的翻页的页码,也就是说如果我想看第1的文章,那我把page=2改成page=1就可以了,以此类推

接下来我们分析下每页中的文章标题在dom里的位置和结构,我们想获取每个文章的标题文本和文章的url链接,此处的定位方式很多,自己练习下,本文代码案例采用css定位方式。

咱们接着说,css去描述完文章标题所在的链接元素是这样的(是不是很简洁,一下子能定位到当前页的几十个文章):".title > a",然后获取链接元素的href属性和元素的文本信息即可。

剩下的就是循环打印当前页每个文章的标题和URL并保存到文件中了,当搞定当前页面后,更新下一个页面的URL再继续就可以了。

代码实现逻辑参考如下:

有的同学会说那Selenium基于实体浏览器基于页面回放可能爬取速度会比较慢一些,这里推荐2个虚拟浏览器(无界面的), HtmlUnit和PhantomJS,他们都不是真正的浏览器,运行时不会渲染页面显示内容,但是支持页面元素查找,js的执行等;由于不进行css和gui渲染,运行效率要比真实的浏览器要快很多。

那下面这个代码案例就是Java脚本配合HtmlUnitDriver提高运行效率后代码,逻辑和上面的Python+FF浏览器是一样的,大家自行参考逻辑即可

写在最后,爬虫有风险,爬取须谨慎!

作  者:Testfan 楼管家
出  处:微信公众号:自动化软件测试平台
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接
原文地址:https://www.cnblogs.com/testfan2019/p/12401073.html