Passa al contenuto principale

API Manipolazione DOM

@grant CAT.agent.dom

L'API di manipolazione del DOM fornisce un'automazione completa delle pagine del browser: navigazione, lettura dei contenuti, screenshot, interazione con moduli e monitoraggio del DOM.

Gestione delle schede​

listTabs — elencare le schede​

const tabs = await CAT.agent.dom.listTabs();

Restituisce informazioni su ogni scheda aperta.

Restituisce TabInfo[]:

CampoTipoDescrizione
tabIdnumberID della scheda
urlstringURL corrente
titlestringTitolo della pagina
activebooleanSe è la scheda attiva corrente
windowIdnumberID della finestra a cui appartiene
discardedbooleanSe è stata scartata (sospesa)
const result = await CAT.agent.dom.navigate(url, options?);

Parametri:

ParametroTipoPredefinitoDescrizione
urlstring—URL obiettivo (obbligatorio)
options.tabIdnumberscheda attiva correnteQuale scheda usare
options.waitUntilbooleantrueSe attendere che la pagina finisca di caricare
options.timeoutnumber30000Timeout in millisecondi

Restituisce NavigateResult:

{ tabId: number; url: string; title: string }

Lettura dei contenuti​

readPage — leggere il contenuto della pagina​

const page = await CAT.agent.dom.readPage(options?);

Converte il DOM della pagina in testo strutturato, rimuovendo automaticamente elementi irrilevanti come <script>, <style>, <noscript>, <svg> e <link[rel=stylesheet]>.

Parametri:

ParametroTipoPredefinitoDescrizione
options.tabIdnumberscheda attiva correnteQuale scheda usare
options.selectorstring—Selettore CSS; viene restituito solo il contenuto dell'elemento corrispondente
options.maxLengthnumber—Massimo caratteri; troncato oltre questo
options.removeTagsstring[]—Nomi di tag aggiuntivi da rimuovere

Restituisce PageContent:

CampoTipoDescrizione
titlestringTitolo della pagina
urlstringURL della pagina
htmlstringContenuto testuale della pagina elaborato
truncatedbooleanSe il contenuto è stato troncato
totalLengthnumberLunghezza totale del contenuto originale

screenshot — fare uno screenshot​

const shot = await CAT.agent.dom.screenshot(options?);

Parametri:

ParametroTipoPredefinitoDescrizione
options.tabIdnumberscheda attiva correnteQuale scheda usare
options.qualitynumber80Qualità JPEG (0-100)
options.fullPagebooleanfalseCatturare l'intera pagina
options.selectorstring—Selettore CSS; catturare solo l'area dell'elemento corrispondente
options.saveTostring—Percorso per salvare nello spazio di lavoro OPFS

Restituisce ScreenshotResult:

CampoTipoDescrizione
dataUrlstringURL dati base64
pathstringPercorso di salvataggio OPFS (quando si usa saveTo)
sizenumberDimensione del file (quando si usa saveTo)
// Salvare uno screenshot in OPFS
const shot = await CAT.agent.dom.screenshot({
saveTo: "screenshots/page.png",
quality: 90
});
console.log(`Salvato in ${shot.path}, dimensione ${shot.size} byte`);

Interazione con la pagina​

click — fare clic su un elemento​

const result = await CAT.agent.dom.click(selector, options?);

Parametri:

ParametroTipoPredefinitoDescrizione
selectorstring—Selettore CSS (obbligatorio)
options.tabIdnumberscheda attiva correnteQuale scheda usare
options.trustedbooleanfalseUsare CDP per inviare un evento mouse reale

Restituisce ActionResult:

CampoTipoDescrizione
successbooleanSe ha avuto successo
navigatedbooleanSe il clic ha attivato una navigazione
urlstringIl nuovo URL dopo la navigazione
newTabbooleanSe è stata aperta una nuova scheda

trusted vs. un clic normale:

  • trusted: false (predefinito) — simula element.click() tramite JS iniettato; veloce, ma alcuni siti possono rilevarlo come un evento non genuino
  • trusted: true — invia un evento mouse reale tramite Chrome DevTools Protocol, indistinguibile dall'interazione reale dell'utente, ma richiede i permessi di debug

fill — compilare un campo del modulo​

const result = await CAT.agent.dom.fill(selector, value, options?);

Parametri:

ParametroTipoDescrizione
selectorstringSelettore CSS (obbligatorio)
valuestringValore da inserire (obbligatorio)
options.tabIdnumberQuale scheda usare
options.trustedbooleanUsare CDP per simulare l'input da tastiera

Comportamento:

  • Modo normale: imposta element.value e invia un evento input
  • Modo trusted: CDP mette a fuoco l'elemento → digita carattere per carattere

scroll — scorrere la pagina​

const result = await CAT.agent.dom.scroll(direction, options?);

Parametri:

ParametroTipoDescrizione
direction"up" | "down" | "top" | "bottom"Direzione di scorrimento (obbligatoria)
options.tabIdnumberQuale scheda usare
options.selectorstringScorrere un contenitore specifico invece dell'intera pagina

Restituisce ScrollResult:

CampoTipoDescrizione
scrollTopnumberPosizione di scorrimento dopo lo scorrimento
scrollHeightnumberAltezza totale del contenuto
clientHeightnumberAltezza del viewport
atBottombooleanSe è ora scorruto fino in fondo

waitFor — attendere un elemento​

const result = await CAT.agent.dom.waitFor(selector, options?);

Fa polling per l'elemento specificato che appaia nella pagina (controllando ogni 500ms).

Parametri:

ParametroTipoPredefinitoDescrizione
selectorstring—Selettore CSS (obbligatorio)
options.tabIdnumberscheda attiva correnteQuale scheda usare
options.timeoutnumber10000Timeout in millisecondi

Restituisce WaitForResult:

CampoTipoDescrizione
foundbooleanSe l'elemento è stato trovato
elementobjectInformazioni sull'elemento (solo quando found=true)
element.selectorstringIl selettore corrispondente
element.tagstringNome del tag
element.textstringContenuto testuale
element.rolestringRuolo ARIA
element.typestringTipo di input
element.visiblebooleanSe è visibile

Esecuzione degli script​

executeScript — eseguire JavaScript​

const result = await CAT.agent.dom.executeScript(code, options?);

Parametri:

ParametroTipoPredefinitoDescrizione
codestring—Codice JavaScript (obbligatorio)
options.tabIdnumberscheda attiva correnteQuale scheda usare

Il codice viene sempre eseguito nel mondo MAIN della pagina (condividendo lo stesso oggetto window con il JS della pagina), quindi può chiamare le funzioni della pagina e leggere le variabili direttamente — ma per lo stesso motivo non può accedere alle URL blob dell'estensione (ad esempio un URL blob: creato con URL.createObjectURL() dal Blob restituito da CAT.agent.opfs.read in modalità "blob"), poiché le URL blob sono limitate all'origine dell'estensione. Se devi lavorare con un URL blob in un contesto isolato, usa uno SkillScript (vedi Sviluppo Skill).

// Chiamare una funzione JS propria della pagina / leggere una variabile
const data = await CAT.agent.dom.executeScript(
"return window.__APP_STATE__"
);

// Leggere contenuto del DOM
const title = await CAT.agent.dom.executeScript(
"return document.querySelector('h1')?.textContent"
);

Il codice viene avvolto in new Function() per l'esecuzione e supporta un valore di return. Il timeout è di 30 secondi.

Monitoraggio del DOM​

Utilizza Chrome DevTools Protocol per monitorare i cambiamenti del DOM e gli eventi di dialogo in una pagina.

startMonitor — avviare il monitoraggio​

await CAT.agent.dom.startMonitor(tabId);

Avvia il monitoraggio dei cambiamenti del DOM e dei dialoghi (alert/confirm/prompt) nella scheda specificata.

stopMonitor — fermare il monitoraggio​

const result = await CAT.agent.dom.stopMonitor(tabId);

Ferma il monitoraggio e restituisce le modifiche raccolte.

Restituisce MonitorResult:

CampoTipoDescrizione
dialogsArray<{ type, message }>Elenco dei dialoghi
addedNodesArray<{ tag, id?, class?, role?, text }>Riepilogo dei nodi DOM appena aggiunti

peekMonitor — verificare lo stato del monitoraggio​

const status = await CAT.agent.dom.peekMonitor(tabId);

Verifica lo stato corrente del monitoraggio in modo non distruttivo.

Restituisce MonitorStatus:

CampoTipoDescrizione
hasChangesbooleanSe ci sono modifiche
dialogCountnumberNumero di dialoghi
nodeCountnumberNumero di nodi appena aggiunti

Esempio completo​

// ==UserScript==
// @name Riempi-modulo automatico
// @match https://example.com/form
// @grant CAT.agent.dom
// ==/UserScript==

// Attendere che il modulo si carichi
await CAT.agent.dom.waitFor("form#signup", { timeout: 5000 });

// Compilare il modulo
await CAT.agent.dom.fill("input[name=username]", "test_user");
await CAT.agent.dom.fill("input[name=email]", "[email protected]");

// Spuntare la casella di accettazione
await CAT.agent.dom.click("input[type=checkbox]#agree");

// Screenshot del modulo compilato
await CAT.agent.dom.screenshot({
selector: "form#signup",
saveTo: "screenshots/form-filled.png"
});

// Cliccare invio
const result = await CAT.agent.dom.click("button[type=submit]", { trusted: true });
if (result.navigated) {
console.log("Modulo inviato con successo, navigato a:", result.url);
}