Aller au contenu principal

API de manipulation DOM

@grant CAT.agent.dom

L'API de manipulation DOM fournit une automatisation complète des pages du navigateur : navigation, lecture de contenu, captures d'écran, interaction avec les formulaires et surveillance du DOM.

Gestion des onglets​

listTabs — lister les onglets​

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

Retourne des informations sur chaque onglet ouvert.

Retourne TabInfo[] :

ChampTypeDescription
tabIdnumberID de l'onglet
urlstringURL actuelle
titlestringTitre de la page
activebooleanIndique s'il s'agit de l'onglet actuellement actif
windowIdnumberID de la fenêtre à laquelle il appartient
discardedbooleanIndique s'il a été mis en veille (suspended)
const result = await CAT.agent.dom.navigate(url, options?);

Paramètres :

ParamètreTypeDéfautDescription
urlstring—URL cible (obligatoire)
options.tabIdnumberonglet actif courantOnglet à utiliser
options.waitUntilbooleantrueIndique s'il faut attendre la fin du chargement de la page
options.timeoutnumber30000Délai d'expiration en millisecondes

Retourne NavigateResult :

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

Lecture de contenu​

readPage — lire le contenu d'une page​

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

Convertit le DOM de la page en texte structuré, en supprimant automatiquement les éléments sans rapport comme <script>, <style>, <noscript>, <svg> et <link[rel=stylesheet]>.

Paramètres :

ParamètreTypeDéfautDescription
options.tabIdnumberonglet actif courantOnglet à utiliser
options.selectorstring—Sélecteur CSS ; seul le contenu de l'élément correspondant est retourné
options.maxLengthnumber—Nombre maximal de caractères du contenu ; tronqué au-delà
options.removeTagsstring[]—Noms de balises supplémentaires à supprimer

Retourne PageContent :

ChampTypeDescription
titlestringTitre de la page
urlstringURL de la page
htmlstringContenu texte de la page traité
truncatedbooleanIndique si le contenu a été tronqué
totalLengthnumberLongueur totale du contenu d'origine

screenshot — prendre une capture d'écran​

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

Paramètres :

ParamètreTypeDéfautDescription
options.tabIdnumberonglet actif courantOnglet à utiliser
options.qualitynumber80Qualité JPEG (0-100)
options.fullPagebooleanfalseCapturer la page entière
options.selectorstring—Sélecteur CSS ; ne capturer que la zone de l'élément correspondant
options.saveTostring—Chemin d'enregistrement dans l'espace de travail OPFS

Retourne ScreenshotResult :

ChampTypeDescription
dataUrlstringURL de données base64
pathstringChemin d'enregistrement OPFS (lorsque saveTo est utilisé)
sizenumberTaille du fichier (lorsque saveTo est utilisé)

Comment le mode de capture est choisi :

ScénarioComportement
selector fourniLocalise les limites de l'élément via CDP et recadre la capture
Onglet en arrière-planEssaie une capture CDP ; en cas d'échec, active l'onglet et utilise captureVisibleTab
Onglet au premier planUtilise directement captureVisibleTab
// Save a screenshot to OPFS
const shot = await CAT.agent.dom.screenshot({
saveTo: "screenshots/page.png",
quality: 90
});
console.log(`Saved to ${shot.path}, size ${shot.size} bytes`);

Interaction avec la page​

click — cliquer sur un élément​

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

Paramètres :

ParamètreTypeDéfautDescription
selectorstring—Sélecteur CSS (obligatoire)
options.tabIdnumberonglet actif courantOnglet à utiliser
options.trustedbooleanfalseUtiliser CDP pour envoyer un véritable événement de souris

Retourne ActionResult :

ChampTypeDescription
successbooleanIndique si l'opération a réussi
navigatedbooleanIndique si le clic a déclenché une navigation de page
urlstringLa nouvelle URL après la navigation
newTabbooleanIndique si un nouvel onglet a été ouvert

trusted vs un simple clic :

  • trusted: false (défaut) — simule element.click() via du JS injecté ; rapide, mais certains sites peuvent le détecter comme un événement non authentique
  • trusted: true — envoie un véritable événement de souris via le Chrome DevTools Protocol, impossible à distinguer d'une interaction utilisateur réelle, mais nécessite la permission de débogage

fill — remplir un champ de formulaire​

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

Paramètres :

ParamètreTypeDescription
selectorstringSélecteur CSS (obligatoire)
valuestringValeur à saisir (obligatoire)
options.tabIdnumberOnglet à utiliser
options.trustedbooleanUtiliser CDP pour simuler la saisie clavier

Comportement :

  • Mode normal : définit element.value et envoie un événement input
  • Mode fiable : CDP met l'élément au point → saisit caractère par caractère

scroll — faire défiler la page​

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

Paramètres :

ParamètreTypeDescription
direction"up" | "down" | "top" | "bottom"Direction du défilement (obligatoire)
options.tabIdnumberOnglet à utiliser
options.selectorstringFaire défiler un conteneur spécifique au lieu de la page entière

Retourne ScrollResult :

ChampTypeDescription
scrollTopnumberPosition de défilement après l'opération
scrollHeightnumberHauteur totale du contenu
clientHeightnumberHauteur de la zone d'affichage
atBottombooleanIndique si le bas de page est atteint

waitFor — attendre un élément​

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

Interroge périodiquement la page pour détecter l'apparition de l'élément spécifié (toutes les 500 ms).

Paramètres :

ParamètreTypeDéfautDescription
selectorstring—Sélecteur CSS (obligatoire)
options.tabIdnumberonglet actif courantOnglet à utiliser
options.timeoutnumber10000Délai d'expiration en millisecondes

Retourne WaitForResult :

ChampTypeDescription
foundbooleanIndique si l'élément a été trouvé
elementobjectInformations sur l'élément (uniquement lorsque found=true)
element.selectorstringLe sélecteur correspondant
element.tagstringNom de la balise
element.textstringContenu texte
element.rolestringRôle ARIA
element.typestringtype d'entrée
element.visiblebooleanIndique s'il est visible

Exécution de scripts​

executeScript — exécuter du JavaScript​

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

Paramètres :

ParamètreTypeDéfautDescription
codestring—Code JavaScript (obligatoire)
options.tabIdnumberonglet actif courantOnglet à utiliser

Le code s'exécute toujours dans le monde MAIN de la page (partageant le même objet window que le JS de la page elle-même), il peut donc appeler les fonctions de la page et lire directement les variables de la page — mais pour la même raison, il ne peut pas accéder aux URL de blob de l'extension (par ex. une URL blob: que vous créez via URL.createObjectURL() à partir du Blob retourné par CAT.agent.opfs.read en mode "blob"), car les URL de blob sont limitées à l'origine propre de l'extension. Si vous devez travailler avec une URL de blob dans un contexte isolé, utilisez plutôt un SkillScript (voir Développement de Skills).

// Call a page's own JS function / read a page variable
const data = await CAT.agent.dom.executeScript(
"return window.__APP_STATE__"
);

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

Le code est enveloppé dans new Function() pour l'exécution et prend en charge une valeur return. Le délai d'expiration est de 30 secondes.

Surveillance du DOM​

Utilise le Chrome DevTools Protocol pour surveiller les modifications du DOM et les événements de dialogue sur une page.

startMonitor — démarrer la surveillance​

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

Démarre la surveillance de l'onglet spécifié pour les modifications du DOM et les dialogues (alert/confirm/prompt).

stopMonitor — arrêter la surveillance​

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

Arrête la surveillance et retourne les modifications collectées.

Retourne MonitorResult :

ChampTypeDescription
dialogsArray<{ type, message }>Liste des dialogues
addedNodesArray<{ tag, id?, class?, role?, text }>Résumé des nœuds DOM nouvellement ajoutés

addedNodes est dédupliqué par ID de nœud et limité à 50 entrées ; les nœuds qui ont depuis été supprimés de la page ou qui ne sont pas visibles sont ignorés automatiquement. text est le texte brut extrait du outerHTML du nœud, tronqué à 300 caractères.

peekMonitor — vérifier l'état de la surveillance​

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

Vérifie de manière non destructive l'état actuel de la surveillance.

Retourne MonitorStatus :

ChampTypeDescription
hasChangesbooleanIndique s'il y a des modifications
dialogCountnumberNombre de dialogues
nodeCountnumberNombre de nœuds nouvellement ajoutés

Exemple complet​

// ==UserScript==
// @name Auto form filler
// @match https://example.com/form
// @grant CAT.agent.dom
// ==/UserScript==

// Wait for the form to load
await CAT.agent.dom.waitFor("form#signup", { timeout: 5000 });

// Fill in the form
await CAT.agent.dom.fill("input[name=username]", "test_user");
await CAT.agent.dom.fill("input[name=email]", "[email protected]");

// Check the agreement box
await CAT.agent.dom.click("input[type=checkbox]#agree");

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

// Click submit
const result = await CAT.agent.dom.click("button[type=submit]", { trusted: true });
if (result.navigated) {
console.log("Form submitted successfully, navigated to:", result.url);
}