Puppeteer:Chromium 实例在 browser.disconnect 后在后台保持活动状态

2023-12-19

我的环境

  • 傀儡师版本:3.1.0
  • 平台/操作系统版本:Windows 10
  • Node.js 版本:12.16.1

我的问题是:

我有一个for...of使用 puppeteer 循环访问 3000 多个网址。我用puppeteer.connect to wsEndpoint这样我就可以重用一个浏览器实例。每次访问后我都会断开连接并关闭选项卡。

  • 前 100 个网址page.goto立即打开网址,
  • 100以上page.goto每个 url 使用 2-3 次重试,
  • 300以上page.goto每个 url 使用 5-8 次重试,
  • 超过 500 我得到TimeoutError: Navigation timeout of 30000 ms exceeded每时每刻。

我检查了 Windows 任务管理器,发现有数百个 Chromium 实例在后台运行,每个实例使用 80-90MB 的内存和 1-2% 的 CPU。

Question

如何杀死已经断开连接的 Chromium 实例browser.disconnect真正的?

示例脚本

const puppeteer = require('puppeteer')
const urlArray = require('./urls.json') // contains 3000+ urls in an array


async function fn() {
  const browser = await puppeteer.launch({ headless: true })
  const browserWSEndpoint = await browser.wsEndpoint()

  for (const url of urlArray) {
    try {
      const browser2 = await puppeteer.connect({ browserWSEndpoint })
      const page = await browser2.newPage()
      await page.goto(url) // in my original code it's also wrapped in a retry function

      // doing cool things with the DOM

      await page.goto('about:blank') // because of you: https://github.com/puppeteer/puppeteer/issues/1490
      await page.close()
      await browser2.disconnect()
    } catch (e) {
      console.error(e)
    }
  }
  await browser.close()
}
fn()

错误

常见的 puppeteer 超时错误。

TimeoutError: Navigation timeout of 30000 ms exceeded
    at C:\[...]\node_modules\puppeteer\lib\LifecycleWatcher.js:100:111
  -- ASYNC --
    at Frame.<anonymous> (C:\[...]\node_modules\puppeteer\lib\helper.js:94:19)
    at Page.goto (C:\[...]\node_modules\puppeteer\lib\Page.js:476:53)
    at Page.<anonymous> (C:\[...]\node_modules\puppeteer\lib\helper.js:95:27)
    at example (C:\[...]\example.js:13:18)
    at processTicksAndRejections (internal/process/task_queues.js:97:5) {
  name: 'TimeoutError'
}


最后我通过添加达到了预期的结果--single-process and --no-zygote启动时的参数 (+--no-sandbox他们需要)。

正在运行的 Chromium 进程的数量不再呈指数级增长,但只有两个实例保持活动状态:其中一个是第一个位置中常见的空选项卡,第二个由puppeteer.connect({ browserWSEndpoint }).

[...]
  const browser = await puppeteer.launch({
    headless: true,
    args: ['--single-process', '--no-zygote', '--no-sandbox']
  })
  const browserWSEndpoint = await browser.wsEndpoint()
[...]
  • --single-process:在与浏览器相同的进程中运行渲染器和插件[source] https://peter.sh/experiments/chromium-command-line-switches/#single-process

  • --no-zygote:禁止使用 zygote 进程来派生子进程。相反,子进程将被分叉并直接执行。请注意,--no-sandbox 也应与此标志一起使用,因为沙箱需要 zygote 才能工作。[source] https://peter.sh/experiments/chromium-command-line-switches/#no-zygote

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Puppeteer:Chromium 实例在 browser.disconnect 后在后台保持活动状态 的相关文章

  • Puppeteer 访问 URL 时加载 429 的空白页面

    我正在开发一个从酒店网站获取定价信息的项目 但在 puppeteer 中加载网站时无法执行任何搜索 这是我打开 Chrome 的 JavaScript 片段 const puppeteer require puppeteer async g
  • Chrome CLI 的参数 --virtual-time-budget 的真正含义是什么?

    我知道该论点的文档 virtual time budget 在源中 https cs chromium org chromium src headless app headless shell switches ccChromium 但我觉
  • Puppeteer:将循环结构转换为 JSON 您是否传递嵌套的 JSHandle?

    我正在尝试抓取一个一页网站 有多种选择组合会导致不同的搜索重定向 我在里面写了一个for循环page evaluate的回调函数来单击不同的选择并在每个按钮中进行单击搜索 但是 我收到错误 将循环结构转换为 JSON 您是否传递嵌套的 JS
  • Electron - 如何将 html 文件加载到当前窗口?

    我四处寻找 文档 谷歌等 了解如何在电子应用程序的主窗口中加载 html 文件 但我找不到方法 事情真的这么复杂还是这么简单 我想出的是ajax 因此有效 main load views details html 我发现的另一种方法是通过远
  • Puppeteer pdf 分页错误

    我尝试用 puppetter 生成 pdf 文件 它适用于一页 但当我尝试生成多页 pdf 文档时 我遇到了分页错误 下面使用 HTML 模板来生成 如果可以 请你帮助我 复制的前提条件 将第一页填充到 100 高度并为下面的块添加标题 H
  • Puppeteer 中的多浏览器与多选项卡

    我有 100 个网页 必须测试运行时错误 我发现 Puppeteer 插件可以 毫不费力 地做到这一点 但我遇到了一个困境 启动一个带有多个选项卡的浏览器 或者为每个链接创建一个新的浏览器 在这种情况下最好的方法是什么 我听说 在有多个选项
  • 使用假网络摄像头和真实微型运行 Chromium

    我可以使用以下命令运行带有假网络摄像头的 Google Chrome google chrome stable use fake device for media stream use file for fake video capture
  • 按类名称收集元素,然后单击每个元素 - Puppeteer

    使用 Puppeteer 我想获取页面上具有特定类名的所有元素 然后循环并单击每个元素 使用 jQuery 我可以通过以下方式实现此目的 var elements a showGoals toArray for i 0 i lt eleme
  • Chrome 开发工具中的 __puppeteer_evaluation_script__ 为空

    Puppeteer 版本 9 0 0 将调试器放入 JavaScript 代码并启动 puppeteer 时 chrome 开发工具中的源代码为空 使用 Node 运行脚本 scripts test echo Error no test s
  • Puppeteer 页脚仅显示在最后一页

    我的 Puppeteer 的 footerTemplate 参数有问题 页脚仅显示在文档的最后一页 我希望它显示在文档的每一页上 嗯 页脚 也许我没有正确使用参数 这是我的 Puppeteer pdf 生成 const browser aw
  • 停止将 Chromium 放在前面

    我的测试运行 Puppeteerheadless false模式并打开几个选项卡 如果我在另一个应用程序窗口中 每当它打开一个新选项卡时 它会将 Chromium 聚焦到视图中 这很烦人 有什么办法让它在后台运行吗 我使用的是 macOS
  • 如何在chrome中启用sharedArrayBuffer而不进行跨域隔离

    我有一个仅在本地计算机上运行的实验 例如 我加载外部网页https example com和 puppeteer 我注入一个 javascript 文件 该文件由http localhost 5000 到目前为止还没有问题 但是 这个注入的
  • 在浏览器中打开的 .mhtml 文件中填写输入

    我想对 mhtml 文件运行 e2e 测试 即填写表格 在 mhtml 文件上查看和提取数据效果非常好 但我无法填写任何内容input字段 既不是手动也不是通过木偶操作者 你可以用这个试试 mhtml 文件 https gist githu
  • page.goto() 上的云函数超时

    我在云函数中使用 puppeteer 运行测试 如果我在本地机器上运行测试一切都很好 如果我在云函数模拟器中运行测试也没关系 但是当我将函数部署到云端时 所有测试都停留在 page goto https 并且函数因超时而失败 在我的例子中是
  • 使用 Puppeteer 和 Headless Chrome 获取 DOM 节点文本

    我正在尝试使用无头 Chrome 和 Puppeteer 来运行我们的 Javascript 测试 但我无法从页面中提取结果 基于这个答案 https stackoverflow com a 45799744 4794 看起来我应该使用pa
  • “清空缓存并硬重新加载”是否会清空整个缓存或仅清空与当前站点相关的部分?

    Chromium Chrome 中的 清空缓存并硬重新加载 是否会清空整个缓存或仅清空与当前站点相关的部分 我的暗示是 它绝对清空了所有缓存的资源 正如评论中所建议的那样 这个答案 https stackoverflow com a 149
  • CentOS:无法安装 Chromium 浏览器

    我正在尝试在 centOS 6 i 中安装 chromium 以 root 用户身份运行以下命令 cd etc yum repos d wget http repos fedorapeople org repos spot chromium
  • Chromium 中的 MP4 编解码器支持

    我们已将 Chromium 嵌入式框架集成到我们的 Windows 游戏中 以允许我们从应用程序内渲染网页 并且一切正常 除了 MP4 视频 据我所知 由于许可问题 Chromium 不包含此编解码器 但任何人都可以提供有关我们如何添加支持
  • 带有“Sec-Fetch-User:?1”标头的重复请求扰乱了我的请求限制

    我有一个网站 并且我已经实施了自己的请求限制以提高安全性 问题是 从一台特定的机器上 我收到重复的请求 它们之间几乎相同 生成的两个请求之间存在毫秒级的时间差 当某些 JavaScript 代码以编程方式提交表单时 就会执行原始请求 它们之
  • 在 Ubuntu 上构建 Chromium 期间失败

    我正在尝试按照官方说明构建未经修改的 Chromium 但出现以下错误 我尝试重新安装 Ubuntu 8 12 但没有区别 10 6591 ACTION Creating jsr 305 javalib jar FAILED cd thir

随机推荐

  • 从 C# 中继承的类转换数据类型

    我试图了解我的统一项目的继承 但似乎发现我的设置存在限制 我在写这篇文章时感到很困惑 因为我仍在学习正确理解 C 我有一组继承的类 它们根据两种不同的行为进行划分 这样我就有了正确的引用 然后我需要对它们进行转换 以便我可以访问这些类之一中
  • Javascript 模块模式有什么好处?

    我一直在研究为我的团队提出标准化的 Javascript 编码风格 现在大多数资源推荐涉及闭包的 模块 模式 如下所示 var Module function someMethod function return someMethod so
  • 不知道为什么在 C# 嗅探器中设置套接字选项时收到错误代码 10022(无效参数)

    我正在编写一个数据包嗅探器作为学习 C Net 4 套接字开发的练习 我的目标是嗅探进出我的计算机的 IP 数据包 我的问题是 在调用 SetSocketOption 时收到错误代码 10022 参数无效 我看不出我哪里有无效的论点 我的计
  • Swift didReceiveRemoteNotification 未调用

    我有一个以 oneSignal 作为推送提供者的应用程序 我可以收到推送通知 效果很好 但如果我尝试访问推送有效负载 我什么也得不到didReceiveRemoteNotification没有被调用 我有以下代码 func applicat
  • 如果隐藏子表则隐藏父 Div(显示:无)

    我尝试在 StackOverflow 和 Google 上进行搜索 找到了一些我认为可行的想法 但似乎没有任何帮助 我正在 SugarCRM Professional 6 5 5 中工作 如果使用 jQuery 隐藏表 显示 无 我试图隐藏
  • 使用 Doctrine 2 自动引用保留字

    有没有办法在使用时自动引用 Doctrine 2 的保留字 entityManager gt find entity id 使用查询生成器时可以完成此操作 但应该有一个全局配置设置来执行此操作 我不想在保留字的注释中指定它 这是我不久前向
  • Java SDK 的 Couchbase 连接超时

    我按照 couchbase 教程连接到远程 couchbase 服务器 但在我尝试打开默认存储桶后 连接超时失败 我已检查是否可以在我的计算机上打开 couchbase 服务器页面 192 xx xx xx 8091 这是我的Java代码
  • 如何使用 css 滤镜获得图像:模糊和锐利边缘?

    我想在悬停时模糊图像 问题是图像的边缘也模糊得令人不快 在 Fiddle 中 您可以在绿色背景下清楚地看到它 如果我缩放图像 即 1 2 它最终会解决问题 但在过渡过程中 模糊的边缘仍然出现 有什么想法如何使边缘具有这种效果 http js
  • HTML5 上传前预先调整图像大小

    这是一个面条刮刀 请记住 我们有 HTML5 本地存储和 xhr v2 等等 我想知道是否有人可以找到一个可行的示例 甚至只是对这个问题给出 是 或 否 是否可以使用新的本地存储 或其他 预先调整图像大小 以便不知道如何调整图像大小的用户可
  • Swift:@objc(...) 属性

    在 Apple 生成的代码中 Core DataNSManagedObject子类 例如 我看到这个 objc LPFile public class LPFile NSManagedObject 我的问题是 为什么是 objc声明如上所述
  • 我需要与多个远程参与者系统进行通信

    我正在使用 akka Net 开发一种插件架构 其中包含一个或多个插件的每个 dll 都被加载到自己的中AppDomain并且新的参与者系统被初始化 准备接收来自 主机 的消息 我试图让它与多个插件一起工作 但我却陷入困境 所以主机配置如下
  • 条形图中的渐变填充

    我正在观察不同人群的行为 称为Clusters在此数据集中 以及他们对所使用的浏览器类型的偏好 我想创建一个条形图 显示使用每种类型浏览器的每个集群的百分比 下面是一些生成类似数据集的代码 请忽略每个簇的百分比加起来不会等于 1 brows
  • Clang++-3.7 CRTP 编译错误“父级模板参数中没有命名成员”

    在下面的代码中 我尝试使用 CRTP 来使用父类中子类的静态成员 值 当使用带有 pedantic 标志的 g 5 2 1 编译代码时 我能够按预期编译 并且在执行时c print value and Child
  • 从包含数百万个文件的目录中精确匹配地高效查找数千个文件 (bash/python/perl)

    我在 Linux 上 试图从包含数百万个文件的目录 SOURCE DIR 中查找数千个文件 我有一个需要查找的文件名列表 存储在单个文本文件 FILE LIST 中 该文件的每一行都包含与 SOURCE DIR 中的文件相对应的单个名称 并
  • Visual Studio 卡在生成代码中

    当我使用 Visual Studio 构建 C 项目时 进程陷入困境生成代码 1 gt Rebuild All started Project myWrapper Configuration Release Win32 1 gt funzi
  • iOS 重新安装应用程序不会清除徽章

    我已通过本地通知将应用程序的徽章编号设置为 1 然后我卸载该应用程序 当我重新安装它时 徽章仍然存在 这是 iOS 错误还是有办法在卸载时清除徽章 thanks 徽章计数由操作系统维护 独立于应用程序 卸载 删除 应用程序时 操作系统会保留
  • 为什么 PyQt 执行我的操作三次?

    我对 PyQt 还是个新手 但我真的不知道为什么会发生这种情况 我有一个像这样创建的主窗口 class MainWindow QtGui QMainWindow initialize def init self Call parent co
  • shopkick 应用程序 UI 小部件

    请参阅下面的链接 http itunes apple com app id383298204 mt 8 http itunes apple com app id383298204 mt 8 有 showpick 应用程序的屏幕截图 其中有一
  • React中删除项目后如何刷新页面?

    我的问题是 当我单击删除按钮时 我可以从表中删除该项目 但我需要手动刷新页面 如何解决自动刷新 有人能解决我的问题吗 我还在下面附上了我的代码部分 这是我的代码部分 还有 Home 组件和 RowCreator 组件 import Reac
  • Puppeteer:Chromium 实例在 browser.disconnect 后在后台保持活动状态

    我的环境 傀儡师版本 3 1 0 平台 操作系统版本 Windows 10 Node js 版本 12 16 1 我的问题是 我有一个for of使用 puppeteer 循环访问 3000 多个网址 我用puppeteer connect