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 :
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 :
- Des proxys de datacenters : plus de 770 000 adresses IP de datacenters.
- Des proxys résidentiels : plus de 72 millions d’adresses IP résidentielles dans plus de 195 pays.
- Des proxys de FAI : plus de 700 000 adresses IP de FAI.
- Des proxys mobiles : plus de 7 millions d’adresses IP mobiles.