问题标签 [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.
jestjs - 无论如何使用 jest-puppeteer 和 puppeteer-cluster 的队列来处理测试断言?
我非常喜欢使用 puppeteer-cluster 获得的并发性。然而,我目前的目的是提高我的 jest-puppeteer 单元测试的性能。我有一个 url 数组,我遍历这些 url,并希望能够从任务中获得通过或失败,或者在任务中进行测试。不幸的是,当我使用 cluster.queue 并在任务中进行期望调用时,似乎 test.each 调用只是继续并最终表明测试已经通过,而不管断言结果是什么。
这是可以理解的,因为文档声明队列不会等待,但我希望也许有人可能对实现我想要做的事情有一个创造性的想法。通过使用 cluster.execute,我能够等待响应并依次处理结果,但我希望有某种回调或让 puppeteer-jest 处理来自任务内部的响应的方法。
不幸的是,jest 不允许 describe 异步运行,所以当我在 describe 块中添加 await.task 时,我得到一个错误,因为我可以在任务前加上 await 关键字。因此,我将 cluster.task 调用放在 beforeAll 处理程序中。在 test.each 循环中添加测试似乎是个坏主意,因为我相信它会在每次迭代时声明它。我现在要对此进行测试,但倾向于这也不是解决方案。如果有人有任何建议,我很想听听。谢谢!
puppeteer-cluster - Puppeteer集群错误处理,以及setTimeout处理
在一个页面中,我想查看电话号码是否有效,所以我将页面设置为等待电话号码无效时将出现的元素。
但是,如果发生错误,puppeteer 集群似乎会终止工作,我想知道如何跳过错误并继续工作。
另外,我有一个睡眠功能,基本上是一个返回承诺的 setTimeout,但 puppeteer 集群似乎忽略了睡眠功能。有没有办法绕过这个?
javascript - MySQL 流和管道数据
我正在使用 MySQL 来获取用于网络爬虫的 url。目前我使用 csv-stringify 获取数据,如下所示:
我在 process.stdout 中看到了数据,但是我如何使用数据本身,因为我需要将 url 和 id 传递给另一个函数进行处理。我不确定我需要用什么来代替 process.stdout 来满足我的需要。
数据基本上看起来像38391,ysu.edu
我有另一个刮板,我在其中流式传输 csv 文件,例如
这很好用,但我只是看不到我如何以与 puppeteer-cluster 相同的方式将 db 流传输到 puppeteer-cluster。
有任何想法吗?
node.js - 如何在无限循环中中断 puppeteer-cluster 执行?
我正在学习如何使用 Puppeteer 集群,我有一个问题。
如何使用按键中断在无限循环中运行的 puppeteer 集群执行?
代码将是这样的:
google-chrome - 在不集中注意力的情况下打开 Chrome (Puppeteer)
我正在使用 Puppeteer 启动多个浏览器 - 每隔几分钟,它就会重新打开浏览器。这很好用,除了它不断打开浏览器并集中标签,在我尝试使用计算机时打扰我。由于我正在尝试做的事情,我有一些具体的问题会破坏我能想出的任何想法,比如
- 不要关闭浏览器,清除缓存!(我使用的插件不允许您像这样清除缓存,它会强制您关闭+重新启动浏览器)
- 使用无头:真的!(同样,由于我的用例,该插件遗憾地不适用于 headless: true)
Tl;博士,我需要一种方法来打开不会集中注意力的浏览器(可以在 Puppeteer 中使用),而无需设置 headless:true
如果您有任何建议或想法,那就太棒了!
编辑:我的操作系统是 Windows
node.js - 是否可以更改新任务的代理
我只是想知道是否可以更改新任务的代理,我无法确定是否或如何完成。
我试图搜索是否可以完成,但我找不到任何东西。
我想要实现的是在每个循环完成后更改代理,但我似乎无法弄清楚如何或是否可以完成。
multithreading - puppeteer-cluster 是否使用所有内核?
我编写了一个脚本来一次抓取一个页面 60 次。
假设我的服务器能够处理负载,puppeteer-cluster 是否会自动在所有内核之间分配工作负载?
如果不是,那么您建议使用什么方法在所有系统内核之间分配工作负载?
express - 是否可以在每个 cluster.task() 中传递不同的 puppeteerOptions?
是否可以将唯一的 puppeteerOptions 传递到特定的 cluster.task 中?例如,我有一些任务想成为无头的,而有些则不想。我希望能够将特定任务设置为具有与集群初始化不同的参数。
caching - Puppeteer 连接到代理时不使用缓存
我有一个任务是打开浏览器,然后一遍又一遍地访问同一个页面。在测试网络使用情况后,我注意到没有代理它可以很好地缓存文件,但是一旦我连接到代理它就会停止缓存。我正在为每个工作人员使用具有不同 ip:port 的旋转代理,我想知道我应该怎么做才能保存宝贵的数据。
node.js - 使用 Jest 和 Puppeteer 运行多个测试
我有 2 个测试示例,当我同时运行它们时,似乎没有时间将它们都执行到最后。当我单独运行它们时,它们会一直运行到最后。
我读过 Puppeteer-cluster 可以帮助一次运行多个测试,但是该过程在 page.goto() 函数之后立即停止。我不确定这是否是解决我的问题的正确方法,因此请随时提供 Puppeteer-cluster 的其他解决方案。
测试1:
第二个测试几乎相同,只是我正在测试注册过程而不是登录。
我尝试了与此处相同的示例https://www.npmjs.com/package/puppeteer-cluster但测试在 page.goto 之后立即停止并以通过测试结束。
在不久的将来,我有 30-40 多个类似于 test1 的测试,我需要用一个命令而不是一个一个命令来运行它们。