问题标签 [puppeteer-cluster]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4286 浏览

javascript - puppeteer-cluster:队列而不是执行

我正在尝试使用 Puppeteer Cluster,但我只是不明白如何正确使用排队。它只能用于不等待响应的呼叫吗?我正在使用 Artillery 同时触发一堆请求,但是当我直接执行命令时它们都失败了,而只有一些失败了。

我直接从示例中获取代码并替换executequeue我期望工作的代码,除了代码不等待结果。有没有办法实现这一目标?

所以这有效:

但这打破了:

这是完整的示例queue

我在这里做错了什么?我真的很想使用排队,因为没有它,每个传入的请求似乎都会减慢所有其他请求的速度。

0 投票
1 回答
2196 浏览

javascript - puppeteer-cluster:为单个执行任务设置超时

我试图让个别任务在压力测试期间超时,看看我的调用程序会做什么。但是,我的集群可以无限期地保持任务新鲜。它似乎将我所有的cluster.execute呼叫排队,然后将其保存在内存中,并将其结果返回给早已断开连接的听众。

文档状态:

timeout <number> Specify a timeout for all tasks. Defaults to 30000 (30 seconds).

我的集群启动配置:

我正在使用以下方法调用排队机制:

其中 makePdf 是一个async需要 HTML 字符串的函数,用它填充页面并使用默认的puppeteer.

我有点期望队列开始清空自己,直到它找到一个不超过其超时值的任务。我尝试将其设置timeout为 1 毫秒,但这也不会触发超时。我已尝试将此代码移至cluster.task示例中所述的 a 以查看是否会触发设置,但没有这样的运气。如何让已经排队的请求超时?如果我不抓取网站或连接到任何东西,这是否有效?

我正在考虑将时间戳与我的任务一起传递,以便它可以跳过对调用方已过期的请求执行任何操作,但我宁愿尽可能使用内置选项。

编辑:

感谢 Thomas 的澄清,我决定构建这个小优化,以防止侦听器长期执行的任务。

data将html 的内容与包含 url 和时间戳的 json交换:

忽略侦听器超时的任何排队任务:

0 投票
0 回答
168 浏览

node.js - 如何在 cluster.task 中重用事件添加页面?(任务完成后不要关闭页面,并希望重复使用它)

cluster.task中,我添加了一些事件,例如framenavigated具有复杂逻辑的事件。

我在我的 API 服务器中使用 puppeteer-cluster,当请求进入时,添加到队列中,工作人员按顺序完成工作。

但是每次请求到来时,都会framenavigated使用 cpu 再次注册事件。

如何event added page在工人中重用?


我不想关闭event added pagecluster.task并在下一个请求中重用。可能吗?

如果不能,我想自定义您的库,不要在每次请求时打开/关闭页面,请您指出 cluster.task 页面打开/关闭部分的部分在哪里?


编辑:简单代码!

我只想在注册事件的情况下重用page对象。cluster.taskframenavigated

谢谢你。@ThomasDondorf

0 投票
3 回答
2871 浏览

node.js - Puppeteer:如何只等待第一个响应(HTML)

我正在使用 puppeteer-cluster 来抓取网页。

如果我在每个网站(8-10 页)一次打开许多页面,连接速度会变慢并且出现许多超时错误,如下所示:

TimeoutError: Navigation Timeout Exceeded: 超过 30000ms

我只需要访问每个页面的 HTML 代码。我不需要等待 domcontentloaded 等等。

有没有办法告诉page.goto()只等待来自网络服务器的第一个响应?或者我需要使用其他技术而不是 puppeteer?

0 投票
1 回答
117 浏览

puppeteer - 在 jenkins 上单击按钮后,pupeteer 无法导航到新的 URL

单击按钮后,木偶操作者未导航到新 URL。

console.log(this.page.url);//当前网址

等待 this.utils.click(this.page, '[trackid=navigation_primary_button] :not([disabled])' );

console.log(this.page.url);//当前 URL // 预期的新 URL

试过:
awaitPromise.all([this.page.click('[trackid=navigation_primary_button]'),this.page.waitForNavigation()]); 结果:超时错误导航超时

0 投票
1 回答
488 浏览

javascript - 如何在异步函数中重置 for 循环?

所以我找到了一个有很酷图片的网站,我想抓取它的一些数据。该网站大约 5 年没有得到任何更新,我试图联系它的所有者以获取某种 API,但我没有得到任何回复。

无论如何,网站有分类,每张图片都有自己的页码;所以为了抓取每张图片,我需要转到每个类别,然后转到该特定类别的每个页面。

下面是我的代码,但我无法for loop重置。

这是输出(顺序不是必需的):

如果我await在前面添加cluster.execute然后for loop正在重置,但是我不能同时使用多个浏览器。

编辑:

0 投票
1 回答
1220 浏览

javascript - 如何在 puppeteer-cluster 中使用 puppeteer.connect()?

我想使用远程无头浏览器服务(这个)和他们使用的文档puppeteer.connect()而不是puppeteer.launch()

这是启动 puppeteer 集群的代码:

如何在puppeteer-cluster中使用 puppeteer.connect() ?

0 投票
2 回答
4636 浏览

node.js - Puppeteer-Cluster Stealthy 是否足以通过机器人测试?

我想知道是否有人使用 Puppeteer-Cluster 可以详细说明 Cluster.Launch({settings}) 如何防止在不同上下文中的页面之间共享 cookie 和 Web 数据。

这里的浏览器上下文是否实际上阻止了 cookie 并且不共享或跟踪用户数据?Browserless' 现在臭名昭著的页面似乎认为不,这里应该在任务上调用 .launch({}) ,而不是在队列之前调用。

所以我的问题是,我们如何知道 puppeteer-cluster 是否在队列任务之间共享 cookie/数据?库中有哪些选项可以降低被标记为机器人的机会?

设置:我正在将 page.authenticate 与代理服务、随机用户代理一起使用,但我正在执行测试的站点偶尔仍会被阻止(403)。

}

0 投票
0 回答
452 浏览

node.js - Puppeteer 集群有时无法在 k8s 中启动

我正在使用puppeteerwith puppeteer-cluster,它部署在 k8s 上,一切正常。我遇到的唯一问题是有时 pod 无法启动,并引发此异常:

其次是:

和:

这对我的功能影响不大,因为 k8s 只是创建了一个新的 pod(工作正常),但我想了解会发生什么,以及是否可以修复它。

集群初始化代码:

版本:

0 投票
1 回答
125 浏览

node.js - AWS EC2 实例中的 puppeteer 集群脚本问题

在 AWS EC2 实例中通过 puppeteer(puppeteer-cluster) 脚本运行时,我遇到了页面加载问题。但是当我在 EC2 中手动打开时也是如此。此外,puppeteer 脚本在本地机器上完美运行,无论是 Headless true/false。有内存问题吗?请帮忙

注意:能够登录到应用程序并导航到页面。但问题仅在于特定页面/内容加载。甚至保持明确的等待 3 分钟并在超时后截取屏幕截图(看到空白/白页)。