Périmètre sûr : ce guide couvre vos propres applications, vos environnements de QA ou de préproduction, et les sources pour lesquelles vous avez une autorisation écrite. Il ne décrit aucune technique visant à échapper aux protections anti-automatisation.
Une page de tarification SaaS bouge deux ou trois fois par an, et c'est presque toujours le jour où votre collecteur s'est arrêté sur un défi CAPTCHA. La parade tient en trois décisions : espacer les relevés, résoudre le défi dans la session qui l'a déclenché, et distinguer la réussite de la résolution de celle du relevé.
Pourquoi une veille tarifaire se dégrade en silence
Le problème n'est presque jamais le défi lui-même : c'est la donnée manquante que personne ne remarque. Un relevé qui échoue renvoie souvent un HTTP 200 contenant une page de vérification, pas la grille tarifaire, et votre graphique reste plat des semaines durant. Deux garde-fous suffisent : une assertion sur un marqueur attendu — nom du plan, symbole monétaire, identifiant de bloc — et un compteur de relevés valides par source.
Où le CAPTCHA s'insère dans la boucle de collecte
L'orchestrateur pilote la séquence ; CaptchaAI n'intervient qu'à l'étape où un défi apparaît. Le reste — requête, extraction, normalisation, écriture — reste des appels HTTP ordinaires vers votre backend. Sur les pages marketing publiques, le défi est le plus souvent Cloudflare Turnstile, résolu en moins de 10 s, ou reCAPTCHA v2 sur les formulaires de devis. Les deux partagent le même contrat : envoyer la tâche, interroger le résultat, injecter le token. hCaptcha et FunCaptcha ne sont pas pris en charge : prévoyez un relevé manuel pour ces sources.
La boucle de relevé, étape par étape
Le déroulé gagne à être figé une bonne fois :
- Relevez la page avec le contexte de navigateur qui portera tout le parcours.
- Détectez le défi sur un marqueur explicite, jamais sur un délai dépassé.
- Envoyez la tâche avec les seuls paramètres attendus : sitekey et URL.
- Interrogez le résultat avec un plafond ferme par tâche.
- Injectez le token dans la session d'origine, rejouez l'extraction, validez le marqueur.
Un cas concret : trois concurrents, deux relevés par jour
Prenons un éditeur SaaS B2B nantais qui suit trois concurrents européens. Son besoin réel : détecter un changement de palier dans les 24 heures, pas dans l'heure. Six exécutions quotidiennes tiennent dans le plan BASIC ($15/mois, 5 threads), dont les résolutions sont illimitées par thread ; passer à STANDARD ($30/mois, 15 threads) ne se justifie que si les relevés deviennent simultanés. Le worker tourne sur une instance OVHcloud et la donnée collectée reste un prix public : ne conservez rien de personnel et vérifiez vos obligations RGPD avant d'élargir la collecte.
Exemple de code côté client
Extrait de votre suite de tests, pour créer une tâche Turnstile :
import fetch from 'node-fetch';
const API_KEY = process.env.CAPTCHAAI_KEY;
export async function createTurnstileTask(siteKey, pageUrl) {
const res = await fetch('https://api.captchaai.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: 'TurnstileTaskProxyless',
websiteURL: pageUrl,
websiteKey: siteKey,
},
}),
});
const data = await res.json();
return data.taskId;
}
Gardez la clé API hors du dépôt : variable d'environnement en local, secret en CI.
Fiabilité : retry borné, idempotence et alertes
Bornez les nouvelles tentatives à trois, avec un backoff exponentiel plafonné à 30 s, et rendez chaque relevé idempotent : la clé d'écriture est le couple source + date, si bien qu'une exécution rejouée met à jour la même ligne au lieu d'en créer une seconde.
Ce qui justifie une nouvelle tentative
Les erreurs passagères : coupure réseau, timeout de l'API, quota momentanément saturé. Un backoff court suffit. Alertez sur l'écart durable — trois exécutions de suite sans relevé valide sur une même source — jamais sur l'incident isolé.
Ce qui doit échouer tout de suite
Un sitekey absent, une URL erronée, une clé API invalide : aucun retry ne corrige un paramètre faux, il masque la cause. Remontez ces cas dès la première occurrence.
Observabilité minimale
Instrumentez chaque appel : durée d'obtention du token, code retour HTTP, identifiant de tâche, taille de la file. Corrélez-les à votre traçage distribué, par exemple OpenTelemetry, pour rejouer un scénario à partir d'un seul identifiant.
| Signal | Ce qu'il révèle | Alerte |
|---|---|---|
| Relevés valides par source | Donnée exploitable, pas page de vérification | Deux exécutions sans marqueur validé |
| Durée d'obtention du token | Santé de l'étape CAPTCHA | Médiane qui double d'un jour sur l'autre |
| Écart résolution / relevé | Souci de session ou de parseur | Écart qui persiste deux jours |
| File d'attente en fin d'exécution | Threads saturés par la simultanéité | File non vide en fin de fenêtre |
Dépannage
| Problème | Cause probable | Correctif |
|---|---|---|
| Graphique de prix plat depuis des semaines | Page de vérification renvoyée en HTTP 200 et enregistrée telle quelle | Assertion sur le marqueur tarifaire, échec du relevé sinon |
| Token refusé après une résolution réussie | Session différente de celle qui a déclenché le défi | Même contexte de navigateur et même cookie jar jusqu'à la soumission |
ERROR_ZERO_BALANCE en pleine campagne |
Solde épuisé pendant la fenêtre de collecte | Rechargez, posez une alerte de solde |
| Relevés en double après une reprise | Écriture non idempotente | Clé source + date, upsert plutôt qu'insert |
| Une source bascule sur hCaptcha | Type non pris en charge | Sortez-la de la cadence automatique, relevé manuel |
Liste de contrôle avant la mise en production
- Le périmètre couvre vos applications ou des sources autorisées par écrit.
- La clé CaptchaAI vit dans un coffre ou un secret CI.
- Chaque relevé valide un marqueur de contenu avant écriture en base.
- Le token est injecté dans la session qui a déclenché le défi.
- Un compteur de relevés valides par source alimente une alerte.
FAQ
À quelle fréquence relever une page de tarification concurrente ?
Une à deux fois par jour couvre la quasi-totalité des besoins : les grilles publiques changent rarement, et une cadence élevée multiplie les défis sans gagner en fraîcheur.
Quelle offre CaptchaAI choisir pour une centaine de contrôles quotidiens ?
BASIC ($15/mois, 5 threads) suffit si les relevés sont étalés dans la journée, chaque thread traitant un nombre illimité de résolutions. Le critère est la simultanéité, pas le volume : pour cent contrôles lancés ensemble, visez ADVANCE ($90/mois, 50 threads).
La veille tarifaire pose-t-elle un problème au regard du RGPD ?
Un prix public n'est pas une donnée personnelle. Le sujet devient sensible dès que vous capturez des noms, des avis signés ou des coordonnées : minimisez la collecte et documentez la finalité.
Que faire quand la page change de structure et fausse les relevés ?
Faites échouer le relevé plutôt que d'enregistrer une valeur douteuse. L'assertion sur le marqueur transforme une refonte de page en alerte immédiate, là où un parseur permissif produit des semaines de données fausses.
Guides connexes
- Le démarrage rapide CaptchaAI
- La résolution de CAPTCHA en test autorisé
- Tester l'endpoint sur vos formulaires
- Intégrer la résolution à votre CI
- Résoudre reCAPTCHA v2 via l'API
Vos séries tarifaires méritent mieux qu'un graphique plat. – Obtenez votre clé CaptchaAI.