我对Puppeteer不满意。 我正在使用登录网站的脚本。如果用户名或密码错误,我想将控制台消息记录在一个文件中,并以错误号退出。此数字很重要,因为它将在Excel VBA中使用。 我使用文件批处理(Windows)运行node.js脚本,并且在脚本开头使用了一个函数来添加控制台消息。
我运行一个批处理文件来运行脚本:
node C:\*my-path*\node-script.js
exit /b %errorlevel%
我可以在控制台中看到该消息,但是在日志文件中没有完整的错误消息,因为process.exit(1)在其之前关闭了该过程。
这是附加console.log消息的功能:
fs.unlinkSync("./tmp/node-js.log");
console.log = function(msg) {
fs.appendFile("./tmp/node-js.log", msg+'\r\n', 'ascii', function(err) {
if(err) {
return trueLog(err);
}
});
trueLog(msg);
然后,这是要登录的代码:
await page.goto('https://google-wrong.com/', { //a wrong url to test
waitUntil: 'networkidle2',
timeout: 10000
}).catch(error => {
throw (console.log('\r\n'+ 'JAVASCRIPT * Wrong Url ! * ' + error)), process.exit(1) });
因此,如果我使用browser.close()而不是process.exit(1),则可以附加整个消息,但是不能退出并显示错误代码。这是我的console.log:
> Open browser in memory... Done!
> Connect to google-wrong.com... Error!
> JAVASCRIPT * Wrong Url ! * Error: net::ERR_NAME_NOT_RESOLVED at https://google-wrong.com/
在Dos提示下,我看到:
> exit /b 0
如果我使用process.exit(1),则可以看到“错误退出”数字:
退出/ b 1
...但是我无法记录整个消息:
> Open browser in memory... Done!
> Connect to google-wrong.com... Error
有什么想法吗? 在此先感谢您,并为我的英语不好对不起,我希望我能说清楚。
答案 0 :(得分:0)
我认为您应该在fs.appendFileSync
函数中使用console.log
,而不必在catch处理程序中使用throw
关键字