javascript - puppeteer-cluster使用中的问题
问题描述
我正在练习使用无头浏览器,我打算制作一个小查看器机器人。目标是能够放置一个播放流的站点,并能够选择多个观众在流上发送,并有可能在不重新启动应用程序的情况下增加或减少数量。
目前我在使用 puppeteer-cluster 时遇到了一些问题。
1/ 找不到同时处理活动任务数量的方法,如何随时添加或删除。也就是我这个案子的观众人数。Puppeteer会比Puppeteer-cluster更好吗?
2 /当集群的任务上线时,如果我在单个任务上遇到超时问题,那么所有其他任务也会崩溃。我该如何解决?
3/ 一旦任务启动,如何确保它永远不会结束,查看者在页面上没有被检测到 AFK 或任务完成。
const {Cluster} = require('puppeteer-cluster');
const vanillaPuppeteer = require('puppeteer')
const {addExtra} = require('puppeteer-extra')
const Stealth = require('puppeteer-extra-plugin-stealth')
async function main() {
const puppeteer = addExtra(vanillaPuppeteer)
puppeteer.use(Stealth())
let viewers = 3;
let live = 'https://a-live-stream.com';
const browserArgs = [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-infobars'
];
const proxies = [
'proxy:port',
'proxy:port',
'proxy:port',
];
let perBrowserOptions = [];
for (let i = 0; i < viewers; i++) {
perBrowserOptions = [...perBrowserOptions, {args: browserArgs.concat(['--proxy-server=' + proxies[i]])}]
}
const cluster = await Cluster.launch({
puppeteerOptions: {
headless: false,
args: browserArgs,
executablePath: 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe'
},
monitor: false,
puppeteer,
concurrency: Cluster.CONCURRENCY_BROWSER,
maxConcurrency: viewers,
perBrowserOptions: perBrowserOptions
});
cluster.on('taskerror', (err, data) => {
console.log(`Error crawling ${data}: ${err.message}`);
});
const viewer = async ({page, data: url}) => {
await page.goto(url, {waitUntil: 'networkidle2'})
const element = await page.$('iframe')
await element.click()
console.log('#Viewer live')
await page.waitFor(3000000)
console.log('#Closed')
};
cluster.queue(live, viewer)
cluster.queue(live, viewer)
cluster.queue(live, viewer)
await cluster.idle()
await cluster.close()
}
main().catch(console.warn)
解决方案
推荐阅读
- csv - 带有 CSV 测试数据的程序化 JMeter 配置
- c# - REST API 网址模式
- jmeter - Jmeter:无效的uri转义绝对路径无效
- node.js - nodeJS中的JWT管理员角色检查
- javascript - 删除某些产品的“添加到购物车”
- javascript - 回车键按回车后页面导航
- python-3.x - pandas groupby 如何在列上聚合并转换为每个单元格都是字典的矩阵
- php - PDO 语句比 MySQL CLI 长 400 倍
- informix - 在 Informix 中创建 TEMP 存储过程
- python - 用字符串检测变量(单词)中的变量(字母)