Évitez la détection des bots grâce à Playwright Stealth

Contournez la détection des bots avec le plug-in Playwright Stealth. Notre guide rapide vous explique comment intégrer Stealth à vos scripts Playwright, afin que votre automatisation Web reste fluide et indétectable.
11 min de lecture
Illustrative image for Playwright Stealth anti-bot detection

Ce tutoriel Playwright Stealth abordera les sujets suivants :

  • Qu’est-ce que la détection des bots et pourquoi elle est un problème pour Playwright.
  • Explications concernant Playwright Stealth.
  • Comment l’utiliser à la fois en Python et en JavaScript pour éviter d’être bloqué.

C’est parti !

La détection des bots est la principale limitation de Playwright

Playwright est l’une des bibliothèques Python les plus populaires pour l’automatisation des navigateurs. Dans le détail, elle est fiable et largement utilisée, car elle est développée et maintenue directement par Microsoft. Son API intuitive et de haut niveau permet de contrôler facilement les navigateurs avec ou sans affichage dans différents langages de programmation. Playwright est donc un excellent outil pour le développement de bots multinavigateurs et multiplateformes, les tests automatisés et le web scraping.

Playwright est l’une des bibliothèques Python les plus populaires pour l’automatisation des navigateurs. Dans le détail, elle est fiable et largement utilisée, car elle est développée et maintenue directement par Microsoft. Son API intuitive et de haut niveau permet de contrôler facilement les navigateurs avec ou sans affichage dans différents langages de programmation. Playwright est donc un excellent outil pour le développement de bots multinavigateurs et multiplateformes, les tests automatisés et le web scraping.

Le principal problème de la bibliothèque est qu’elle peut être facilement détectée et bloquée par les technologies anti-bot, en particulier lors de l’utilisation de navigateurs en mode headless (sans affichage). Comment est-ce possible ? Eh bien, Playwright modifie automatiquement la valeur des propriétés spéciales et des en-têtes lors du contrôle des navigateurs headless. Par exemple, il définit le paramètre navigator.webdriver de Chrome sur true.

Les solutions de détection de bots connaissent ces configurations et les analysent pour vérifier si l’utilisateur actuel est un humain ou un bot. Lorsque ces mécanismes détectent des paramètres suspects, ils classent l’utilisateur dans la catégorie des bots et le bloquent immédiatement.

Par exemple, envisagez ce test de détection de bots pour le mode headless. Visitez la page dans votre navigateur et vous verrez :

Page Web affichant le message « Vous n’êtes pas Chrome headless »

Parfait, c’est le résultat auquel vous vous attendiez !

Maintenant, essayez de visiter la même page dans Playwright vanilla et extrayez la réponse de la page :


import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        # launch the browser
        browser = await p.chromium.launch()
        # open a new page
        page = await browser.new_page()

        # visit the target page
        await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")

        # extract the answer contained on the page
        answer_element = page.locator("#res")
        answer = await answer_element.text_content()

        # print the resulting answer
        print(f'The result is: "{answer}"')

        # close the browser and release its resources
        await browser.close()

asyncio.run(main())

Exécutez le programme Python et il affichera :

The result is: "You are Chrome headless"

Cela signifie que la page de test d’automatisation des bots a pu détecter que la demande faite par votre script automatique provenait d’un navigateur headless.

En d’autres termes, Playwright est un outil limité qui peut être facilement bloqué par les technologies de détection des bots. Pour éviter cela, vous pouvez modifier manuellement les configurations par défaut et espérer réussir. Sinon, installez le plug-in Playwright Stealth !

Plug-in Playwright Stealth : qu’est-ce que c’est et comment il fonctionne

playwright-stealth est un package Python qui étend Playwright en remplaçant des configurations spécifiques pour éviter la détection de bots. Playwright Stealth est un portage du package npm puppeteer-extra-plugin-stealth qui utilise des modules d’évasion intégrés pour éviter les fuites et modifier les propriétés qui exposent les navigateurs automatisés en tant que bots. Par exemple, il supprime la propriété navigator.webdriver et supprime « HeadlessChrome » de l’en-tête User-Agent défini par Chrome en mode headless par défaut.

L’objectif du plug-in Stealth est de permettre à une instance de navigateur headless automatisé de réussir tous les tests de détection de bots sur sannysoft.com. Au moment de la rédaction du présent document, cet objectif était atteint. Cependant, comme indiqué dans la documentation officielle, il existe toujours des méthodes pour détecter les navigateurs headless. Donc, ce qui fonctionne aujourd’hui ne fonctionnera peut-être pas demain. Il n’est pas totalement possible de contourner tous les mécanismes de détection des bots, mais la bibliothèque vise à ce que ce processus constitue le meilleur défi possible.

Comment utiliser Playwright Stealth pour éviter la détection de bots

Suivez les étapes ci-dessous pour apprendre à intégrer Playwright Stealth dans un script Python playwright afin d’éviter d’être bloqué.

Étape 1 : configuration d’un projet Python Playwright

Avertissement : si vous avez déjà un projet Python Playwright en place, vous pouvez ignorer cette étape.

Tout d’abord, assurez-vous que Python 3 est installé sur votre machine. Sinon, téléchargez le programme d’installation, exécutez-le et suivez-en les instructions.

Ensuite, utilisez les commandes ci-dessous pour configurer un projet Python appelé playwright-demo :

mkdir playwright-demo
cd playwright-demo

Ces commandes créent le dossier playwright-demo et l’intègrent dans le terminal.

Initialisez un environnement virtuel Python et activez-le :

python -m venv env
env/Scripts/activate

Lancez la commande suivante pour installer Playwright :

pip install playwright 

Cela peut prendre un certain temps, soyez patient.

Ensuite, installez les navigateurs requis avec :

playwright install

Ouvrez le dossier du projet dans l’IDE Python de votre choix et créez un fichier index.py. Initialisez-le avec les lignes suivantes :

import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()

        # browser automation logic...        

        await browser.close()

asyncio.run(main())

Le script ci-dessus lance une instance de Chromium en mode headless, ouvre une nouvelle page et ferme enfin le navigateur. Voici à quoi ressemble un script Python Playwright de base.

Pour le faire fonctionner, exécutez :

python index.py

Très bien, vous avez maintenant un projet Playwright prêt à être étendu avec le plug-in Stealth !

Étape 2 : installation et utilisation du plug-in Stealth

Installez le plug-in Playwright Stealth avec :

pip install playwright-stealth

Ouvrez votre fichier index.py et ajoutez l’importation ci-dessous à votre script Playwright :

from playwright_stealth import stealth_async 

Ou si vous utilisez l’API de synchronisation :

from playwright_stealth import stealth_sync

Pour l’enregistrer dans Playwright, transmettez l’objet page à la fonction importée comme suit :

await stealth_async(page)

Ou si vous utilisez l’API de synchronisation :

stealth_async(page)

La fonction stealth_async() étendra page en remplaçant certaines configurations par défaut pour éviter la détection de bots.

Fantastique, n’est-ce pas ? Il ne reste plus qu’à visiter la page cible et à recommencer le test.

Étape 3 : pour terminer

Intégrez le plug-in Stealth dans le script Playwright présenté au début de l’article :

import asyncio
from playwright.async_api import async_playwright
from playwright_stealth import stealth_async
async def main():
    async with async_playwright() as p:
        # launch the browser
        browser = await p.chromium.launch()
        # open a new page
        page = await browser.new_page()

        # register the Playwright Stealth plugin
        await stealth_async(page)

        # visit the target page
        await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")

        # extract the message contained on the page
        message_element = page.locator("#res")
        message = await message_element.text_content()

        # print the resulting message
        print(f'The result is: "{message}"')

        # close the browser and release its resources
        await browser.close()

asyncio.run(main())

Exécutez-la à nouveau, et cette fois, il affichera :

The result is: "You are not Chrome headless"

Et voilà ! La page cible, dotée de fonctionnalités de détection des bots, ne peut plus signaler votre script automatisé Playwright comme étant un bot.

Bravo ! Vous maîtrisez désormais l’art de Playwright Stealth, et aucune technologie de détection de bots ne peut plus vous intimider.

En extra : Playwright Stealth en JavaScript

Si vous êtes un utilisateur JavaScript Playwright et que vous souhaitez obtenir le même résultat, vous devez utiliser le package npm puppeteer-extra-plugin-stealth. Cela fonctionne à la fois pour Puppeteer Extra et Playwright Extra. Si vous n’êtes pas familier avec ces projets, il s’agit essentiellement de versions améliorées des deux bibliothèques d’automatisation des navigateurs. Plus précisément, ils ajoutent des fonctionnalités d’extension via des plug-ins à Puppeteer et Playwright, respectivement.

Supposons donc que vous disposiez du script JavaScript Playwright suivant et que vous souhaitiez l’intégrer au plugin Stealth :

import { chromium } from "playwright"

(async () => {
    // set up the browser and launch it
    const browser = await chromium.launch()
    // open a new blank page
    const page = await browser.newPage()

    // navigate the page to the target page
    await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")

    // extract the message contained on the page
    const messageElement = page.locator('#res')
    const message = await messageElement.textContent()

    // print the resulting message
    console.log(`The result is: "${message}"`)

  // close the browser and release its resources
  await browser.close()
})()

Tout d’abord, installez playwright-extra et puppeteer-extra-plugin-stealth :

npm install playwright-extra puppeteer-extra-plugin-stealth 

Ensuite, importez chromium depuis playwright-extra au lieu de playwright et importez StealthPlugin depuis puppeteer-extra-plugin-stealth :

import { chromium } from "playwright-extra"
import StealthPlugin from "puppeteer-extra-plugin-stealth"

Ensuite, enregistrez le plug-in Stealth avec :

chromium.use(StealthPlugin())

Rassemblez le tout et vous obtiendrez :

import { chromium } from "playwright-extra"
import StealthPlugin from "puppeteer-extra-plugin-stealth"

(async () => {
    // configure the Stealth plugin
    chromium.use(StealthPlugin())

    // set up the browser and launch it
    const browser = await chromium.launch()
    // open a new blank page
    const page = await browser.newPage()

    // navigate the page to the target page
    await page.goto("https://arh.antoinevastel.com/bots/areyouheadless")

    // extract the message contained on the page
    const messageElement = page.locator('#res')
    const message = await messageElement.textContent()

    // print the resulting message
    console.log(`The result is: "${message}"`)

    // close the browser and release its resources
    await browser.close()
})()

Génial ! Vous venez d’intégrer le plug-in Stealth à Playwright en JavaScript.

Conclusion

Dans ce guide, vous avez compris pourquoi la détection des bots représente un défi pour Playwright et comment y remédier. Grâce à la bibliothèque Python Playwright Stealth, vous pouvez améliorer la configuration par défaut du navigateur pour contourner la détection des bots. Comme cela est prouvé ici, une approche similaire peut également être appliquée en JavaScript.

Quelle que soit la complexité du script d’automatisation de votre navigateur dans Playwright, les systèmes avancés de détection des bots poseront toujours un problème. Bien que vous puissiez envisager d’utiliser un autre package d’automatisation du navigateur, la cause première de la détection réside dans le navigateur, et non dans la bibliothèque elle-même. La solution réside dans un navigateur évolutif doté d’une fonctionnalité de contournement des bots qui s’intègre parfaitement à n’importe quelle bibliothèque d’automatisation de navigateur. Un tel navigateur existe et est connu sous le nom de Scraping Browser !

Le Scraping Browser de Bright Data est un navigateur cloud hautement évolutif compatible avec Playwright, Puppeteer et Selenium. Il change automatiquement l’adresse IP de sortie à chaque requête et peut gérer les empreintes numériques du navigateur, les nouvelles tentatives automatiques et la résolution CAPTCHA pour vous. Ces prouesses sont possibles grâce aux fonctionnalités de déverrouillage basées sur un proxy sur lesquelles il repose.

Les proxys de Bright Data sont utilisés par des entreprises du Fortune 500 et par plus de 20 000 clients. Ce réseau mondial et fiable de proxys comprend :