@hyperbrowser/agent
Version:
Hyperbrowsers Web Agent
55 lines (54 loc) • 2.06 kB
JavaScript
;
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;