Puppeteer无头浏览器:开启自动化之门,掌握浏览器世界的无限可能

2023-09-21 09:54:41

大概还是入门期,我曾用Puppeteer做爬虫工具以此来绕过某网站的防爬机制。近期有需求要做任意链接网页截图,像这种场景非常适合用Puppeteer完成。无头浏览器我已知的还有Selenium。

完成截图需求踩的最大的坑不是具体的逻辑代码,而是Docker部署Puppeteer到服务器总是缺少某个包。踩坑过程我想另外写一篇文章分享,所以这篇就单纯给读者介绍Puppeteer无头浏览器。

什么是Puppeteer?

Puppeteer是由Google开发和维护的一款强大的Node.js库,它为开发人员提供了高级API,以编程方式操控Chromium浏览器。与传统的浏览器自动化工具相比,Puppeteer的独特之处在于它可以运行无头浏览器,即在没有UI界面的情况下运行浏览器实例。这意味着你可以在后台运行浏览器,执行各种任务,而无需手动操作浏览器界面。

Puppeteer的背后是Chromium浏览器,这是一款开源的浏览器项目,也是Google Chrome浏览器的基础。因此,Puppeteer具备了与Chrome相同的功能和兼容性。

Puppeteer的设计目标是为开发者提供一种简单而直观的方式来自动化浏览器操作。它提供了丰富的API,可以轻松地进行页面导航、元素查找、表单填写、数据提取等操作。你可以编写脚本来模拟用户在浏览器中的操作,从而实现自动化测试、网页截图、数据爬取等任务。

此外,Puppeteer还支持无头模式,这意味着浏览器在后台运行,不会显示界面。这使得Puppeteer非常适合在服务器环境中运行,例如自动化测试的CI/CD流水线、数据挖掘和网络爬虫等场景。

Puppeteer的应用场景

  1. **模拟用户操作:**Puppeteer可以模拟用户在浏览器中的各种操作,如点击、输入表单、页面导航等。你可以通过编写代码来自动化执行这些操作,轻松模拟用户行为;
  2. **屏幕截图和PDF生成:**Puppeteer可以帮助你捕获网页的屏幕截图或生成PDF文件;
  3. **网页内容抓取:**Puppeteer可以加载网页并提取其中的文本、图像、链接等内容;
  4. **表单自动填充和提交:**Puppeteer可以模拟用户的交互操作,自动填写表单字段并触发提交操作;
  5. **性能监测和分析:**Puppeteer可以帮助你评估网页的性能指标,如加载时间、资源使用情况等。你可以使用这些工具来发现性能瓶颈、进行优化并监测改进效果;
  6. **网页自动化测试:**Puppeteer可以模拟用户的操作并与网页进行交互,你可以编写测试脚本,让Puppeteer自动加载网页、执行操作,并验证网页的行为和结果是否符合预期。

以上是Puppeteer的一些常见的应用场景,由于其强大的功能和灵活性,你可以使用Puppeteer完成各种与网页操作和自动化相关的任务。

Puppeteer的安装

首先,node -v检查本地Node.js版本,官方要求版本在14以上。不满足要求的同学参考Node.js版本管理工具,我选择n 选择合适的工具切换Node.js版本。

然后要有心理准备,当我们npm i puppeteer安装Puppeteer时,它会顺带将Chromium浏览器安装。Chromium浏览器几百MB,下载相对慢,而且经常性出错下载失败。如果失败,尝试执行些命令再次下载:

node node_modules/puppeteer/install.js

下载前,建议将切换npm仓库源至国内:

npm config set registry https://registry.npm.taobao.org

Puppeteer的使用

不考虑复杂的网页,简单实现的截图:

const puppeteer = require('puppeteer');
const path = require('path');
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url, { waitUntil: "domcontentloaded" });
await page.setViewport({ width: 1280, height: 720 });
await page.screenshot({
    path: path.resolve(__dirname, `./${Date.now()}.png`),
    type: 'png',
    fullPage: true
})
await browser.close()

几行代码,基本就能实现截图,当然没有考虑网页图片等异步加载的资源情况。执行它就能得到一张截图。

如果执行报错:Could not find Chrome (ver. 116.0.5845.96). This can occur if either说明Chromium没有安装。执行上述安装命令node node_modules/puppeteer/install.js

总结

Puppeteer是一款无头浏览器工具,它为开发者们提供了一种强大而灵活的方式来控制浏览器。通过模拟用户行为、截取屏幕截图、拦截网络请求和进行自动化测试,Puppeteer能够轻松应对各种开发任务。

如果我的文章对你有帮助,您的👍就是对我的最大支持_

欢迎围观朋友圈、加我微信拉您加入人类高质量前端交流群

更多推荐

《C和指针》笔记29:数组名和指针

看下面的代码intb[10];b[4]的类型是整型,但b的类型又是什么?它所表示的又是什么?一个合乎逻辑的答案是它表示整个数组,但事实并非如此。在C中,在几乎所有使用数组名的表达式中,数组名的值是一个指针常量,也就是数组第1个元素的地址。它的类型取决于数组元素的类型:如果它们是int类型,那么数组名的类型就是“指向in

ELK企业级日志分析系统

目录ELK可以添加的其它组件filebeat结合logstash的好处为什么要使用ELK完整日志系统基本特征ELK的工作原理ELKELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、Logstash和Kiabana三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求。1.Elasti

C++多线程的用法(包含线程池小项目)

一些小tips:编译命令如下:g++7.thread_pool.cpp-lpthread查看运行时间:time./a.out获得本进程的进程id:this_thread::get_id()需要引入的库函数有:#include<thread>//引入线程库#include<mutex>//加入锁机制需要引入库函数mute

4G工业路由器高效数据传输助力光伏发电站管理

光伏发电站是能源产业中一种利用太阳能技术将光转化为电能的常见设施。随着物联网技术与环保能源的不断进步和应用的普及,光伏发电站的管理也变得更加便捷高效。光伏发电站结合4G工业路由器实现远程监控管理,并用于采集发电站中的传感器数据和监控信息。4G工业路由器是一种专业的设备,具有稳定可靠的网络连接和高效的数据传输能力,能够满

【k8s】Pod 的钩子

Kubernetes(K8s)中的Pod可以使用以下几种勾子(钩子)来执行在容器生命周期的不同阶段运行的操作:PostStart(启动后):该勾子在容器启动之后立即运行。它可以用于在容器内执行一些初始化任务、启动服务或设置环境。例如,进行一些文件操作、加载配置文件或注册服务到服务发现等。PreStop(停止前):该勾子

RPC和HTTP调用的区别

RPC(RemoteProcedureCall)和HTTP调用都是用于实现远程通信的方法,但它们有一些重要的区别:通信协议:RPC:RPC通常使用自定义的二进制协议或者序列化协议(如Protobuf、Thrift)来进行通信。这些协议更加高效,因为它们可以将数据以二进制形式传输,减少了序列化和反序列化的开销。HTTP调

安卓Android_手机安装burp的https_CA证书

安卓Android_手机安装burp的https_CA证书文章目录安卓Android_手机安装burp的https_CA证书1打卡电脑wif热点,手机连上电脑的热点2burp点击--》Proxysettings3点击add---》新增代理地址和端口4设置好-展示5手机连上电脑的wifi热点6点击查看ip地址与burp代

免费,开源,可批量的离线图片文字提取软件OCR

Umi-OCR文字识别工具免费,开源,可批量的离线OCR软件适用于Windows7x64及以上免费:本项目所有代码开源,完全免费。方便:解压即用,离线运行,无需网络。批量:可批量导入处理图片,结果保存到本地txt/md/jsonl多种格式文件。也可以即时截屏识别。高效:采用PaddleOCR-jsonC++识别引擎。只

AI实战营第二期 第八节 《MMSegmentation代码课》——笔记9

AI实战营第二期第八节《MMSegmentation代码课》【课程链接】https://www.bilibili.com/video/BV1uh411T73q/【讲师介绍】张子豪OpenMMLab算法工程师【学习形式】录播+社群答疑【作业布置】本次课程为实战课,需提交笔记+作业。课程大纲:环境配置预训练模型预测图片、视

Prompt、RAG、微调还是重新训练?选择正确的生成式 AI 的方法指南

文章目录一、前言二、主要内容三、总结🍉CSDN叶庭云:https://yetingyun.blog.csdn.net/一、前言这篇博客试图根据一些常见的可量化指标,为您选择适合您用例的生成式人工智能方法提供指导。生成式AI正在以惊人的速度发展,许多组织都在尝试利用这项先进技术来解决业务问题。虽然有很多流行的方法可供选

漫谈:C语言 C++ 迷惑的语句、分号、大括号

C语言设计得很麻拐。初学者经常面临这样的麻烦:多了一个分号,if条件没通过却执行了少了一个分号,编译不下去,报奇怪的错误if(a>0);++x;这个代码的“++x”无论如何都会被执行,旁观者很快就能看出来是因为if语句后面多了一个分号。structA{inta;}这个代码会导致其后的代码(甚至是另外一个文件,取决于头文

热文推荐