Chrome DevTools Protokolü: Page.javascriptDialogOpening olayı aboneliğinden nasıl çıkılır

Sep 08 2020

javascriptDialogOpeningEtkinliği dinlemek için Chrome DevTools Protokol API işlevlerini kullanıyorum . Kod aşağıdadır.

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);
  });
}

Bir hata aldım: MaxListenersExceededWarning: Olası EventEmitter bellek sızıntısı algılandı. 11 Page.javascriptDialogOpeningdinleyici eklendi. Sınırı artırmak için emitter.setMaxListeners () kullanın

Yanıtlar

1 NicholasDiPiazza Sep 10 2020 at 13:35

Koyarak javascriptDialogOpeningolay kayıt navigateişleyicisi, sen tekrar tekrar işleyicisi ekliyoruz. Çünkü bir gezinme olayı her gerçekleştiğinde, bu olay işleyicisini yeniden ekliyorsunuz.

Burada gerçekten istediğiniz şey, javascriptDialogOpeningetkinlik kaydını başlatma kodunuza koymaktır . Bunu yaparsanız, yalnızca bir kez kaydedilecek ve artık bu sorunu yaşamayacaksınız.

CDP({'host': host, 'port': port}, (client) => {
// ...
    Page.javascriptDialogOpening((params) => {
      Page.handleJavaScriptDialog({'accept': true});
    });