重用浏览器实例 puppeteer

2023-12-14

我想知道是否可以有一个 .js 文件来打开浏览器实例、创建新页面/选项卡登录到网站(使用用户名/密码)并保持空闲状态。
在第二个 .js 文件中使用文件一个浏览器实例及其页面。

1.js

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({ 
        headless: true,
        args: ['--no-sandbox'], 
        ignoreDefaultArgs: ["--hide-scrollbars"]
    });

    const page = await browser.newPage();
    const response = await page.goto('https://google.com');

    console.log('Browser open in the background (headless)!');
    //await browser.close();
})();

2.js

const puppeteer = require('puppeteer');

(async () => {
    // instructions on browser instance/page from 1.js ...
})();

爬虫对象保存浏览器实例的状态 无论您在何处调用/传递该实例,它都引用相同的 chromium 在“背景”中。如果这太过分了,而你只是想 使用 puppeteer 连接到已经运行的 chromium,你可以做到 与 puppeteer.connect。看看这个:如何将 puppeteer“挂钩”到正在运行的 Chrome 实例/选项卡中 – mbit

是的,我想这对我来说有点过分了:)。但你发布的链接是我想要的,但有两个问题。

这是我所拥有的样本。

// 1.js
// open chromium, new tab, go to google.com, print browserWSEndpoint, disconnect
const puppeteer = require('puppeteer');

(async () => {
    var browser = await puppeteer.launch({headless: false});
    var page = await browser.newPage();
    var response = await page.goto('https://google.com');

    var browserWSEndpoint = browser.wsEndpoint();
    console.log(browserWSEndpoint); // prints: ws://127.0.0.1:51945/devtools/browser/6462daeb-469b-4ae4-bfd1-c3bd2f26aa5e

    browser.disconnect();
})();

And

// 2.js
// connect to the open browser with the browserWSEndpoint manualy put in, ... , disconect. 
const puppeteer = require('puppeteer');

(async () => {
    var browser = await puppeteer.connect({browserWSEndpoint: 'ws://127.0.0.1:51945/devtools/browser/6462daeb-469b-4ae4-bfd1-c3bd2f26aa5e'});

    // somehow use the tab that is open from 1.js (google.com)

    await browser.disconnect();
})();

我从 console.log 1.js 获取 browserWSEndpoint 字符串。 它工作得很好,但我有两个困难。

1 - 如何使用 1.js 中的变量 browserWSEndpoint,这样我就不必总是将其复制粘贴到 2.js。

2-如果我在 1.js 上打开一个新页面/选项卡,然后转到 google 并断开连接 (browser.disconnect()),如何在 2.js 上使用该页面/选项卡。

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

重用浏览器实例 puppeteer 的相关文章

随机推荐

  • 在使用 PHP 和 AJAX 执行期间终止 MySQL 查询

    我正在创建一个自定义查询生成器 当用户创建查询时 他可以通过单击按钮来验证查询语法 当用户单击按钮进行验证时 AJAX 调用将发送到服务器 并开始执行查询 在此期间 用户可以在屏幕上看到带有取消按钮的模式 如果用户有任何机会单击取消按钮 我
  • tableView.cellForRowAtIndexPath 返回 nil 单元格过多(快速)

    所以我有最奇怪的事情 我正在循环 tableView 以迭代所有单元格 对于少于 5 个单元 它可以正常工作 但是对于更多单元 它会崩溃并显示 意外发现 nil 这是代码 for section in 0
  • Qt:meta.enumeratorCount() 没有为 Q_OBJECT 中的枚举提供元数据,为什么?

    我有以下课程 我尝试获取一些元数据enum MyEnum 然而 当循环结束时meta enumeratorCount 它的计数始终为 0 基本上我在关注这个例子在这里 为了找到问题 我也尝试了同样的方法 同样的问题 方法计数 0 代码编译
  • 从一列中的唯一值创建 Pandas 数据框

    我有一个包含 1000 行的 Pandas 数据框 它有Names列包括客户名称及其记录 我想根据每个客户的唯一名称为他们创建单独的数据框 我将唯一的名称放入列表中 customerNames DataFrame customer name
  • Google Slides API,能够使用十六进制设置颜色吗?

    是否可以使用十六进制格式设置元素形状背景颜色 例如 B6D7A8 我在这里看到一个例子 Google Slides API 如何更改特定颜色的所有形状的文本颜色 然而 Google Slide API 参考并没有提及它 我想确定一下 特别是
  • MIME 类型“image/jpg”与“image/jpeg”相同吗?

    很简单的问题 但似乎无法在网上找到它 我正在尝试制作一个程序 根据文件类型会给我扩展名 No image jpg不等于image jpeg 你应该使用image jpeg Only image jpeg被识别为 JPEG 文件的实际 mim
  • 是否有主日期时间模式适用于每个类似的日期时间模式

    我的消费者收到的时间格式是String有价值20 5 14 9 22 25 or 20 5 14 9 22 5 or 20 5 14 12 22 25 or 20 10 14 9 2 25 etc 以上所有内容都有非常不同的日期时间模式yy
  • struts 2中的多个文件上传

    我在使用struts2上传文件时遇到问题 我有多个文件标签 例如
  • 如何在matlab中用scatter3图在同一图中绘制等值面?

    我有一个 3D 体积和一个 3D 点云 我怎样才能绘制点云以及isosurface体积 而不覆盖散点图 使用patch绘制等值面总是会擦掉scatter3 plot 有些事情要尝试 首先绘制使用补丁的表面 h patch 然后设置hold
  • 无法连接 Websphere MQ 队列管理器

    我是 WebSphere MQ 的初学者 我正在研究 MQ 6 并且它工作正常 但现在我已经安装了 MQ 7 1 当我尝试创建一个新的队列管理器时 我可以做到 但它无法连接并且它给了我以下错误 你对此有什么想法吗 谢谢 如果使用以下命令安装
  • Linq 获取高于姓氏的项目

    问候 我正在尝试找到一种使用 Linq to SQL 来获取姓氏高于 Jan 的前 15 条记录的方法 当我在 SQL 中使用它时 我得到了姓氏以字母顺序高于 Jan 的任何字母开头的每个成员 然而使用query Where m gt m
  • Python Numpy 累积/差异[重复]

    这个问题在这里已经有答案了 我希望扭转 numpy 的 cumsum 函数的效果 即累积 运行总计 查看下面的代码 我将数字 1 到 10 分配给 a 将这些数字的运行总和分配给 b 我需要反转这个过程 即从b计算a 我可以对此进行编码 参
  • 计算本地存储空间的使用情况

    我正在使用 Bespin 编辑器和 HTML5 的 localStorage 创建一个应用程序 它在本地存储所有文件并帮助语法 使用 JSLint 和其他一些 CSS 和 HTML 解析器来帮助用户 我想计算已使用了多少 localStor
  • 在 C# 中从外部应用程序获取 UI 文本

    是否可以从 C 中的外部应用程序获取 UI 文本 特别是 有没有办法从第三方编写的外部 Win32 应用程序的标签 我假设它是普通的 Windows 标签控件 读取 Unicode 文本 文本可见 但无法在 UI 中通过鼠标选择 我假设有一
  • JodaTime - 检查 LocalTime 是否在现在之后以及现在在另一个 LocalTime 之前

    我正在尝试检查当前时间是否是在开始之后LocalTime在另一个终点之前LocalTime即开始时间加上 11 小时 如果开始时间为 11 00 结束时间为 22 00 则效果很好 但是 当我尝试比较开始时间 16 00 和结束时间 03
  • T-SQL:将新的 INSERT 标识返回给 C#

    我使用存储过程将值放入 SQL Server 该过程将向所添加的行添加一个 ID 我需要将此 ID 返回到我的代码中 目前我可以在 Visual Studio 的 OUTPUT 窗口中看到输出 id 但似乎无法在我的代码中捕获它 这是该过程
  • 如何从另一个java程序中运行.jar文件?

    我有一个 jar 文件 可以在命令行上运行 java jar myFile jar argument1 我想将此 jar 的输出保存为另一个 java 程序中的字符串变量 我该怎么做 我尝试将 myFile jar 作为参考包含在我的程序中
  • 如何映射 Java 流中的 RuntimeExceptions 以从无效流元素中“恢复”

    想象一下 我正在构建一个库 它将接收整数流 而库代码所需要做的就是返回一个字符串流 其中包含数字的字符串表示形式 public Stream
  • 如何使用awk根据前两个字段找出第三个字段的最大值

    文件内容如下 333379266 834640619 88 333379280 834640621 99 333379280 834640621 66 333376672 857526666 99 333376672 857526666 7
  • 重用浏览器实例 puppeteer

    我想知道是否可以有一个 js 文件来打开浏览器实例 创建新页面 选项卡登录到网站 使用用户名 密码 并保持空闲状态 在第二个 js 文件中使用文件一个浏览器实例及其页面 1 js const puppeteer require puppet