pub const DOM_EXTRACT_JS: &str = r#"
(() => {
const interactive = 'a, button, input, textarea, select, [role="button"], [onclick], [tabindex], [data-testid], [aria-label]';
const els = document.querySelectorAll(interactive);
const info = [];
const seen = new Set();
els.forEach((el, i) => {
const rect = el.getBoundingClientRect();
if (rect.width === 0 || rect.height === 0) return;
const tag = el.tagName.toLowerCase();
let selector = '';
if (el.id) selector = '#' + CSS.escape(el.id);
else if (el.getAttribute('data-testid')) selector = '[data-testid="' + el.getAttribute('data-testid') + '"]';
else if (el.name) selector = '[name="' + CSS.escape(el.name) + '"]';
else if (el.className && typeof el.className === 'string') {
const cls = el.className.trim().split(/\\s+/)[0];
if (cls) selector = tag + '.' + CSS.escape(cls);
}
if (!selector) selector = tag;
if (seen.has(selector)) return;
seen.add(selector);
let label = '';
const aria = el.getAttribute('aria-label');
if (aria) {
label = aria;
} else if (tag === 'input' || tag === 'textarea' || tag === 'select') {
label = el.placeholder || el.name || el.getAttribute('aria-label') || '';
if (el.type && !label) label = el.type;
} else {
label = (el.textContent || '').trim().substring(0, 80);
}
info.push(i + ': ' + selector + ' [' + tag + '] "' + label + '"');
});
return JSON.stringify(info);
})()
"#;Expand description
JavaScript to extract interactive elements from the current page. Returns a JSON array of objects with tag, selector, and label.