Browser-Automatisierung in Python: Playwright, Selenium & mehr

Python-Browser-Automatisierung und E2E-Tests im Vergleich.

Inhaltsverzeichnis

Die Wahl des richtigen Browser-Automatisierungs-Stacks in Python beeinflusst Geschwindigkeit, Stabilität und Wartung.
Dieser Überblick vergleicht
Playwright vs Selenium vs Puppeteer vs LambdaTest vs ZenRows vs Gauge
mit Schwerpunkt auf Python, wobei auch erwähnt wird, wo Node.js oder andere Sprachen eine Rolle spielen.

Playwright trace viewer Hier haben wir ein Screenshot von Playwright trace viewer

Wann welchen verwenden

Playwright (Python)
Playwright ist eine Open-Source-Browser-Automatisierungs-Bibliothek von Microsoft. Sie kommuniziert mit Chromium, Firefox und WebKit über den Chrome DevTools Protocol (CDP) oder WebSocket, sodass Sie eine API für alle drei Motoren erhalten. Sie kommt mit automatischem Warten: vor jedem Vorgang (Klick, Feld ausfüllen usw.) wartet sie, bis das Element sichtbar, stabil und handhabbar ist, was die Unzuverlässigkeit reduziert und das manuelle sleep oder WebDriverWait überflüssig macht. Die Einrichtung ist minimal (pip install playwright dann playwright install), und die Python-API ist erstklassig (synchrone und asynchrone). Verwenden Sie sie für neue E2E-Test-Suiten, Skripte oder Automatisierung (z. B. MCP-Server in Python die einen Browser steuern). Für eine vollständige Schritt-für-Schritt-Anleitung mit Python-, JavaScript- und TypeScript-Beispielen siehe Playwright: Web Scraping & Testing. Kombinieren Sie sie mit Unit-Testing in Python für den Rest Ihrer Anwendung und verwenden Sie Playwright nur für die Browser-Schicht. Nachteile: neuer als Selenium, also weniger Drittanbieter-Integrationen und weniger Legacy-Material; keine offizielle Unterstützung für sehr alte Browser.

Selenium (Python)
Selenium ist der langjährige Standard für Browser-Automatisierung. Das Selenium-Projekt (Open Source, unterstützt von der OpenJS Foundation) bietet die WebDriver-API: Sie senden Befehle an einen browser-spezifischen Treiber (ChromeDriver, GeckoDriver usw.), der mit dem echten Browser kommuniziert. Selenium unterstützt viele Sprachen (Python, Java, C#, JavaScript usw.) und den breitesten Umfang an Browsern, einschließlich veralteter. Selenium 4+ enthält Selenium Manager, sodass Sie die Treiber nicht mehr manuell herunterladen oder in den Pfad einfügen müssen – der Client lädt den richtigen Treiber für Sie. Die API wartet nicht automatisch; Sie verwenden typischerweise WebDriverWait und erwartete Bedingungen, um unzuverlässige Tests zu vermeiden. Verwenden Sie Selenium, wenn Sie bestehende WebDriver-Suiten warten, die breiteste Ökosystem- und Sprachunterstützung benötigen oder veraltete Browser unterstützen müssen. Es passt zu Python-Designmuster für Clean Architecture, wenn Sie den Treiber hinter einem kleinen Adapter verpacken. Nachteile: Allgemein langsamer und brüchiger als Playwright ohne sorgfältige Warte-Strategie; mehr Boilerplate.

Puppeteer
Puppeteer ist Googles Node.js-Bibliothek zur Steuerung von headless Chrome/Chromium (und Chromium-basiertem Edge). Sie verwendet direkt das Chrome DevTools Protocol und ist die Standardlösung für JavaScript/TypeScript-Teams, die nur Chrome-Automatisierung, PDF-Generierung oder Scraping in Node.js durchführen. Es gibt keine offizielle Python-Bindung; die API ist Node.js-einzig. Wenn Ihr Stack Python ist, verwenden Sie Playwright (selbe „CDP-Control“-Idee mit erstklassigem Python) oder Selenium. Wenn Sie in Node.js sind und nur Chromium benötigen, ist Puppeteer eine starke, gut dokumentierte Option. Nachteile: Nur Chrome/Chromium; keine Firefox- oder WebKit-Unterstützung; keine Python-Unterstützung.

LambdaTest
LambdaTest ist eine kommerzielle Cloud-Testplattform. Sie schreiben weiterhin dieselben Selenium- oder Playwright- (oder Cypress usw.) Skripte lokal, verbinden sich aber stattdessen mit LambdaTests Grid. Sie bieten echte Browser und echte Geräte (einschließlich mobiler) in der Cloud, sodass Sie Tests parallel über viele OS/Browser/Version-Kombinationen ausführen können, ohne Ihre eigene Lab umzubauen. Sie erhalten ein Dashboard für Ergebnisse, Videos und Protokolle. Verwenden Sie es, wenn Sie Cross-Browser-Abdeckung, parallele Ausführung im großen Maßstab oder Mobile Emulation benötigen und die Infrastruktur nicht selbst hosten möchten. Es unterstützt auch Gauge: Sie führen Ihre Gauge-Spezifikationen auf ihrem Selenium-Grid aus. Nachteile: Bezahlbar (mit kostenlosen Tiers); Tests werden über das Netzwerk ausgeführt, sodass Latenz und Verfügbarkeit von ihrem Service abhängen.

ZenRows
ZenRows ist ein kommerzieller Web-Scraping- und Anti-Detection-Service. Sein Scraping Browser ist ein Cloud-Browser, den Sie über Playwright (oder andere CDP-kompatible Tools) steuern: Sie verbinden Ihr Skript mit einem WebSocket-Endpunkt und der Browser wird auf der Seite von ZenRows mit Wohnungsproxys, IP-Rotation, Anti-Bot-Umgehungen (z. B. Cloudflare, DataDome) und optionaler CAPTCHA-Verarbeitung ausgeführt. Sie ändern Ihre Playwright-Logik nicht – nur den Browser-Endpunkt. Verwenden Sie es, wenn Ihr Ziel das Scraping ist und Sie Blöcke oder Rate-Limits erreichen; für einfache E2E-Tests auf Ihrer eigenen App ist lokal Playwright oder Selenium in der Regel ausreichend. Nachteile: Bezahlbar; auf Scraping ausgerichtet, nicht allgemeine Test-Grids wie LambdaTest.

Gauge
Gauge ist ein Open-Source-Test-Framework von Thoughtworks. Es konzentriert sich auf Spezifikationen und Berichte: Sie schreiben Spezifikationen in Markdown (oder anderen Formaten) mit Szenarien und Schritten und implementieren die Schritte in Python (oder Java, JavaScript usw.) mithilfe von Selenium – oder jedem anderen Treiber – um den Browser zu steuern. Gauge ersetzt Selenium oder Playwright nicht; es sitzt darauf und fügt Struktur, Wiederverwendung und lesbare Berichte hinzu. Verwenden Sie es, wenn Sie BDD-ähnliche Spezifikationen, lebende Dokumentation und klare Testberichte über Ihre bestehende Selenium- (oder ähnliche) Einrichtung haben möchten. LambdaTest unterstützt das Ausführen von Gauge-Tests auf ihrem Grid. Nachteile: Zusätzliche Schicht, die gelernt und gewartet werden muss; Sie müssen dennoch einen Browser-Automatisierungstreiber (z. B. Selenium) wählen und konfigurieren.

Wo sie laufen

  • Playwright: Lokal oder CI; Python 3.8+; Windows, macOS, Linux. Funktioniert auch mit Cloud/Remote-Browsern (z. B. ZenRows, LambdaTest) durch Verbindung zu einem WebSocket- oder CDP-Endpunkt.
  • Selenium: Lokal oder CI; jede Sprache mit einem WebDriver-Client; Selenium Grid oder ein Anbieter wie LambdaTest für Skalierung.
  • Puppeteer: Nur Node.js; typischerweise Chrome/Chromium auf dem Gerät oder in Docker.
  • LambdaTest: Nur Cloud; Sie führen Selenium/Playwright (oder Gauge über Selenium) gegen ihr Grid aus.
  • ZenRows: Cloud Scraping Browser; Sie steuern ihn von Python (z. B. Playwright) oder anderen CDP-kompatiblen Tools aus.
  • Gauge: Läuft auf Ihrem Gerät oder CI; verwendet Selenium (oder einen anderen Treiber) unter der Haube; kann LambdaTests Grid ansteuern.

Für einen schnellen Überblick über Trends im Python-Ökosystem siehe Top Trending Python Projekte auf GitHub; viele Automatisierungs- und Test-Tools finden sich dort.

Wie man sie in Python verwendet

Playwright (Python)

Das Playwright-Python-Paket bietet sowohl synchrone als auch asynchrone APIs. Browser werden separat installiert, damit die Bibliothek klein bleibt und Sie nur die Motoren auswählen können, die Sie benötigen (Chromium, Firefox, WebKit). Installieren und installieren Sie Browser:

pip install playwright
playwright install

Synchrone Beispiel (navigieren, klicken, Text lesen – Playwright wartet automatisch auf Elemente):

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto("https://example.com")
    print(page.title())
    # Link klicken, dann Überschrift prüfen (automatisches Warten ist integriert)
    page.get_by_role("link", name="More information...").click()
    heading = page.get_by_role("heading", name="Example Domain").text_content()
    print(heading)
    browser.close()

Asynchrone Nutzung wird empfohlen für Konkurrenz und passt zu LLM-Strukturiertem Output-Workflows oder Skripte, die I/O durchführen, während der Browser läuft:

from playwright.async_api import async_playwright
import asyncio

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()
        await page.goto("https://example.com")
        print(await page.title())
        await browser.close()

asyncio.run(main())

Für einen Python-Quick-Reference und Syntax-Referenz, haben Sie eine lokale Dokumentation griffbereit.

Selenium (Python)

Der Python-Client verwendet das W3C WebDriver-Protokoll. Selenium 4+ verwendet Selenium Manager, um den richtigen Treiber (ChromeDriver, GeckoDriver usw.) automatisch herunterzuladen und zu verwalten, sodass Sie die Treiber nicht mehr manuell herunterladen müssen:

pip install selenium

Grundlegendes Beispiel mit explizitem Warten (Selenium wartet nicht automatisch; verwenden Sie WebDriverWait oder erwartete Bedingungen):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://example.com")
# Warten auf body, dann Titel erhalten
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
print(driver.title)
driver.quit()

Klicken und Text lesen:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://example.com")
link = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.LINK_TEXT, "More information. .."))
)
link.click()
heading = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, "h1"))
)
print(heading.text)
driver.quit()

Puppeteer (Node.js; keine offizielle Python)

Puppeteer ist nur JavaScript/Node.js – Google betreibt keine Python-API. Wenn Sie eine Puppeteer-ähnliche Erfahrung in Python benötigen, verwenden Sie Playwright (selbe „Chrome über CDP“-Idee, mit erstklassigem Python und automatischem Warten). Es gibt eine nicht-offizielle Portierung pyppeteer, die nicht aktiv gepflegt wird; für neue Python-Arbeiten ist Playwright die bessere Wahl. Unten ist das Node.js-Beispiel, damit Sie die API vergleichen können:

npm init -y && npm install puppeteer
const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  await page.goto("https://example.com");
  console.log(await page.title());
  await page.click("a[href='https://www.iana.org/domains/example']");
  const text = await page.$eval("h1", (el) => el.textContent);
  console.log(text);
  await browser.close();
})();

LambdaTest (Python: Selenium)

Sie verwenden die gleiche Selenium-API; die einzige Änderung besteht darin, sich mit LambdaTests remote WebDriver-Hub zu verbinden, anstatt einen lokalen Treiber zu verwenden. Legen Sie Fähigkeiten (Browser, OS, Build-Name usw.) fest und geben Sie Ihren Benutzernamen und Zugriffsschlüssel aus dem LambdaTest-Dashboard ein:

from selenium import webdriver

options = webdriver.ChromeOptions()
options.browser_version = "latest"
options.platform_name = "Windows 11"

lt_caps = {
    "lt:options": {
        "username": "YOUR_LT_USERNAME",
        "accessKey": "YOUR_LT_ACCESS_KEY",
        "build": "Playwright-Selenium-Compare",
        "name": "Selenium on LambdaTest",
    }
}
options.set_capability("lt:options", lt_caps["lt:options"])

driver = webdriver.Remote(
    command_executor="https://YOUR_LT_USERNAME:YOUR_LT_ACCESS_KEY@hub.lambdatest.com/wd/hub",
    options=options,
)
driver.get("https://example.com")
print(driver.title)
driver.quit()

LambdaTest (Python: Playwright)

Playwright kann sich über die CDP (Chrome DevTools Protocol) an einen Remote-Browser anbinden. LambdaTest stellt für jeden Testlauf einen CDP-Endpunkt bereit; Sie verbinden sich stattdessen mit diesem, anstatt einen lokalen Browser zu starten. Siehe LambdaTests Dokumentation für den genauen CDP-URL-Format und Authentifizierung:

from playwright.sync_api import sync_playwright

# LambdaTest stellt einen CDP-Endpunkt pro Lauf bereit; verwenden Sie deren Dokumentation, um ihn zu erhalten
CDP_URL = "wss://cdp.lambdatest.com/playwright?capabilities=..."  # von LT-Dashboard

with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp(CDP_URL)
    page = browser.new_page()
    page.goto("https://example.com")
    print(page.title())
    browser.close()

ZenRows + Playwright (Python)

ZenRows Scraping Browser ist CDP-kompatibel, also verwenden Sie Playwrights connect_over_cdp() mit deren WebSocket-URL. Der Browser läuft in der Cloud von ZenRows mit deren Proxys und Anti-Bot-Verarbeitung; Ihr Skript bleibt identisch, außer wie Sie sich verbinden. Nur der Startschritt ändert sich:

from playwright.sync_api import sync_playwright

ZENROWS_WS = "wss://browser.zenrows.com?apikey=YOUR_ZENROWS_API_KEY"

with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp(ZENROWS_WS)
    page = browser.new_page()
    page.goto("https://example.com")
    html = page.content()
    print(html[:500])
    browser.close()

Dann geben Sie das resultierende HTML in Ihren eigenen Parser oder, beispielsweise, HTML in Markdown mit Python für die nachfolgende Verarbeitung.

Gauge + Selenium (Python)

Gauge hält Spezifikationen in Markdown (oder anderen Formaten) und Schritt-Implementierungen in Python. Jeder Schritt kann Selenium (oder jeden anderen Treiber) aufrufen, um den Browser zu öffnen, zu navigieren und zu behaupten. Beispiel-Layout:

Spezifikation specs/example.spec:

# Beispiel-Spezifikation

## Site öffnen und Titel prüfen

* Browser öffnen und zu "https://example.com" navigieren
* Seiten-Titel sollte "Example Domain" sein

Schritte step_impl/example.py:

from getgauge.python import step, before_scenario
from selenium import webdriver

driver = None

@before_scenario()
def init_driver():
    global driver
    driver = webdriver.Chrome()

@step("Browser öffnen und zu <url> navigieren")
def open_url(url):
    driver.get(url)

@step("Seiten-Titel sollte <title> sein")
def check_title(title):
    assert driver.title == title, f"Erwartet {title}, erhalten {driver.title}"

Installieren Sie Gauge, den Python-Runner und das Selenium-Plugin; führen Sie mit gauge run specs/ aus. Um auf LambdaTest zu laufen, setzen Sie den Selenium-Treiber in einem before_scenario-Hook auf LambdaTests remote URL und Fähigkeiten, anstatt webdriver.Chrome() zu verwenden.

Zusammenfassung

Tool Python Rolle Best for
Playwright Ja Browser-Automatisierung Neue E2E-Tests, Scraping, Multi-Browser, Geschwindigkeit
Selenium Ja Browser-Automatisierung Legacy-Tests, breites Ökosystem, viele Browser
Puppeteer Nein Browser-Automatisierung Node.js/Chrome-only Projekte
LambdaTest N/A Cloud-Grid Parallel, Cross-Browser, Gauge + Selenium
ZenRows Über PW Scraping-Browser Anti-Bot, Proxys, CAPTCHA; mit Playwright verwenden
Gauge Ja Test-Framework BDD-Spezifikationen + Selenium (oder anderer Treiber)

Für neue Python-Arbeiten ist Playwright die Standardwahl; fügen Sie LambdaTest oder ZenRows hinzu, wenn Sie Cloud-Skalierung oder Scraping-Resilienz benötigen. Behalten Sie Selenium für bestehende Suiten und Gauge, wenn Sie Spezifikation-first Test-Design über Selenium haben möchten.

Referenzen