问题标签 [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.
javascript - puppeteer-cluster:队列而不是执行
我正在尝试使用 Puppeteer Cluster,但我只是不明白如何正确使用排队。它只能用于不等待响应的呼叫吗?我正在使用 Artillery 同时触发一堆请求,但是当我直接执行命令时它们都失败了,而只有一些失败了。
我直接从示例中获取代码并替换execute
为queue
我期望工作的代码,除了代码不等待结果。有没有办法实现这一目标?
所以这有效:
但这打破了:
这是完整的示例queue
:
我在这里做错了什么?我真的很想使用排队,因为没有它,每个传入的请求似乎都会减慢所有其他请求的速度。
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交换:
忽略侦听器超时的任何排队任务:
node.js - 如何在 cluster.task 中重用事件添加页面?(任务完成后不要关闭页面,并希望重复使用它)
在cluster.task
中,我添加了一些事件,例如framenavigated
具有复杂逻辑的事件。
我在我的 API 服务器中使用 puppeteer-cluster,当请求进入时,添加到队列中,工作人员按顺序完成工作。
但是每次请求到来时,都会framenavigated
使用 cpu 再次注册事件。
如何event added page
在工人中重用?
我不想关闭event added page
,cluster.task
并在下一个请求中重用。可能吗?
如果不能,我想自定义您的库,不要在每次请求时打开/关闭页面,请您指出 cluster.task 页面打开/关闭部分的部分在哪里?
编辑:简单代码!
我只想在注册事件的情况下重用page
对象。cluster.task
framenavigated
谢谢你。@ThomasDondorf
node.js - Puppeteer:如何只等待第一个响应(HTML)
我正在使用 puppeteer-cluster 来抓取网页。
如果我在每个网站(8-10 页)一次打开许多页面,连接速度会变慢并且出现许多超时错误,如下所示:
TimeoutError: Navigation Timeout Exceeded: 超过 30000ms
我只需要访问每个页面的 HTML 代码。我不需要等待 domcontentloaded 等等。
有没有办法告诉page.goto()只等待来自网络服务器的第一个响应?或者我需要使用其他技术而不是 puppeteer?
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()]); 结果:超时错误导航超时
javascript - 如何在异步函数中重置 for 循环?
所以我找到了一个有很酷图片的网站,我想抓取它的一些数据。该网站大约 5 年没有得到任何更新,我试图联系它的所有者以获取某种 API,但我没有得到任何回复。
无论如何,网站有分类,每张图片都有自己的页码;所以为了抓取每张图片,我需要转到每个类别,然后转到该特定类别的每个页面。
下面是我的代码,但我无法for loop
重置。
这是输出(顺序不是必需的):
如果我await
在前面添加cluster.execute
然后for loop
正在重置,但是我不能同时使用多个浏览器。
编辑:
javascript - 如何在 puppeteer-cluster 中使用 puppeteer.connect()?
我想使用远程无头浏览器服务(这个)和他们使用的文档puppeteer.connect()
而不是puppeteer.launch()
这是启动 puppeteer 集群的代码:
如何在puppeteer-cluster中使用 puppeteer.connect() ?
node.js - Puppeteer-Cluster Stealthy 是否足以通过机器人测试?
我想知道是否有人使用 Puppeteer-Cluster 可以详细说明 Cluster.Launch({settings}) 如何防止在不同上下文中的页面之间共享 cookie 和 Web 数据。
这里的浏览器上下文是否实际上阻止了 cookie 并且不共享或跟踪用户数据?Browserless' 现在臭名昭著的页面似乎认为不,这里应该在任务上调用 .launch({}) ,而不是在队列之前调用。
所以我的问题是,我们如何知道 puppeteer-cluster 是否在队列任务之间共享 cookie/数据?库中有哪些选项可以降低被标记为机器人的机会?
设置:我正在将 page.authenticate 与代理服务、随机用户代理一起使用,但我正在执行测试的站点偶尔仍会被阻止(403)。
}
node.js - Puppeteer 集群有时无法在 k8s 中启动
我正在使用puppeteer
with puppeteer-cluster
,它部署在 k8s 上,一切正常。我遇到的唯一问题是有时 pod 无法启动,并引发此异常:
其次是:
和:
这对我的功能影响不大,因为 k8s 只是创建了一个新的 pod(工作正常),但我想了解会发生什么,以及是否可以修复它。
集群初始化代码:
版本:
node.js - AWS EC2 实例中的 puppeteer 集群脚本问题
在 AWS EC2 实例中通过 puppeteer(puppeteer-cluster) 脚本运行时,我遇到了页面加载问题。但是当我在 EC2 中手动打开时也是如此。此外,puppeteer 脚本在本地机器上完美运行,无论是 Headless true/false。有内存问题吗?请帮忙
注意:能够登录到应用程序并导航到页面。但问题仅在于特定页面/内容加载。甚至保持明确的等待 3 分钟并在超时后截取屏幕截图(看到空白/白页)。