Puppeteer是一款專業(yè)的 Node.js 庫,相當(dāng)于一個可以用來操控Chrome的API,它可以用到的場景很多,如它具有強(qiáng)大的爬蟲功能,有點類似于PhantomJS,用來在網(wǎng)站抓取內(nèi)容非常不錯,有需要的朋友歡迎使用。
Puppeteer核心功能:
利用網(wǎng)頁生成PDF、圖片
爬取SPA應(yīng)用,并生成預(yù)渲染內(nèi)容(即“SSR” 服務(wù)端渲染)
可以從網(wǎng)站抓取內(nèi)容
自動化表單提交、UI測試、鍵盤輸入等
幫你創(chuàng)建一個最新的自動化測試環(huán)境(chrome),可以直接在此運(yùn)行測試用例
捕獲站點的時間線,以便追蹤你的網(wǎng)站,幫助分析網(wǎng)站性能問題
Puppeteer 0.13改變?nèi)缦拢?/h3>
Chroium 64.0.3264.0 (r515411)
browser.pages 可用于訪問 Chromium 中的所有頁面,包括由 window.open 創(chuàng)建的頁面。 (32398d1)
browser.close 可用于關(guān)閉 Chromium (2b79514)
Puppeteer爬蟲教學(xué):
使用puppeteer.launch()運(yùn)行puppeteer,他會return一個promise,使用then方法獲取browser實例,Browser API猛擊這里
拿到browser實例后,通過browser.newPage()方法,可以得到一個page實例, 猛戳 Page API
使用page.goto()方法,跳轉(zhuǎn)至ES6標(biāo)準(zhǔn)入門
在page.evaluate()方法中注冊回調(diào)函數(shù),并分析dom結(jié)構(gòu),從下圖可以進(jìn)行詳細(xì)分析,并通過
document.querySelectorAll('ol li a')拿到文章的所有鏈接
拿到所有鏈接之后,依次爬取各個頁面(也可以promise all同時抓取多個頁面),使用page.pdf()方法打印當(dāng)前頁面
核心代碼如下:
puppeteer.launch().then(async browser => {
let page = await browser.newPage();
await page.goto('http://es6.ruanyifeng.com/#README');
await timeout(2000);
let aTags = await page.evaluate(() => {
let as = [...document.querySelectorAll('ol li a')];
return as.map((a) =>{
return {
href: a.href.trim(),
name: a.text
}
});
});
await page.pdf({path: `./es6-pdf/${aTags[0].name}.pdf`});
page.close()
// 這里也可以使用promise all,但cpu可能吃緊,謹(jǐn)慎操作
for (var i = 1; i < aTags.length; i++) {
page = await browser.newPage()
var a = aTags[i];
await page.goto(a.href);
await timeout(2000);
await page.pdf({path: `./es6-pdf/${a.name}.pdf`});
page.close();
}
browser.close();
});