Bot-Erkennung mit Playwright Stealth vermeiden

Überlisten Sie die Bot-Erkennung mit dem Playwright Stealth-Plugin. Unsere Kurzanleitung zeigt Ihnen, wie Sie Stealth in Ihre Playwright-Skripte integrieren, damit Ihre Web-Automatisierung reibungslos und nicht feststellbar funktioniert.
9 min read

Dieses Playwright Stealth-Tutorial behandelt Folgendes:

  • Was Bot-Erkennung ist und warum sie ein Problem für Playwright darstellt.
  • Was Playwright Stealth ist.
  • Wie Sie es sowohl in Python als auch in JavaScript verwenden können, um nicht blockiert zu werden.

Legen wir also gleich los!

Bot-Erkennung als größte Einschränkung von Playwright

Playwright ist eine der beliebtesten Python-Bibliotheken für die Browser-Automatisierung. Es ist zuverlässig und weit verbreitet, da es direkt von Microsoft entwickelt und gepflegt wird. Seine hochentwickelte und intuitive API macht es einfach, Headless- oder Headed-Browser in verschiedenen Programmiersprachen zu steuern. Das bedeutet, dass Playwright ein großartiges Tool für die browser- und plattformübergreifende Bot-Entwicklung, automatisierte Tests und Web Scraping ist.

Playwright ist eine der beliebtesten Python-Bibliotheken für die Browser-Automatisierung. Es ist zuverlässig und weit verbreitet, da es direkt von Microsoft entwickelt und gepflegt wird. Seine hochentwickelte und intuitive API macht es einfach, Headless- oder Headed-Browser in verschiedenen Programmiersprachen zu steuern. Das bedeutet, dass Playwright ein großartiges Tool für die browser- und plattformübergreifende Bot-Entwicklung, automatisierte Tests und Web Scraping ist.

Das Hauptproblem mit der Bibliothek ist, dass sie von Anti-Bot-Technologien leicht entdeckt und blockiert werden kann, insbesondere wenn Browser im Headless-Modus verwendet werden. Wie ist das möglich? Nun, Playwright ändert bei der Steuerung von Headless-Browsern automatisch den Wert spezieller Eigenschaften und Header. Zum Beispiel setzt es die Chome-Einstellung navigator.webdriver auf true.

Bot-Erkennungslösungen kennen diese Konfigurationen und analysieren sie, um zu überprüfen, ob der aktuelle Benutzer ein Mensch oder ein Bot ist. Wenn diese Mechanismen verdächtige Einstellungen erkennen, stufen sie den Benutzer als Bot ein und blockieren ihn sofort.

Stellen Sie sich zum Beispiel diesen Bot-Erkennungstest für den Headless-Modus vor. Besuchen Sie die Seite in Ihrem Browser und Sie werden Folgendes sehen:

Webseite, auf der die Meldung „Sie sind nicht Chrome Headless“ angezeigt wird

Perfekt, das ist das Ergebnis, das Sie erwarten würden!

Versuchen Sie nun, dieselbe Seite in Playwright Vanilla aufzurufen und die Antwort aus der Seite zu extrahieren:


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())

Führen Sie das Python-Programm aus und es wird drucken:

The result is: "You are Chrome headless"

Das bedeutet, dass die Testseite für die Bot-Automatisierung in der Lage war, die von Ihrem automatisierten Skript gestellte Anfrage als von einem Headless-Browser stammend zu erkennen.

Mit anderen Worten: Playwright ist ein eingeschränktes Tool, das leicht durch Bot-Erkennungstechnologien gestoppt werden kann. Um dies zu vermeiden, können Sie die Standardkonfigurationen manuell überschreiben und auf einen Erfolg hoffen. Andernfalls installieren Sie das Playwright Stealth-Plugin!

Playwright Stealth-Plugin: Was es ist und wie es funktioniert

playwright-stealth ist ein Python-Paket, das Playwright erweitert, indem es bestimmte Konfigurationen überschreibt, um Bot-Erkennung zu vermeiden. Playwright Stealth ist ein Port des npm-Pakets puppeteer-extra-plugin-stealth, das integrierte Umgehungsmodule verwendet, um Lecks zu vermeiden und Eigenschaften zu ändern, die automatisierte Browser als Bots entlarven. So löscht es beispielsweise die Eigenschaft navigator.webdriver und entfernt „HeadlessChrome“ aus dem User-Agent-Header, den Chrome im Headless-Modus standardmäßig setzt.

Das Ziel des Stealth-Plugins ist es, einer automatisierten Headless-Browser-Instanz zu ermöglichen, alle Bot-Erkennungstests auf sannysoft.com erfolgreich zu bestehen. Zum Zeitpunkt des Schreibens wurde dieses Ziel erreicht. Wie in der offiziellen Dokumentation erwähnt, gibt es jedoch immer noch Methoden zur Erkennung von Headless-Browsern. Also, was heute funktioniert, funktioniert morgen vielleicht nicht mehr. Die Umgehung aller Bot-Erkennungsmechanismen ist nicht vollständig möglich, aber die Bibliothek zielt darauf ab, diesen Prozess so herausfordernd wie möglich zu gestalten.

Wie man Playwright Stealth verwendet, um Bot-Erkennung zu vermeiden

Folgen Sie den unten stehenden Schritten, um zu erfahren, wie Sie Playwright Stealth in ein playwright-Python-Skript integrieren, um zu vermeiden, blockiert zu werden.

Schritt 1: Richten Sie ein Playwright Python-Projekt ein.

Disclaimer: Wenn Sie bereits ein Playwright-Python-Projekt eingerichtet haben, können Sie diesen Schritt überspringen.

Stellen Sie zunächst sicher, dass Python 3 auf Ihrem Computer installiert ist. Laden Sie ansonsten das Installationsprogramm herunter, führen Sie es aus und folgen Sie den Anweisungen des Installationsassistenten.

Verwenden Sie als Nächstes die folgenden Befehle, um ein Python-Projekt namens playwright-demo einzurichten:

mkdir playwright-demo
cd playwright-demo

Mit diesen Befehlen wird der Ordner playwright-demo erstellt. Geben Sie ihn in das Terminal ein.

Initialisieren Sie eine virtuelle Python-Umgebung und aktivieren Sie sie:

python -m venv env
env/Scripts/activate

Starten Sie den folgenden Befehl, um Playwright zu installieren:

pip install playwright 

Das wird eine Weile in Anspruch nehmen. Seien Sie also geduldig.

Installieren Sie danach die erforderlichen Browser mit:

playwright install

Öffnen Sie den Projektordner in der Python IDE Ihrer Wahl und erstellen Sie eine index.py-Datei. Initialisieren Sie sie mit den folgenden Zeilen:

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())

Das obige Skript startet eine Instanz von Chromium im Headless-Modus, öffnet eine neue Seite und schließt schließlich den Browser. So sieht ein einfaches Playwright-Python-Skript aus.

Um es auszuführen, führen Sie Folgendes aus:

python index.py

Großartig, jetzt haben Sie ein Playwright-Projekt, das mit dem Stealth-Plugin erweitert werden kann!

Schritt 2: Installieren und verwenden Sie das Stealth-Plugin.

Installieren Sie das Playwright Stealth-Plugin mit:

pip install playwright-stealth

Öffnen Sie Ihre index.py-Datei und fügen Sie den folgenden Import zu Ihrem Playwright-Skript hinzu:

from playwright_stealth import stealth_async 

Oder wenn Sie die Sync API verwenden:

from playwright_stealth import stealth_sync

Um dies in Playwright zu registrieren, übergeben Sie das page-Objekt wie folgt an die importierte Funktion:

await stealth_async(page)

Oder wenn Sie die Sync API verwenden:

stealth_async(page)

Die Funktion stealth_async() erweitert page, indem sie einige Standardkonfigurationen überschreibt, um eine Bot-Erkennung zu vermeiden.

Fantastisch! Es bleibt nur noch, die Zielseite aufzurufen und den Test zu wiederholen.

Schritt 3: Bringen Sie alles zusammen.

Integrieren Sie das Stealth-Plugin in das Playwright-Skript, das am Anfang des Artikels vorgestellt wurde:

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())

Führen Sie dies erneut aus, und dieses Mal wird es drucken:

The result is: "You are not Chrome headless"

Und voilà! Die Zielseite, die mit Bot-Erkennungsfunktionen ausgestattet ist, kann Ihr automatisiertes Playwright-Skript nicht mehr als Bot kennzeichnen.

Gut gemacht! Sie beherrschen jetzt die Kunst von Playwright Stealth und keine Bot-Erkennungstechnologie kann Sie mehr einschüchtern.

Extra: Playwright Stealth in JavaScript

Wenn Sie ein Playwright-JavaScript-Benutzer sind und dasselbe Ergebnis erzielen möchten, müssen Sie das npm-Paket puppeteer-extra-plugin-stealth verwenden. Das funktioniert sowohl für Puppeteer Extra als auch für Playwright Extra. Falls Sie mit diesen Projekten nicht vertraut sind, es sind im Wesentlichen erweiterte Versionen der beiden Browser-Automatisierungsbibliotheken. Insbesondere fügen sie Erweiterungsfunktionen über Plugins zu Puppeteer bzw. Playwright hinzu.

Nehmen wir also an, Sie haben das folgende Playwright-JavaScript-Skript und möchten es in das Stealth-Plugin integrieren:

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()
})()

Installieren Sie zuerst playwright-extra und puppeteer-extra-plugin-stealth:

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

Importieren Sie als Nächstes Chromium von playwright-extra statt playwright und importieren Sie StealthPlugin von puppeteer-extra-plugin-stealth:

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

Registrieren Sie dann das Stealth-Plugin mit:

chromium.use(StealthPlugin())

Bringen Sie alles zusammen und Sie erhalten:

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()
})()

Fantastisch! Sie haben gerade das Stealth-Plugin in JavaScript in Playwright integriert.

Fazit

Durch diese Anleitung haben Sie verstanden, warum die Bot-Erkennung eine Herausforderung für Playwright darstellt und wie Sie sie umgehen können. Dank der Python-Bibliothek Playwright Stealth können Sie die Standardkonfiguration des Browsers verbessern, um die Bot-Erkennung zu umgehen. Wie hier bewiesen, kann ein ähnlicher Ansatz auch in JavaScript angewendet werden.

Unabhängig davon, wie ausgefeilt Ihr Skript zur Browser-Automatisierung in Playwright ist, werden fortgeschrittene Bot-Erkennungssysteme immer noch ein Problem darstellen. Sie könnten zwar die Verwendung eines anderen Browser-Automatisierungspakets in Betracht ziehen, aber die Ursache für die Erkennung liegt im Browser und nicht in der Bibliothek selbst. Die Lösung liegt in einem skalierbaren Browser mit Anti-Bot-Umgehungsfunktionalität, der sich nahtlos in jede Browser-Automatisierungsbibliothek integrieren lässt. Einen solcher Browser gibt es und ist bekannt als Scraping Browser!

Der Scraping Browser von Bright Data ist ein hoch skalierbarer, cloudbasierter Browser, der mit Playwright, Puppeteer und Selenium kompatibel ist. Er wechselt bei jeder Anfrage automatisch die Ausgangs-IP und kann Browser-Fingerprinting, automatische Wiederholungsversuche und CAPTCHA-Auflösung für Sie übernehmen. Diese Funktionen sind durch die proxybasierte Freischaltung möglich, auf die er sich stützt.

Die Proxys von Bright Data werden von Fortune-500-Unternehmen und über 20.000 Kunden verwendet. Dieses zuverlässige weltweite Proxy-Netzwerk umfasst: