Search code examples
c#puppeteerpuppeteer-sharp

getEventListeners is not defined in PuppeteerSharp


When I try to use getEventListeners in puppeteerSharp I got getEventListeners is not defined error:

var result = await page.EvaluateExpressionHandleAsync("getEventListeners(document.forms[0].getElementsByTagName('button')[0])");

How to use getEventListeners within puppeteerSharp?

I found this for javascript:

const cdp = await page.target().createCDPSession();    
const listeners = await cdp.send('DOMDebugger.getEventListeners', { objectId });

and I tried to convert it back into C#:

var t = await page.EvaluateExpressionHandleAsync(@"document.forms[0].getElementsByTagName('button')[0]");
var client = await page.Target.CreateCDPSessionAsync();
var result = await client.SendAsync("DOMDebugger.getEventListeners", t.RemoteObject.ObjectId);

but it seems I'm doing something wrong and I did not find any clear documentation about this.


Solution

  • I have found the solution, here it is for those who may be interested:

    First, we should create a CDPSession like this:

    var client = await page.Target.CreateCDPSessionAsync();
    

    then we should Evaluate our script to get an element:

    var body = await client.SendAsync("Runtime.evaluate", new { expression = "document.getElementsByTagName('input')[0]" });
    

    and at last, we should use DOMDebugger with the element's objectId to get its event listeners:

    var result = await client.SendAsync("DOMDebugger.getEventListeners", new { objectId = body["result"]["objectId"] });