我是第一次接触JavaScript和Puppeteer库.我知道什么是异步编程,并且我一直在try 在Java中使用它,但当我try 在Puppeteer中使用它时,我得到了错误.
这是我的index.js
%文件:
(async () => {
const browser = await puppeteer.launch({
headless: false,
});
// Disable Facebook notifications
const context = await browser.defaultBrowserContext();
await context.overridePermissions('https://www.facebook.com', ['geolocation', 'notifications']);
const page = await browser.newPage();
const logger = await myLog.logger;
console.log('About to use function.');
await utils.webAction(
logger, 'Enter Facebook',
(() => (page.goto(constants.linkHomepage, {waitUntil: ['domcontentloaded', 'networkidle2']})))
);
console.log('Content loaded');
// User Login
await utils.webAction(
logger, 'Wait for loginEmail element',
(() => (page.waitForSelector(constants.cssLoginEmail, {visible: true}))),
);
// Using a fake (incorrect) xpath to trigger the "catch" block
await utils.webAction(
logger, 'Enter user email using incorrect xpath', utils.webType,
page, "Fake user", "fake xpath/css" // Arguments of `webType`
);
})();
和utils.js
文件:
module.exports = {
webAction: function (logger, msg, func, ...args)
{
return new Promise((resolve) => {
let actionMessage, actionLevel;
try
{
func(...args);
actionMessage = msg;
actionLevel = 'info';
}
catch (error)
{
actionMessage = "Error while executing " + msg + " function.\n---\n" + error.message + "\n---";
actionLevel = 'error';
}
finally
{
logger.log({
level: actionLevel,
message: actionMessage
})
}
console.log('Inside resolve Promise');
resolve('Fullfilment value of Promise');
console.log('Last line if resolve body');
})
},
// Type into input field
webType: function (page, text, xpath)
{
page.type(
xpath, text,
{delay: getRandomIntInRange(constants.minSpeed, constants.maxSpeed)}
);
},
};
我创建了webAction
函数,因为我希望代码看起来更干净,并且还可以跟踪程序崩溃的位置(我对实现这一点的其他方法持开放态度).
这是我收到的错误:
About to use function.
info: Enter Facebook {"timestamp":"2024-01-18 16:43:59"}
Inside resolve Promise
Last line if resolve body
Content loaded
info: Wait for loginEmail element {"timestamp":"2024-01-18 16:43:59"}
Inside resolve Promise
Last line if resolve body
info: Enter user email using incorrect xpath {"timestamp":"2024-01-18 16:43:59"}
Inside resolve Promise
Last line if resolve body
/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:85
this._reject(callback, new Errors_js_1.TargetCloseError('Target closed'));
TargetCloseError: Protocol error (Runtime.callFunctionOn): Target closed
at CallbackRegistry.clear (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:85:36)
at CdpCDPSession._onClosed (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/CDPSession.js:113:25)
at Connection.onMessage (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Connection.js:132:25)
at WebSocket.<anonymous> (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/node/NodeWebSocketTransport.js:52:32)
at callListener (/home/user/Projects/Javascript/Facebook/node_modules/ws/lib/event-target.js:290:14)
at WebSocket.onMessage (/home/user/Projects/Javascript/Facebook/node_modules/ws/lib/event-target.js:209:9)
at WebSocket.emit (node:events:514:28)
at Receiver.receiverOnMessage (/home/user/Projects/Javascript/Facebook/node_modules/ws/lib/websocket.js:1192:20)
at Receiver.emit (node:events:514:28)
at Receiver.dataMessage (/home/user/Projects/Javascript/Facebook/node_modules/ws/lib/receiver.js:560:14) {
cause: ProtocolError
at <instance_members_initializer> (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:96:14)
at new Callback (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:100:16)
at CallbackRegistry.create (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:32:26)
at Connection._rawSend (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Connection.js:91:26)
at CdpCDPSession.send (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/CDPSession.js:78:33)
at next (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:34:41)
at CdpCDPSession.send (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:75:16)
at #evaluate (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/ExecutionContext.js:211:50)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async ExecutionContext.evaluateHandle (/home/user/Projects/Javascript/Facebook/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/ExecutionContext.js:178:16)
}
Node.js v18.17.0
我希望能够使用webAction
功能,所以如果你有任何 idea ,我可以修复错误,您非常欢迎.
在输出中,它说它正确地进入了Facebook,但这是不正确的,只要浏览器打开它立即关闭! 显然,它没有正确地完成命令语句有人能告诉我发生了什么事,以及如何能够运行这段代码没有任何错误?