Retour aux mises à jour
New releaseAug 14, 2026

invisible_playwright v0.7.0

Navigateur antidetect gratuit et furtif pour Playwright : empreinte Firefox headless non détectée. Scraping Python, contournement de recaptcha et de détection de bots. Open source.

Partager
invisible_playwright

Furtivité antidetect gratuite pour navigateur Playwright : empreinte Firefox non détectée, avec ou sans tête.
Scraping web Python et contournement de captcha. Open source, et réussit tous les tests de détection de bots.

invisible_playwright - 5/5 suites de détection réussies

Comment ça fonctionne

Les anti-bots posent deux questions, et reCAPTCHA, hCaptcha et Cloudflare Turnstile notent les réponses. invisible_playwright répond oui aux deux.

1. Est-ce un vrai navigateur ? Oui. C'est Firefox, patché au niveau du code source C++.

  • L'empreinte du navigateur est définie dans le moteur, pas injectée dans la page : navigator, écran, GPU/WebGL, canvas, polices, audio, WebRTC, fuseau horaire, réseau. Avec ou sans tête, les mêmes valeurs dans les deux cas.
  • Aucun shim JS, aucune surcharge, aucune couture à lire.

2. Une vraie personne l'utilise-t-elle ? Oui. Les actions sont humanisées dans le pilote.

  • Chaque clic, survol et glisser suit un tracé de souris naturel avec un timing humain, pas de curseur téléporté.
  • Chaque saisie est octet pour octet identique à une vraie souris : source d'entrée réelle, pression, événements de confiance.

Piloté par l'API Playwright standard. Analyse complète : feder-cr/firefox_antidetect_patch.


Vous voyez encore des captchas ou des anti-bots ? C'est le proxy.

Une fois le navigateur géré, il cesse d'être la variable. Si vous êtes toujours bloqué, l'indice n'est plus le navigateur, c'est l'IP d'où vous venez. Environ 90 % des proxys sont publics : n'importe qui peut louer la même adresse, elle est donc déjà connue et figure sur les listes d'IP bloquées que les sites consultent. Un navigateur parfait sur une IP connue perd quand même.


Installation

pip install invisible-playwright
python -m invisible_playwright fetch      # téléchargement unique ~238 Mo (~544 Mo décompressé), vérifié par sha256

Plateformes prises en charge : Windows x86_64, Linux x86_64 / arm64. macOS n'est plus pris en charge (les versions se sont arrêtées à firefox-20) ; sur un Mac, le paquet refuse au lancement avec un message clair plutôt que de télécharger un binaire qui n'existe plus.


Utilisation

Empreinte aléatoire par session

100 % compatible Playwright - synchrone et asynchrone, toutes les méthodes, zéro changement d'API. Si vous utilisez déjà Playwright, le passage se fait en deux lignes :

- from playwright.sync_api import sync_playwright
- with sync_playwright() as p:
-     browser = p.firefox.launch()
+ from invisible_playwright import InvisiblePlaywright
+ with InvisiblePlaywright() as browser:

Chaque session obtient une empreinte distincte (GPU, audio, polices, écran, ~200 champs) et un mouvement de souris en courbe de Bézier.

Synchrone

from invisible_playwright import InvisiblePlaywright

with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
    page = browser.new_page()
    page.goto("https://example.com")
    page.click("#submit")   # la souris trace un arc vers le bouton sur une courbe de Bézier

Asynchrone

from invisible_playwright.async_api import InvisiblePlaywright

async with InvisiblePlaywright(proxy={"server": "socks5://...", "username": "u", "password": "p"}) as browser:
    page = await browser.new_page()
    await page.goto("https://example.com")
    await page.click("#submit")

L'objet browser est un playwright.sync_api.Browser / playwright.async_api.Browser - chaque méthode Playwright fonctionne telle quelle.

Journalisez la graine pour rejouer une exécution :

sf = InvisiblePlaywright()
with sf as browser:
    print("seed =", sf.seed)
    # ...

Empreinte reproductible

with InvisiblePlaywright(seed=42) as browser:
    ...   # même GPU, même hash canvas, même contexte audio, à chaque exécution

Proxys

proxy = {
    "server": "socks5://gate.example.com:1080",
    "username": "user",
    "password": "pass",
}
with InvisiblePlaywright(proxy=proxy) as browser:
    ...

Schémas pris en charge : socks5, socks4, http, https. Le DNS est routé via le proxy par défaut, aucune fuite locale.

Fuseau horaire

Le fuseau horaire du navigateur suit timezone= :

# par défaut : le fuseau horaire est dérivé automatiquement de l'IP de sortie (sortie du proxy si un
# proxy est défini, sinon l'IP publique propre de l'hôte)
with InvisiblePlaywright(proxy=proxy) as browser:
    ...

# une zone IANA explicite l'emporte toujours, la seule façon de forcer une zone spécifique
with InvisiblePlaywright(proxy=proxy, timezone="America/New_York") as browser:
    ...

Épinglage de champs d'empreinte spécifiques

Par défaut, tout vient de seed. Pour forcer des valeurs spécifiques tandis que le reste reste dérivé de la graine :

with InvisiblePlaywright(
    seed=42,
    pin={
        "gpu.renderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 4090 Direct3D11)",
        "gpu.vendor":   "Google Inc. (NVIDIA)",
        "screen.width":  2560,
        "screen.height": 1440,
        "hardware.concurrency": 16,
    },
) as browser:
    ...

La liste complète des clés épinglables, comment l'épinglage interagit avec l'échantillonneur bayésien, et les schémas courants se trouvent dans docs/pinning.md.


CLI

La commande installée est invisible-playwright, avec un trait d'union. python -m invisible_playwright fonctionne de manière identique et ne nécessite rien dans le PATH.

invisible-playwright fetch    # télécharge le moteur s'il manque, vérifie chaque moteur en cache
                              # contre le sceau, affiche le chemin
invisible-playwright version  # versions du wrapper, du cœur et du moteur, et où le
                              # moteur est mis en cache

Documentation, guides et comparaisons

Tout se lit mieux, et est consultable, dans le wiki, organisé en quatre sections plutôt qu'une seule liste plate :

  • Documentation - installation, le passage en deux lignes depuis Playwright standard, la configuration proxy/fuseau horaire, l'épinglage de champs spécifiques, la CLI.
  • Guides - comment la détection fonctionne réellement, en sept groupes : identité du navigateur, canvas/WebGL/polices/ audio, réseau et WebRTC, la couche d'automatisation, les agents IA, les détecteurs eux-mêmes expliqués depuis la source, et les tests.
  • Comparaisons - contre Camoufox, Patchright, nodriver et playwright-stealth, et l'argument en faveur de Firefox plutôt que Chromium en général.
  • Intégrations - Scrapy, Crawlee, Robot Framework, CodeceptJS, exécuteurs de tests, Playwright MCP, et les frameworks auxquels il ne convient pas, par nom.

Si vous ne savez pas par où commencer : Trois façons de rendre Playwright non détecté est la carte vers laquelle la plupart des autres pages renvoient, Playwright détecté comme bot sur un site est l'ordre de dépannage, et navigator.webdriver n'est pas l'indice que vous croyez explique la propriété la plus célèbre de ce domaine et pourquoi la patcher seule ne vous apporte quasiment rien.

Projets connexes

Les voisins open source, et à quoi sert chacun.

Côté Firefox

  • Camoufox - un Firefox anti-détection qui patche aussi au niveau C++. Il couvre une surface plus large et fournit sa propre base de données d'empreintes ; ce projet dérive une empreinte d'une graine avec un échantillonneur bayésien, donc un nombre reproduit une machine. Comparaison complète.
  • LibreWolf - un fork de Firefox avec des paramètres de confidentialité par défaut. Il fournit un binaire configuré pour que les gens naviguent ; celui-ci fournit des patches source plus un wrapper d'automatisation.
  • arkenfox/user.js - durcissement de Firefox via les préférences. Là où une préférence suffit, utilisez-la ; ce projet patche le C++ là où une ne suffit pas.

Côté Chromium

Lequel de ces outils convient dépend de la couche à laquelle se situe votre problème, et de si vous avez besoin de Firefox ou de Chromium. Trois façons de rendre Playwright non détecté passe en revue ce que chaque couche peut et ne peut pas atteindre, y compris ce que celui-ci coûte.

Si vous choisissez entre des moteurs plutôt que des outils, notez qu'une grande part des frameworks d'agents IA pilotent Chromium via CDP, ce qui tranche la question pour vous : Agents navigateurs IA et furtivité.


Licence

MIT - voir LICENSE. Le binaire Firefox patché est distribué sous MPL-2.0 (licence amont de Firefox). Les patches C++ contre mozilla-central qui produisent ce binaire se trouvent sur feder-cr/firefox_antidetect_patch.


Avertissement

Ce projet est uniquement à des fins éducatives. Il est fourni tel quel, sans aucune garantie. Je n'assume aucune responsabilité quant à son utilisation. Utilisez-le à vos propres risques et conformément aux lois de votre juridiction.


Construit par Federico Elia  LinkedIn

tests License: MIT Python 3.11+ Firefox 151.0 GitHub stars

Catégories