puppeteer使用一些技巧简单说明

puppeteer 是一个nodejs 包提供了方便的基于devtools 协议进行chrome/chromium 控制,puppeteer 默认运行在无头模式
以下是对于puppeteer使用的一些简单总结

一些问题

  • browser && page 对象复用问题

实际上还是结合实际,个人建议减少复用,除非自己对于browser && page 进行了比较明确的资源管理,否则运行可能会有各类
异常信息(有些可能是bug,有些可能是因为安装依赖的问题,有些可能是自己对于这些对象维护问题)

  • 按需配置user-agent

这个实际上再一些场景还是很重要的,尤其一些web 站点可能会基于一些请求头进行重定向以及判断的(一般会基于nginx 等工具)

const page = await browser.newPage();
await page.setUserAgent(
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36",
);
  • 如果是web 爬虫场景,尽量对于认证信息进行cache

这个可以减少账户被封的问题,对于认证信息的cache,一般就是cookie 以及localstorage 或者sessionstorage 相关的

  • 尽量使用远程支持devtools 协议的服务,比如browserless

基于远程devtools协议服务的好处就很明显了,我们可以基于策略进行灵活的资源路由以及使用云服务提升puppeteer 处理的能力以及稳定性

  • puppeteer 内部的一些请求尽量合并

异步编程模型,对于使用上我们对于异步请求处理的合并可以提升性能,比如使用page.evaluate,对于一些await 进行合并
通过page.evaluate

const buttonText = await page.evaluate(() => {
  const $button = document.querySelector('.buy-now');
  const clicked = $button.click();
 
  return $button.innerText;
});

通过Promise.all

const [response] = await Promise.all([
  page.waitForNavigation(),
  page.click('a.some-link')
]);

说明

以上是一些简单说明,checklyhq 提供了不少实践,很值得学习下

参考资料

https://docs.browserless.io/Libraries/puppeteer-library
https://pptr.dev/
https://docs.browserless.io/Recipes/setting-a-user-agent
https://docs.browserless.io/Hosted-Service/best-practices
https://www.checklyhq.com/learn/headless/basics-puppeteer-intro/
https://www.checklyhq.com/learn/headless/avoiding-hard-waits/
https://www.checklyhq.com/learn/headless/managing-cookies/

posted on   荣锋亮  阅读(92)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2022-05-18 openresty 1.21.4 发布了
2021-05-18 cube.js 响应内容压缩
2020-05-18 HAProxy Data Plane API 2.0 docker 镜像
2020-05-18 使用jetty runner 运行war 包
2020-05-18 winstone 简单方便的servlet 容器
2020-05-18 Announcing HAProxy Data Plane API 2.0
2019-05-18 使用go-mysql-server 开发自己的mysql server

导航

< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5
点击右上角即可分享
微信分享提示