UNPKG

@hyperbrowser/agent

Version:

Hyperbrowsers Web Agent

55 lines (54 loc) 2.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.findInteractiveElements = void 0; const elem_interactive_1 = require("./elem-interactive"); const findInteractiveElements = () => { const intereactiveElements = []; const processedElements = new Set(); const processRoot = (root, rootInfo = {}) => { const elements = root.querySelectorAll("*"); for (let i = 0; i < elements.length; i++) { const element = elements[i]; if (processedElements.has(element)) { continue; } processedElements.add(element); if (element.shadowRoot) { processRoot(element.shadowRoot, { iframe: rootInfo.iframe, shadowHost: element, }); } const { isInteractive, reason } = (0, elem_interactive_1.isInteractiveElem)(element); if ((0, elem_interactive_1.isIgnoredElem)(element) || !isInteractive) { continue; } intereactiveElements.push({ element, iframe: rootInfo.iframe, shadowHost: rootInfo.shadowHost, rect: element.getBoundingClientRect(), interactiveReason: reason, isUnderShadowRoot: element.getRootNode().nodeType === Node.DOCUMENT_FRAGMENT_NODE, cssPath: "", xpath: "", }); } }; processRoot(document); const iframes = document.querySelectorAll("iframe"); for (let i = 0; i < iframes.length; i++) { const iframe = iframes[i]; try { const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document; if (iframeDoc) { processRoot(iframeDoc, { iframe }); } } catch (e) { console.warn("error processing iframe", e); } } return intereactiveElements; }; exports.findInteractiveElements = findInteractiveElements;