UNPKG

webscanner

Version:

Automation scanner for web resources

62 lines (54 loc) 1.87 kB
/** * @expirimental * @param client * @return {Promise<[]>} */ async function getAllDOMEvents(client) { const DOMEvents = []; let evaluationRes = await client.Runtime.evaluate({ expression: 'document.querySelectorAll("*");', }); const { result } = await client.Runtime.getProperties({ objectId: evaluationRes.result.objectId, }); const elementsObjects = result.map((e) => e.value); for (let i = 0; i < elementsObjects.length; i++) { const object = elementsObjects[i]; if (!object || !object.objectId) { continue; } const events = await client.DOMDebugger.getEventListeners({ objectId: object.objectId, }); for (let i = 0; i < events.listeners.length; i++) { delete object.objectId; delete object.subtype; delete object.type; DOMEvents.push({ ...events.listeners[i], ...object }); } } evaluationRes = await client.Runtime.evaluate({ expression: 'document' }); const documentEvents = await client.DOMDebugger.getEventListeners({ objectId: evaluationRes.result.objectId, }); if (documentEvents && documentEvents.listeners) { for (let i = 0; i < documentEvents.listeners.length; i++) { const object = { className: 'HTMLDocument', description: 'document' }; DOMEvents.push({ ...documentEvents.listeners[i], ...object }); } } evaluationRes = await client.Runtime.evaluate({ expression: 'window' }); const windowEvents = await client.DOMDebugger.getEventListeners({ objectId: evaluationRes.result.objectId, }); if (windowEvents && windowEvents.listeners) { for (let i = 0; i < windowEvents.listeners.length; i++) { const object = { className: 'Window', description: 'Window' }; DOMEvents.push({ ...windowEvents.listeners[i], ...object }); } } return DOMEvents; } module.exports = { getAllDOMEvents, };