首页 > 其他分享 >puppeteer使用一些技巧简单说明

puppeteer使用一些技巧简单说明

时间:2024-05-18 22:30:07浏览次数:20  
标签:browserless const 技巧 await puppeteer https 简单 page

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 或者sessionstprage 相关的

  • 尽量使用远程支持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/

标签:browserless,const,技巧,await,puppeteer,https,简单,page
From: https://www.cnblogs.com/rongfengliang/p/18195196

相关文章

  • jenkins docker 开启debug 简单说明
    jenkinsdocker镜像为了方便调试,已经内置了一个环境变量可以方便的开启基于jdwp协议的debug处理,以下是一个简单使用参考配置docker-compose文件services:jenkins:image:jenkins/jenkins:ltsenvironment:-DEBUG=trueports:......
  • dremio 分布式存储docker配置简单说明
    对于dremio分布式存储的配置我们直接修改配置文件,当然基于环境变量参考配置dremio:platform:linux/x86_64image:dremio/dremio-oss:latestports:-9047:9047-31010:31010-32010:32010container_name:dr......
  • puppeteer localstorage 处理简单说明
    puppeteer对于cookie以及localstorage的控制实际上还是比较常见的需求,现在主流web开发都比较喜欢使用localstorage进行一些数据的额存储,以下是关于localstorage处理的一个简单演示环境准备基于了browserless(使用了v2版本,注意browserlessv1与v2是有差异的,目前测试chrome......
  • SimCLR: 一种视觉表征对比学习的简单框架《A Simple Framework for Contrastive Learn
    现在是2024年5月18日,好久没好好地看论文了,最近在学在写代码+各种乱七八糟的事情,感觉要和学术前沿脱轨了(虽然本身也没在轨道上,太菜了),今天把师兄推荐的一个框架的论文看看(视觉CV领域的)。20:31,正经的把这篇论文看完。论文:ASimpleFrameworkforContrastiveLearningofVisua......
  • Flex布局-margin 妙用技巧
    在flex布局中,通过对子项设置margin-auto;的方式去吃掉剩余空间,这种小技巧在很多时候能极大简化我们的布局哦.单元素水平垂直居中如果父容器是flex,要实现元素水平垂直居中,直接在容器项添加:display:flex;justify-content:center;align-items:center;但......
  • C/C++技巧
    1.三目运算符语法:表达式1?表达式2:表达式3。表达式1为真则执行表达式2,否则执行表达式3。相比if语句,三目运算符短小简洁,适当使用可以提高代码可读性。另外,如果三目运算符返回左值,可以继续赋值。举例#include<iostream>usingnamespacestd;intmain(){system("......
  • Transformers 加速的一些常用技巧
    前言 本文介绍了一些Transformers常用的加速策略。本文转载自DeephubImba仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV方向的准研究生们,未来三年如何度过?招聘高光谱图像、语义分割、di......
  • 使用puppeteer url转换pdf中文不显示
    本来正在优化一个url转pdf的node服务,项目是使用puppeteer进行转换。功能优化提测后,发现转换后的pdf中文都不显示了。而本身这次优化没有涉及到转换本身相关的内容,这就很奇怪,而且本地转换都很正常。一般中文不显示,很可能是缺少中文字体导致的,于是看了项目中的Dockerfil......
  • 一文带你简单入门了解设计模式
    什么是设计模式设计模式是在软件开发中,经过实践总结出来的可重复使用的、针对特定问题的解决方案的模板。它对软件设计中常见的问题进行了抽象和概括,提供了一种标准化的设计思路和方法,以提高软件的质量、可维护性、可扩展性和可复用性。简单来说,设计模式是一种编程中的经验总结和......
  • 【Delphi 开箱即用 1】简单实现拖拽文件到窗口
    当今,大多数个人小程序都普遍具备拖拽功能,因为拖拽操作极其便捷。毕竟,相比于传统的浏览文件夹方式打开目标文件,拖拽操作简直是一种解放。在这里,我们无需依赖任何第三方控件,单纯通过代码实现拖拽功能。目录1.最终效果图2.部分核心代码3.完整Demo源码下载1.最终效果图2.部分......