必须多次发送 SIGINT 才能关闭 Puppeteer 脚本
Having to send SIGINT multiple times for Puppeteer script to close
我是 node.js 的新手,所以我可能对异步函数有一些不了解的地方。我有一个小问题,我必须在注册 SIGINT 之前至少按两次 CTRL+C 。我希望只需要做一次。
在我的脚本中,我捕获了 SIGINT 并进行了一些清理,但是没有它它仍然会发生,所以我不确定这是否会影响它。一旦注册,我确实会看到一条日志消息。以下不是我的完整代码,因为它太长了。
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const puppeteer = require('puppeteer-extra');
const userAgent = require('user-agents');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
let browser;
let page;
function sigintHandler() {
console.log("Handling interrupt.");
process.exit();
}
process.on('SIGINT', sigintHandler); // Register sigint handler
(async () => {
browser = await puppeteer.launch({
headless: false,
defaultViewport: null,
args: ['--disable-features=site-per-process',
'--window-size=1920,1080']
});
page = (await browser.pages())[0];
})();
有谁知道这是否正常?如果不是,我该如何解决?
在注释掉大量代码并将其重新添加后,我意识到问题是由 readline 捕获 SIGINT 引起的。我用它来提示用户。将 proccess.on
替换为 rl.on
修复了它。
我是 node.js 的新手,所以我可能对异步函数有一些不了解的地方。我有一个小问题,我必须在注册 SIGINT 之前至少按两次 CTRL+C 。我希望只需要做一次。
在我的脚本中,我捕获了 SIGINT 并进行了一些清理,但是没有它它仍然会发生,所以我不确定这是否会影响它。一旦注册,我确实会看到一条日志消息。以下不是我的完整代码,因为它太长了。
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const puppeteer = require('puppeteer-extra');
const userAgent = require('user-agents');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
let browser;
let page;
function sigintHandler() {
console.log("Handling interrupt.");
process.exit();
}
process.on('SIGINT', sigintHandler); // Register sigint handler
(async () => {
browser = await puppeteer.launch({
headless: false,
defaultViewport: null,
args: ['--disable-features=site-per-process',
'--window-size=1920,1080']
});
page = (await browser.pages())[0];
})();
有谁知道这是否正常?如果不是,我该如何解决?
在注释掉大量代码并将其重新添加后,我意识到问题是由 readline 捕获 SIGINT 引起的。我用它来提示用户。将 proccess.on
替换为 rl.on
修复了它。