Chrome DevTools團隊發(fā)布了Puppeteer,一個基于Node API的headless Chrome工具。Puppeteer提供了與其他第三方工具相似的功能,促使它們不斷地創(chuàng)新與進步。
Selenium可以支持多種瀏覽器,與之不同的是,Puppeteer的目標(biāo)很單一,它只支持headless Chrome。它提供了一組Node API,所以對于開發(fā)人員來說,它的使用方式與其他工具很相似。
const puppeteer = require('puppeteer');(async() => {const browser = await puppeteer.launch();const page = await browser.newPage();await page.goto('https://example.com');await page.screenshot({path: 'example.png'});browser.close();});這段代碼是從Puppeteer的README文件中摘取的。
這個項目背后的動機是要大幅簡化headless Chrome(首發(fā)于Chrome v59)的交互操作。Google性能工程師Paul Irish寫道,現(xiàn)有的交互協(xié)議太過復(fù)雜:
從我個人的經(jīng)驗來看,原生的DevTools協(xié)議對于開發(fā)者來說并不是最理想的,特別是如果要用它來編寫自動化腳本,所以我們很需要這樣的一個帶有高級API的庫。
社區(qū)也意識到這個問題。在PhantomJS退役之后,出現(xiàn)了很多替代者。在headless Chrome發(fā)布之后,Chromeless、Chrominator和Chromy也相繼出現(xiàn)。而有了Puppeteer之后,第三方工具需要快速創(chuàng)新才有可能在這場競爭中生存下來。市場有可能會來一次大洗牌。
在Medium的一篇博文中,作者Ken Soh認為Google團隊的進入對于開發(fā)者來說是積極正面的:
當(dāng)然,如果Google決定要擁抱社區(qū),那么狀況很快就會得到改善。基于Chrome的解決方案給開發(fā)者帶來了更多的選擇,它們有別于那些有既定生態(tài)系統(tǒng)的成熟組織。
Chromeless在某些方面存在一定的優(yōu)勢,比如可以在AWS Lambda上遠程運行測試用例。不過Puppeteer后續(xù)也可能支持Lambda。Puppeteer目前需要7.1版本的Node,而Lambda只支持6.10.3版本的Node。對于部分開發(fā)者來說,只能在單個瀏覽器上進行測試就像一個詛咒一樣。不過Soh認為,對于大部分開發(fā)者來說,能夠在Chrome上進行測試就已經(jīng)很好了:
如果你可以在Chrome或headless Chrome上運行測試,那么大可以認為你的Web應(yīng)用對于你的大部分用戶來說是沒有問題的。
查看英文原文: Google's Puppeteer Joins Crowd of Headless Chrome Tools