obscura, c'est un navigateur headless (sans fenêtre, qui tourne en arrière-plan) écrit en Rust, conçu pour une seule chose : visiter des sites et en extraire le contenu, vite et discrètement. Il exécute le vrai JavaScript des pages comme Chrome, mais pèse une fraction de son poids — et il est open source (Apache 2.0). Ce guide part du principe que tu n'as rien d'installé : ni Chrome, ni Node.js. Objectif : installé et opérationnel en moins de 10 minutes.
1Ce que fait obscura (en clair)
Le problème. Un scraper basique télécharge le HTML brut d'une page. Mais une grande partie du web moderne charge son contenu en JavaScript après coup — tu récupères une page vide.
La différence. obscura est un vrai moteur de navigateur : il charge la page, exécute le JavaScript, attend que le contenu apparaisse, puis te donne le résultat final. C'est la différence entre scraper Wikipédia et scraper une app React qui ne montre rien sans JS.
| Critère | obscura (annoncé par le repo) | Chrome headless |
|---|---|---|
| Mémoire | ~30 Mo | 200+ Mo |
| Taille du binaire | ~70 Mo | 300+ Mo |
| Chargement d'une page | ~85 ms | ~500 ms |
| Démarrage | quasi instantané | ~2 s |
| Anti-détection | intégrée | aucune |
Concrètement : tu peux faire tourner du scraping JavaScript sur un petit VPS au lieu d'une grosse machine, et lancer beaucoup d'instances en parallèle sans tout faire exploser.
2Installer en une commande
Le binaire (la voie la plus simple). Tu télécharges l'archive de ton système, tu la décompresses, c'est prêt. Exemple Linux x86_64 :
curl -LO https://github.com/h4ckf0r0day/obscura/releases/latest/download/obscura-x86_64-linux.tar.gz
tar xzf obscura-x86_64-linux.tar.gz
./obscura fetch https://example.com --eval "document.title"Autres cibles : obscura-aarch64-linux (ARM), obscura-aarch64-macos (Apple Silicon), obscura-x86_64-macos (Intel), le .zip sur Windows, ou yay -S obscura-browser sur Arch. Pour un VPS propre, l'image Docker fait ~57 Mo : docker run -d -p 127.0.0.1:9222:9222 h4ckf0r0day/obscura.
obscura ET obscura-worker — garde-les dans le même dossier, sinon la commande parallèle scrape ne marche pas. (2) Les builds ciblent Ubuntu 22.04 (glibc 2.35+) : sur un vieux serveur LTS, mets à jour ou passe par Docker.3Tes premières commandes
Récupérer une page. Trois commandes à connaître : fetch (une page), scrape (plusieurs en parallèle), serve (serveur pour Puppeteer/Playwright).
# le titre
obscura fetch https://example.com --eval "document.title"
# tous les liens
obscura fetch https://example.com --dump links
# le HTML rendu (JavaScript exécuté)
obscura fetch https://news.ycombinator.com --dump html
# la page en Markdown (parfait pour nourrir un LLM)
obscura fetch https://example.com --dump markdownLe flag --dump accepte html, text, links, markdown, assets ou original.
--dump markdown est ton meilleur ami si la donnée part ensuite dans Claude : un texte structuré et léger au lieu d'un HTML illisible et coûteux en tokens.Contenu dynamique. Si la page charge son contenu après coup, attends-le : --wait-until networkidle0 (réseau calme), --selector ".price" (un élément précis), ou --timeout 10 (borner une page lente).
obscura scrape url1 url2 url3 \
--concurrency 25 \
--eval "document.querySelector('h1').textContent" \
--format json4Mode discret : scraper sans se faire bloquer
L'argument phare. Beaucoup de sites détectent les bots via des signaux : empreinte du navigateur, drapeau webdriver, propriétés internes suspectes. Le mode stealth masque tout ça. Tu l'actives avec --stealth :
# au lancement du serveur
obscura serve --port 9222 --stealth
# ou directement sur un fetch
obscura fetch https://example.com --stealthCe qu'il fait (d'après le repo). Anti-empreinte : randomisation par session du GPU, écran, canvas, audio, batterie. Faux signaux réalistes : userAgentData qui imite Chrome 145, webdriver masqué, événements « de confiance ». Blocage automatique de 3 520 domaines d'analytics, pub et fingerprinting.
--obey-robots pour respecter le robots.txt : utilise-le quand tu n'as pas de raison explicite de t'en passer. Le « discret » sert à ne pas se faire jeter par des protections trop agressives — pas à aspirer n'importe quoi.5Brancher obscura sur Claude
C'est là que ça devient intéressant. obscura embarque un serveur MCP (Model Context Protocol) qui donne à un agent IA de vrais outils de navigation. C'est la voie la plus directe pour que Claude navigue et scrape lui-même.
# mode stdio (Claude Desktop)
obscura mcp
# config à ajouter dans Claude Desktop
{
"mcpServers": {
"obscura": {
"command": "obscura",
"args": ["mcp"]
}
}
}Une fois branché, Claude dispose d'outils comme browser_navigate, browser_snapshot (URL + titre + texte), browser_click, browser_fill, browser_evaluate. En clair : il ouvre une page, lit son contenu, clique, remplit un formulaire, et te ramène le résultat.
obscura serve --port 9222 et pointe ton script vers obscura au lieu de Chrome. Tu gardes ta logique et tes sélecteurs, tu gagnes en légèreté et en discrétion.6Le framework « scraping propre » NoesisAI
Décider du niveau d'agressivité. Tout dépend de la cible. Cette matrice te dit quoi activer.
| Situation | Stealth | Proxy | robots.txt |
|---|---|---|---|
| Ton propre site / ton API | Non | Non | — |
| Données publiques, faible volume | Non | Non | Oui (--obey-robots) |
| Anti-bot léger, volume modéré | Oui | Optionnel | À évaluer |
| Gros volume, IP à faire tourner | Oui | Oui (résidentiel) | À évaluer |
| Données nominatives | RGPD d'abord | — | Oui |
Le pipeline en 5 étapes. 1 · Cadrer la cible et la légalité (CGU du site, RGPD si données perso, robots.txt). 2 · Tester en single avec obscura fetch sur 2-3 URLs. 3 · Passer en parallèle avec scrape --concurrency, en montant progressivement. 4 · Brancher la sortie : le JSON part dans un orchestrateur (N8N), puis vers une base ou un CRM (Supabase, HubSpot). 5 · Superviser : taux d'échec, pages vides, rotation de proxy si tu te fais bloquer.