Le fingerprinting du navigateur expliqué pour les scrapers
Le fingerprinting du navigateur consiste à identifier un visiteur à partir de l'ensemble des caractéristiques de son navigateur, et non à l'aide d'un cookie ou d'un compte. Les sites l'utilisent pour repérer les visiteurs qui reviennent, détecter la fraude et reconnaître l'automatisation. Si vous scrapez le web, vous le rencontrerez. Ce guide explique ce qui est mesuré, pourquoi une seule incohérence pose problème, et comment garder un profil unique, cohérent et bien élevé pour collecter des données publiques. Il explique aussi les limites de ce que l'ajustement d'empreinte peut faire, et de ce qu'il ne doit pas faire.
De quoi est faite une empreinte
Aucune valeur isolée n'identifie un navigateur, mais plusieurs petites valeurs combinées le font souvent. Les entrées courantes incluent :
- User agent et client hints. Le nom du navigateur, sa version et le système d'exploitation qu'il annonce.
- Géométrie de l'écran et de la fenêtre. Taille de l'écran, profondeur de couleur, rapport de pixels de l'appareil et taille de la zone d'affichage.
- Langue et fuseau horaire. L'en-tête
Accept-Language,navigator.languageset le fuseau horaire annoncé par le navigateur. - Polices installées. Les polices que la page peut détecter, qui diffèrent selon le système d'exploitation et les logiciels installés.
- Sortie du canvas, du WebGL et de l'audio. De légères différences dans la façon dont la pile graphique ou audio dessine une image de test ou traite un son.
- Caractéristiques réseau. La négociation TLS, les paramètres HTTP/2 et l'ordre des en-têtes de requête. Ils sont visibles par le serveur avant même l'exécution du moindre JavaScript.
Les scripts de fingerprinting combinent ces éléments en un hash ou un score. Plus il y a de signaux stables et inhabituels, plus le résultat est identifiant.
Pourquoi une incohérence se remarque
Un vrai navigateur est cohérent en interne. Son système d'exploitation correspond à ses polices, son fuseau horaire correspond à son réglage de langue, et la taille de son écran correspond à l'appareil sur lequel il tourne. Les scrapers brisent souvent cette cohérence sans le vouloir :
- Un user agent copié d'un navigateur de bureau, envoyé depuis un serveur qui n'a aucune police installée.
- Un en-tête
Accept-Languageallemand sur une requête dont l'IP se trouve dans un autre pays, avec un fuseau horaire qui ne correspond ni à l'un ni à l'autre. - Un environnement headless qui annonce une taille de fenêtre qu'aucun moniteur réel n'utilise.
- Un profil tout neuf à chaque exécution, si bien que les cookies et l'historique ne ressemblent jamais à ceux d'un visiteur qui revient.
Chaque incohérence est un petit signal. Ensemble, elles peuvent faire passer une requête de « visiteur ordinaire » à « mérite un examen plus attentif ».
Étape 1 : mesurez votre propre configuration
Vous pouvez voir ce qu'une page apprend de votre client en chargeant une page de test de fingerprinting que vous contrôlez, ou une page de diagnostic que vous exécutez en local. Regardez les valeurs et demandez-vous si elles décrivent une machine cohérente. Voici un exemple Playwright minimal qui en affiche quelques-unes :
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context(locale="en-GB", timezone_id="Europe/London")
page = context.new_page()
page.goto("https://example.com") # remplacez par une page que vous possédez
print(page.evaluate("""() => ({
language: navigator.language,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
platform: navigator.platform,
viewport: [innerWidth, innerHeight]
})"""))
browser.close()
Étape 2 : gardez une seule identité par profil
L'habitude la plus utile consiste à traiter chaque identité de scraping comme un profil unique. Donnez-lui un seul ensemble de caractéristiques et conservez-les pendant toute sa durée de vie :
- Une seule version de navigateur, un seul user agent et un seul système d'exploitation.
- Une locale, une langue et un fuseau horaire correspondant à la région d'où vient le trafic.
- Une zone d'affichage et un facteur d'échelle d'appareil correspondant à un écran réel.
- Un pot de cookies persistant, pour que le profil se comporte comme un visiteur qui revient.
Modifier l'une de ces caractéristiques à chaque requête est plus suspect que de les garder stables. La cohérence est ce qui rend un profil ordinaire.
Étape 3 : rythmez le profil comme un visiteur
Le fingerprinting n'est qu'une des entrées. Les sites surveillent aussi la vitesse à laquelle un profil parcourt le site. Un profil qui charge deux cents pages produit en une minute n'est pas un humain, quelle que soit son empreinte. Espacez les requêtes, mettez les résultats en cache, et arrêtez-vous lorsqu'une page indique qu'il faut le faire. La liste de bonnes pratiques pour scraper sans se faire bloquer couvre le rythme plus en détail.
Étape 4 : connaissez les limites
L'ajustement d'empreinte ne peut pas faire ressembler un profil automatisé à une personne qui n'est pas là. Les sites qui s'appuient sur le fingerprinting le combinent généralement avec des limites de débit, des contrôles de compte et, parfois, un captcha. Lorsqu'un captcha apparaît, il vous faut un token fourni par un solveur, et non davantage de retouches d'empreinte. Le type de captcha disponible chez Scarnox aujourd'hui est PopularCaptcha ; le guide Python PopularCaptcha montre la requête. Pour une vue plus large des widgets existants, lisez les types de captcha expliqués.
Plus important encore, l'évasion par le fingerprinting n'est pas une autorisation d'ignorer les règles d'un site. Si le propriétaire a restreint l'accès automatisé, la bonne décision est de s'arrêter, pas de rendre votre profil plus difficile à repérer. Le fingerprinting est aussi une question de vie privée. Certains sites l'utilisent pour suivre des personnes d'une visite à l'autre, et c'est une raison de plus de ne collecter que ce dont votre projet a besoin.
Scrapez de manière responsable
- Lisez le
robots.txtet les conditions d'utilisation avant de scraper un site. - Utilisez moins de requêtes, plus lentes, et mettez en cache ce que vous avez déjà collecté.
- Ne construisez pas de profils pour vous faire passer pour de vraies personnes ni pour contourner un blocage.
- Ne stockez pas de données personnelles dont vous n'avez pas besoin, et traitez avec soin celles que vous stockez.
Où aller ensuite
Si votre cible se trouve derrière une vérification au niveau du navigateur, commencez par la détection des navigateurs headless, qui couvre les signaux propres aux navigateurs automatisés. Les pages qui ont besoin de JavaScript pour afficher leur contenu sont traitées dans le scraping des sites JavaScript.
Démarrez avec un crédit d'essai gratuit, sans carte bancaire : créez un compte et testez le flux PopularCaptcha sur une page que vous possédez. Pour les tarifs actuels, consultez la page tarifs.