新闻资讯

新闻资讯 产品更新

使用Puppeteer玩转Headless Chrome

编辑:admin     时间:2017-10-20

Chrome 在 59 版本时推出了 Headless Chrome(无界面 Chrome),可用于自动化测试和不需要可视化用户界面的服务器。在之前做这些事情的是 PhantomJS,不过 PhantomJS 是基于 WebKit 的工具,而 Headless Chrome 是基于 Blink 的。

Headless Chrome 由于能和 Chrome Devtools 进行无缝的交互,因此一经推出就受到广大前端开发者的欢迎,Puppeteer 就是Chrome团队推出的基于 Headless Chrome 开发的自动化工具,它可以用来做UI自动化测试,不过,它能做的比测试要多的多,下面就让我们来看一下它能做哪些事情。

对程序进行测试有很多方法。从微型的单元测试开始,到更大型的用户界面测试。Puppeteer 属于后一种。

Puppeteer 宣称自己是一个 Node 库,它提供了一组高级 API,通过 DevTools 协议控制无界面 Chrome。

Puppeteer Github地址:

https://github.com/GoogleChrome/puppeteer

简而言之,基于 Chrome Devtools 协议,Puppeteer 可以让用户界面测试变得很轻松。


什么是 Puppeteer?


Puppeteer 是一个用户界面自动化工具。它通过使用 Chrome 无界面模式和 DevTools 协议的组合来实现这一点。正如上面的引用所言,它使用一个更上层的 API 来封装其功能,让用户界面测试自动化变得轻而易举。

人们基于 Chrome DevTools 协议开发了一系列 Google Chrome 工具。你在浏览器中点击更多工具 ->开发工具,打开的就是 DevTools。DevTools 协议是 DevTools 的动力基础,我们现在可以使用 Chrome 中的 DevTools 来做更多的事情。

无界面 Chrome 是没有 Chrome 的 Chrome。是的,你没看错。它允许你从浏览器之外的环境(即命令行)与 Chromium 进行交互。

将 Chromium 和 Blink 渲染引擎带入命令行使得很多事情变得可行,比如自动化测试。


安装


安装很简单,可以通过 yarn 或 npm 来完成。只需运行下面的命令:

yarn add pupeeter
# or "npm i puppeteer"

之后可以像其它 nodejs 程序一样用 node 来运行。


创建截图


有时你想测试像 CSS 这样的东西,确保网站观感没有出现回退。

譬如,对我的博客首页进行截图:


首先我们要引用 puppeteer 作为依赖包。有了这个,你可以启动一个浏览器实例,它实际上也可以在屏幕上加载浏览器,如下所示:


注意 headless 选项。

这样你就可以在浏览页面时创建一个全新的页面,然后你可以“转到”一个特定的网址(在这个例子里会转到我的主页)。

然后,我们可以使用内建的屏幕截图功能来保存页面截图。


爬取网页


另外一个应用场景是用 Puppeteer 爬取网站的内容。在下面的例子里,我将浏览骇客新闻并从第一页上取得所有新闻的链接:



这里需要注意的是page.evaluate功能。它允许我们检查当前所在的页面 ,就像我们在 Chrome 的 DevTools 里做的那样。


点击链接并浏览


我想展示的最后一个用例是导航。在下面的例子中,我展示了你如何点击页面链接并等待页面加载,并将结果记录下来:



在这里,page.waitForNavigation是一个很关键的功能。我们可以等到页面加载完毕,因为 promise 只会在点击事件完成后结束。

这对于浏览导航来说非常有用,并且可以进行全面的 UI 用户体验测试。


总结


Puppeteer 的重点是提供 API 来展现 DevTools 协议的功能。

像 Selenium 这样的工具更加成熟,并提供跨浏览器测试。Puppeteer 不属于 Selenium 这类应用。

Puppeteer 只是许多无界面 Chrome 的应用中的一种。在撰写本文时,已经有很多项目在使用无界面 Chrome。Ken Soh 的博客很好地介绍了这方面的内容。其他使用 DevTools 协议的项目可以在这里找到。

Puppeteer 由 Chrome DevTools 团队维护,他们正在寻求各种人才为社区作贡献。因此,你可以通过加入 Puppeteer 开源项目来推动无界面 Chrome 自动化测试。

谢谢阅读。请与朋友分享。

有用的链接


  • Puppeteer 例子:https://github.com/GoogleChrome/puppeteer/blob/master/examples/README.md

  • Chromeless,Chrominator,Chromy,Navalia,Lambdium,GhostJS,AutoGCD:https://medium.com/@kensoh/chromeless-chrominator-chromy-navalia-lambdium-ghostjs-autogcd-ef34bcd26907

  • DevTools 协议:https://chromedevtools.github.io/devtools-protocol/

  • Chrome DevTools:https://developers.google.com/web/tools/chrome-devtools/

  • 无界面 Chrome:https://developers.google.com/web/updates/2017/04/headless-chrome


郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐