一日一技:效率提高十倍,Puppeteer 如何启动交互模式?

简介: 一日一技:效率提高十倍,Puppeteer 如何启动交互模式?

"未闻 Code",一个值得加星标的公众号。

摄影:产品经理鹅肝饭

当我们使用 Selenium 开发爬虫的时候,使用 Jupyter 写代码会比用 PyCharm 写代码更方便。如果使用 PyCharm 写代码并直接运行,当某一行报错的时候,整个程序就挂了,改了代码以后必须完全从头开始,这样会非常浪费时间。但如果使用 Jupyter 写代码,那么我们只需要重试出问题的这一行代码就可以了,不需要把整个程序再重启一次。

但如果我们使用 JavaScript 操作 Puppeteer,应该怎么实现写一行代码,运行一行代码呢?

我们知道,Node.js 的命令行本身确实是可以实现写一行代码运行一行的,如下图所示:


但 Puppeteer 的代码 跟上面的这段代码有点不一样,我们先来看看 Puppeteer 官方文档里面,是怎么写的代码:

注意,其中有很长一段函数是使用async声明的,它是异步函数。在 Node.js 的交互环境里面,必须把整段函数全部写进去,一次性运行,不能一段一段运行。如果尝试一段一段运行的话,代码就会报错,我们来看看:

这是因为,await关键词必须在一个异步函数里面使用。它不能单独出现在最外层。这就要求我们把所有的代码都写到一个异步函数里面,然后运行这个异步函数。

但这样做,跟直接写一个.js 文件来运行有什么区别?我每次想测试一个 XPath 语句能否正常运行,都要把整个代码重新跑一边。这不是白白浪费了交互环境的优势吗?

但实际上,Node.js 与 Chrome 本身就有一个很好用的交互环境,但很多人可能并不知道。

要启动这个交互模式,实际上非常简单。我们从0开始来创建这个环境。

首先,我们创建一个文件夹test_puppeteer,然后使用 npm 或者yarn安装puppeteer-core。使用puppeteer-core而不是puppeteer,是因为前者可以直接使用系统的 Chrome,而后者需要下载一个几百 MB 的 Chromium,非常浪费时间。

mkdir test_puppeteer
cd test_puppeteer
yarn add puppeteer-core

上面的命令执行完成以后,我们就可以启动这个交互环境了。

执行命令:

node --inspect

运行效果如下图所示:


现在,随便开一个 Chrome 的窗口,打开开发者工具,如下图所示:

大家注意,在开发者工具菜单栏的左上角,图中箭头所指向的位置,出现了 Node.js 的绿色 Logo。我们点击一下它。

此时,会弹出一个单独的开发者工具窗口,如下图所示:

这个窗口会自动关联上我们刚才启动的 Node.js。

现在,我们试一试直接在这个开发者工具的 Console标签页上面写一些代码:

可以看到,在Console标签页打印出来的内容,也会在终端窗口出现。看起来,不过是从黑色窗口写代码变成了在白色窗口写代码,这有什么好炫耀的?

现在,我们先来看看你电脑上的 Node.js 的版本是多少,如果小于14,那么就赶紧升级,让他大于等于14。然后再次执行刚刚我们的命令,如下图所示。

接下来,跟刚才一样的步骤,我们启动开发者工具,然后尝试直接调用Puppeteer,不可思议的一幕出现了:

现在我们已经可以直接使用await了!现在,在这个 Console选项卡上面,我们就可以像在 Jupyter 里面写 JavaScript 代码了,写一行,运行一行,看看效果,再写一行,再运行一行。

我们尝试在这里打开我的博客:

可以看到,我在代码里面故意写错了一部分,应该用await browser.NewPage()但是我写的是await browser.page,导致程序报错。但是没关系。我下面重新改成正确的就可以了。整个过程不需要重启浏览器。你运行一行代码,它执行一行代码,代码错了,只需要改这一行重新执行就可以了。这才叫做交互环境

目录
相关文章
|
存储 消息中间件 缓存
相比游戏客户端,游戏服务端开发无关紧要吗
感觉游戏服务端,除了更新,保存数据啊、生成随机物品啊、都没什么了,好像游戏开发场景中,服务端已经无关紧要了。看着客户端忙成狗,正在摸鱼的你是否也有过这样的疑问?
620 0
相比游戏客户端,游戏服务端开发无关紧要吗
|
2月前
|
弹性计算 关系型数据库 Serverless
告别资源瓶颈,函数计算驱动多媒体文件处理方案:https://www.aliyun.com/solution/tech-solution/fc-drive-file
本文介绍了一种基于阿里云的一键部署解决方案,利用云服务器ECS、RDS MySQL、OSS、函数计算FC及MNS等服务,实现高效的多媒体文件处理。方案通过事件驱动机制,将文件处理任务解耦,并自动弹性扩展,按需付费,简化部署流程,提高处理效率。本文还提供了详细的部署步骤与体验反馈,展示了从配置到文件处理的全过程。
|
3月前
|
存储 编解码 运维
体验报告:《告别资源瓶颈,函数计算驱动多媒体文件处理》解决方案
体验报告:《告别资源瓶颈,函数计算驱动多媒体文件处理》解决方案
97 30
|
3月前
|
弹性计算 关系型数据库 Serverless
函数计算驱动多媒体文件处理:高效、稳定与成本优化实践
本次测评的解决方案《告别资源瓶颈,函数计算驱动多媒体文件处理》展示了如何利用阿里云函数计算高效处理多媒体文件。文档结构清晰、内容详实,适合新客户参考。方案提供了一键部署与手动部署两种方式,前者简便快捷,后者灵活性高但步骤较多。通过部署,用户可体验到基于函数计算的文件处理服务,显著提升处理效率和系统稳定性。此外,测评还对比了应用内处理文件与函数计算处理文件的不同,突出了函数计算在资源管理和成本控制方面的优势。
22716 19
|
3月前
|
存储 Serverless 数据库
告别资源瓶颈,函数计算驱动多媒体文件处理
在数字化浪潮中,体验了《告别资源瓶颈,函数计算驱动多媒体文件处理》解决方案。详尽的文档和清晰的引导让上手变得容易,尽管高级功能的文档仍有提升空间。部署时,代码示例提升了效率,虽遇少许配置难题,但最终解决。性能表现卓越,稳定性强,按需付费有效控制成本,极力推荐企业采用此方案加速云端转型。同时,配套的云产品如存储、计算及数据库服务等表现出色,操作简单易懂,适合各水平用户。
|
3月前
|
编解码 弹性计算 Serverless
解锁多媒体处理新纪元:阿里云函数计算,一键驱动高效、灵活、成本优化的文件处理解决方案!
【8月更文挑战第2天】随着云计算的发展,高效灵活的多媒体处理成为必需。阿里云函数计算提供全托管服务,用户仅需上传代码,平台自动配置资源,支持毫秒级弹性伸缩。与对象存储服务集成,实现视频转码、音频提取及图片压缩等功能,按需付费降低成本。示例展示了基于Python的视频转码函数,体现其在多媒体处理领域的强大潜力和优势。
50 10
|
3月前
|
编解码 运维 监控
体验《告别资源瓶颈,函数计算驱动多媒体文件处理》
体验《告别资源瓶颈,函数计算驱动多媒体文件处理》
|
3月前
|
编解码 运维 Serverless
函数计算驱动多媒体文件处理:告别资源瓶颈,释放处理能力
随着多媒体内容的爆炸性增长,如何高效地处理和管理多媒体文件成为了各大企业面临的重大挑战。阿里云提供的函数计算(Function Compute)驱动多媒体文件处理解决方案,为这一问题提供了高效、灵活的解决途径。本文将对该解决方案进行详细评测,分析其优势和应用场景。
60 1
|
6月前
|
存储 JSON 监控
Erlang用于构建分布式屏幕监控软件的优点
Erlang是一种适用于并发编程的语言,特别适合构建分布式屏幕监控软件。其轻量级进程支持高并发,能同时处理多个屏幕的实时更新。Erlang的容错性和高可用性通过监督树机制保证了进程故障时的自动重启。此外,其内置的分布式特性使得跨节点的屏幕监控变得简单。Erlang还允许通过HTTP客户端库自动将监控数据提交到网站,便于数据存储和分析。因此,Erlang是构建此类软件的理想选择。
149 7
|
5月前
|
Web App开发 前端开发 网络协议
性能工具之常见压力工具是否能模拟前端
【6月更文挑战7天】性能工具之常见压力工具是否能模拟前端
34 0
下一篇
无影云桌面