我使用Chrome的DevTools协议函数来监听javascriptDialogOpening事件。下面是代码。
async navigate(url: URL, target: any) {
const { Page } = target.connection;
// Enable the required protocol features
await Page.enable();
// Add a listener and handler for JavaScript dialogs
Page.javascriptDialogOpening(async(event: Protocol.Page.JavascriptDialogOpeningEvent) => {
// Respond with a confirmation to all dialogs
const dialogResponse: Protocol.Page.HandleJavaScriptDialogRequest = {
'accept': true
};
Page.handleJavaScriptDialog(dialogResponse);
});
}我收到一个错误: MaxListenersExceededWarning:检测到可能的EventEmitter内存泄漏。添加了11个Page.javascriptDialogOpening侦听器。使用emitter.setMaxListeners()增加限制
发布于 2020-09-10 21:35:49
通过将javascriptDialogOpening事件注册放在navigate处理程序中,可以一次又一次地添加该处理程序。因为每次发生导航事件时,都会重新添加此事件处理程序。
在这里,您真正想要的是将javascriptDialogOpening事件注册放在初始化代码中。如果您这样做,它将只注册一次,您将不再有此问题。
CDP({'host': host, 'port': port}, (client) => {
// ...
Page.javascriptDialogOpening((params) => {
Page.handleJavaScriptDialog({'accept': true});
});https://stackoverflow.com/questions/63793755
复制相似问题