介紹
在寫 爬蟲 或是 e2e 測試的時候,通常都會發 Request, 這時候通常也會連帶圖片都會爬回來佔掉許多資源,這時候Puppeteer提供了 一個可以判斷 網路資源的功能可以來過濾掉不需要的 resourceType 部分而達到加快速度的功能
'use strict';
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', request => {
if (request.resourceType() === 'image')
request.abort();
else
request.continue();
});
await page.goto('https://news.google.com/news/');
await page.screenshot({path: 'news.png', fullPage: true});
await browser.close();
})();
在以上範例可以看到 ,先把這個 page.setRequestInterception 設定為 true,要對Request操作時候用, 以下會用到 abort request行為,所以要先設定為 true ,可以參考更多的設定
https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#class-request
判斷 request 的時候 的資源檔屬於image的就直接 abort 反之就繼續
page.on('request', request => {
if (request.resourceType() === 'image')
request.abort();
else
request.continue();
});
總結
這個功能對於E2E或是爬蟲開發者而言是一大福音因為可以加速開發流程與測試時間,而且語法簡單明暸
前些日子也有用過 puppeteer 做爬蟲
puppeteer 就比較無法做個類型瀏覽器的測試了,比較可惜
嗯啊 只能用自家的~不然API文件各方面都不錯,用起來也簡單