【发布时间】:2019-04-06 22:40:50
【问题描述】:
我正在使用node-cron(它允许您在节点程序中运行 cron 脚本)来运行一些 puppeteer 抓取。这些脚本有时会同时运行,这意味着将同时打开多个浏览器实例const browser = await puppeteer.launch()。
这是不好的做法吗?如果是这样,是否有另一种编写此代码的方法不会使其失败?
感谢您的帮助。
cron.schedule('*/15 * * * *', async () => {
const browser = await pupeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox']});
const page = await browser.newPage(); // Create new instance of puppet
let today = moment();
logger.info(`Chrome Launched...`);
try {
await senatorBot(users, page, today.format("YYYY-DD-MM"));
} catch(err) {
logger.debug(JSON.stringify(err));
}
try {
await senateCandidateBot(users, page, today.format("YYYY-DD-MM")); // This sequence matters, because agree statement will not be present...
} catch(err) {
logger.debug(JSON.stringify(err));
}
await page.close();
await browser.close();
logger.info(`Chrome Closed.`);
});
cron.schedule('*/15 17-19 * * 1-5', async () => {
logger.info(`Chrome Launched...`);
const browser = await pupeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox']});
const page = await browser.newPage(); // Create new instance of puppet
let today = moment();
try {
await contractBot(users, page, today.format("MM-DD-YYYY"));
} catch(err) {
logger.debug(JSON.stringify(err));
}
await page.close();
await browser.close();
logger.info(`Chrome Closed.`);
});
【问题讨论】:
-
您可以连接到已经运行的 Chromium 实例。我所做的是尝试连接,如果连接失败,我会使用分离的 spawn 启动实例 Chromium。然后,您可以使用 browserWSEndpoint 进行连接。我将 wsEndpoint 存储在最初使用的简单文本文件中。效果很好..
-
嘿,Keith 听起来很有趣,你能提供更多细节吗?
-
是的,我会看看能不能挖掘出相关的代码。
标签: javascript node.js memory web-scraping puppeteer