puppeteer详解
简介
puppeteer库是一个Node库,它提供了一个高级API来控制DevTools协议上的 Chrome或Chromium 。Puppeteer 默认运行无头,但可以配置为运行完整(非无头)Chrome或Chromium
在浏览器中能做的事情大多数都能在puppeteer中完成!
比如:
- 生成页面的屏幕截图和PDF。
- 抓取SPA(单页面应用程序)并生成预渲染内容(即“SSR”(服务器端渲染))。
- 自动化表单提交,UI测试,键盘输入等。
- 创建最新的自动化测试环境。使用最新的JavaScript和浏览器功能直接在最新版本的Chrome中运行测试。
- 捕获网站的时间线跟踪,以帮助诊断性能问题。
- 测试Chrome扩展程序。
安装
如果你不想下载内置的Chromium,那么你需要这样做:
官方实例
1 2 3 4 5 6 7 8 9 10
| 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'});
await browser.close(); })();
|
是不是很简单呢?
超时处理
{12,23}1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
const puppeteer = require('puppeteer'); const {TimeoutError} = require('puppeteer/Errors'); const fs = require('fs'); let url = 'https://www.baidu.com';
(async function getHtml(){ const browser = await puppeteer.launch({ headless: false, timeout: 10000 }); const page = await browser.newPage();
try { await page.goto(url, {}); await page.waitForSelector("body"); domInnerHTML = await page.$eval("body", dom => dom.innerHTML); console.log("未超时"); } catch (e) { if (e instanceof TimeoutError) { await page.waitForSelector("body"); domInnerHTML = await page.$eval("body", dom => dom.innerHTML); console.log("超时了"); } } fs.appendFileSync( "./index.html", domInnerHTML,err => { }); await browser.close(); })()
|