初探自动化测试(爬虫)框架nightmarenightwatch
一、nightmare
Nightmare 是一个基于 Electron 的框架,利用了 Electron 提供的 Browser 的环境,用于 Web 自动化测试和爬虫(其实爬虫这个是大家自己给这个框架加的功能),可以在页面上模拟用户的行为触发一些异步数据加载。
具体的安装使用方法见官网http://www.nightmarejs.org/ 。
小贴士:
二进制的 Electron 依赖有点大,安装时间比较长,可以参照https://blog.tomyail.com/install-electron-slow-in-china/ ,加速electron在国内的下载速度。
这里贴一个nightmare在github上的示例:
var Nightmare = require('nightmare');
var nightmare = Nightmare({ show: true });nightmare.goto('https://duckduckgo.com').type('#search_form_input_homepage', 'github nightmare').click('#search_button_homepage').wait('#zero_click_wrapper .c-info__title a').evaluate(function () {// 该环境中能使用浏览器中的任何对象window/document,并且返回一个promisereturn document.querySelector('#zero_click_wrapper .c-info__title a').href;}).end().then(function (result) {console.log(result);}).catch(function (error) {console.error('Search failed:', error);});
交互常用api
- goto(url[,headers]) url为你要跳转的网站url
- wait(selector) 等待某个dom元素出现
- type(selector[,text]) 在selector元素中输入text文本
- click(selector) 点击某个dom元素
- evaluate(fn[,agr1,agr2,…]) 在客户端注入JS脚本并执行 也就是你自己要封装数据的代码
- end() 执行完成,等待对数据的处理
由于在实际做爬虫项目时,发现框架自带的浏览器有兼容性导致页面无法正常加载,就没有采用这个框架,这里只做简单介绍,有兴趣的同学可以去官网详细了解。
二、nightwatch
什么是Nightwatch?
Nightwatch.js是一个使用Node.js编写的,用于Web应用程序和网站的自动化测试框架,和nightmare.js的不同之处在于它使用W3C WebDriver API来驱动浏览器,以便对DOM元素执行命令和断言。
在大多数情况下,Nightwatch至少需要向WebDriver服务器发送2个请求才能执行命令或声明,第一个请求是在给定CSS选择器(或Xpath表达式)的情况下定位元素的请求,下一个要执行的请求给定元素上的实际命令/声明。
Nightwatch有两种方式去调起浏览器跑测试
1、通过Selenium,调各个浏览器的webDriver唤起浏览器。这个需要安装java、Selenium、webDriver
2、直接通过各家浏览器的webDriver调起对应的浏览器
我选择了第二种,这里就需要去安装的chrome的webDriver,npm i -D chromedriver
具体的安装使用配置方法见官网https://nightwatchjs.org/ 。
在做爬虫项目中的核心代码:
module.exports = {'step one': function(browser) {browser.url('https://www.facebook.com/').waitForElementVisible('#login_form').setValue('#email', 'account').setValue('#pass', 'password').click('#loginbutton').waitForElementVisible('#userNav')},'step two': function(browser) {browser.url('https://www.###.com/search/groups/?q=vaping&epa=SERP_TAB').waitForElementVisible('#BrowseResultsContainer', 5000, 'the page is loaded').timeoutsAsyncScript(600000, function(result) {console.log(result);}).executeAsync(function(successResults, done) {new Promise(function(resolve, reject) {if (/* 异步操作成功 */) {resolve();}}).then(function(){//处理一些数据 data});done(data);//异步操作结束执行}, [successResults], function(results) {//results.value === data;});},'step three': (browser) => {browser.end();}
};
用到的api:
- url([url], [callback]) 检索当前页面的URL或导航到新URL
- waitForElementVisible([using], selector, [timeout],[message]) 元素在指定的时间内可见
- setValue(selector, inputValue, [callback]) 在selector元素中输入inputValue
- click(selector, [callback]) 点击某个dom元素,支持回调
- timeoutsAsyncScript(ms, [callback]) 设置.executeAsync执行的异步脚本在中止之前运行的时间(以毫秒为单位)
- execute(script, args, [callback] ) 在页面中注入一段JavaScript,假定执行的脚本是同步的
- executeAsync( script, args, [callback] ) 在页面中注入一段JavaScript,假定执行的脚本是异步的
在做项目时文档没细看,拿到execute( )就开始编码,导致掉在坑里一直出不来,这里就重点说下execute( ) executeAsync( )这两个api的具体用法。
this.demoTest = function (browser) {browser.execute(function(arg1, arg2,) {//......return data;}, [arg1, arg2,], function(result) {// result.value === data});
}
this.demoTest = function (browser) {browser.executeAsync(function(arg1, arg2, done) {setTimeout(function() {done(data);}, 500);}, [arg1, arg2], function(result) {// result.value === data});
}
execute(script, args, [callback] ) executeAsync( script, args, [callback] ) 这两个api 注入的JavaScript代码是运行在浏览器端的,而浏览器端和客户端的通信很有必要,比如我们可能需要使用在客户端声明的全局变量,以及把在浏览器端得到的数据传递给客户端。
args会以数组的形式把来自客户端的变量作为参数传递给script 函数体作为参数使用,并且该函数体返回的值将返回给客户端。
不同点在于,executeAsync( )执行的是异步脚本,script函数体将done回调作为参数接收,异步操作完成后需要调用该回调。传递给done回调的值将返回给客户端,具体使用方法见上面的示例代码。
切记,切记,如果注入的JavaScript脚本里包含异步操作,一定要使用executeAsync( ),而非execute( )。
后记
这里我只是简单介绍一下nightwatch,更加详细具体的使用还是需要参考[官方文档](https://nightwatchjs.org/](https://nightwatchjs.org/)。
怎么修改浏览器的默认行为(比如弹出的订阅通知弹窗)还尚待解决,欢迎了解的小伙伴伴留言哈。
初探自动化测试(爬虫)框架nightmarenightwatch相关推荐
- 初探Scrapy爬虫框架之百度网页爬取
初探Scrapy爬虫框架之百度网页爬取 scrapy框架及百度网页爬取与保存 一.scrapy框架简介 二.自己初使用的心得体会 1.爬虫之前明确目标 2.scrapy框架的简单使用流程 3.scra ...
- python 爬虫框架_小白学 Python 爬虫(28):自动化测试框架 Selenium (下)
人生苦短,我用 Python 如果我的文章对您有帮助,请关注支持下作者的公众号:极客挖掘机,您的关注,是对小编坚持原创的最大鼓励:) 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Py ...
- python 爬取道客巴巴文档_Python常用的几个高效率的爬虫框架
1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.用这个框架可以轻松爬下来如亚马逊商品信息之类的数 ...
- python爬虫框架排行榜-常用python爬虫框架整理
Python中好用的爬虫框架 一般比价小型的爬虫需求,我是直接使用requests库 + bs4就解决了,再麻烦点就使用selenium解决js的异步 加载问题.相对比较大型的需求才使用框架,主要是便 ...
- python爬虫框架排行榜-哪种Python框架适合你?简单介绍几种主流Python框架
众所周知,Python开发框架大大减少了开发者不必要的重复劳动,提高了项目开发效率的同时,还使得创建的程序更加稳定.目前比较主流的Python框架都有哪些呢?一般大家用的比较多的是Django.Fla ...
- java 爬虫框架_不知道Python爬虫?这篇文章丢给他(内含框架结构)
前言 爬虫即网络爬虫,英文是Web Spider.翻译过来就是网络上爬行的蜘蛛,如果把互联网看作一张大网,那么爬虫就是在大网上爬来爬去的蜘蛛,碰到想要的食物,就把他抓取出来. 我们在浏览器中输入一个网 ...
- python流行的爬虫框架_Python爬虫相关框架
Python爬虫相关框架,Python的爬虫框架就是一些爬虫项目的半成品.比如我们可以将一些常见爬虫功能的实现代码写好,然后留下一些接口,在做不同的爬虫项目时,我们只需要根据实际情况,只需要写少量需要 ...
- 动态IP代理软件有话说:天下爬虫框架皆出Scrapy
针对规模小.抓取数据量小.对抓取速度不比较敏感的爬虫软件, 应用 Requests 能轻轻松松拿下.这种网页爬虫关键作用是抓取网页页面.轻松玩网页页面.假如人们必须抓取网站及其系列产品网上平台,要求网 ...
- 8个高效的Python爬虫框架分享
Python是一门优雅的编程语言,被广泛应用在Web开发.游戏开发.人工智能.云计算开发.大数据开发.数据分析.科学运算.爬虫.自动化运维.自动化测试等领域.Python在各领域的应用最方便的就是使用 ...
- python 爬虫框架_Python常用的几个高效率的爬虫框架
1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中.用这个框架可以轻松爬下来如亚马逊商品信息之类的数 ...
最新文章
- LeetCode简单题之数组的相对排序
- 基带信号传输之信道均衡
- 光遇自动弹琴脚本代码_光遇弹琴辅助软件下载-光遇自动弹琴脚本代码下载v1.0_86PS软件园...
- Linux系统分析之启动流程
- 在linux kernel中netlink的使用示例
- hdu 1003 A + B Problem II 使用整型数组轻松实现大数求和
- 给中国学生的第五封信 – 你有选择的权利
- vscode代码库登录配置_VSCode 配置 Sonar Lint支持代码检查提效
- 为什么拙劣的软件也会成功?
- SpringBoot文件上传大小设置(yml中配置)
- GitHub如何在README.md文件中插入图片
- Linux搜寻文件或目录命令解析
- 2台mysql集群_如何安装配置基于2台服务器的MySQL集群
- Qt Designer设计 UI 文件并调用
- Web Server与App Server
- CentOS7增加或修改SSH端口号
- c4isr系统有无服务器,什么是C4ISR系统?
- 网络安全 Windows用户密码破解 使用破解MD5值的在线网站和监听工具Cain
- DropdownMenu 下拉菜单的使用
- [sensorhub]MT6752/32平台sensor hub KK和L版本配置方法