Browserautomatisering in Python: Playwright, Selenium & Meer
Python-browserautomatisering en E2E-testen vergeleken.
Het kiezen van de juiste browserautomatiseringsstack in Python beïnvloedt de snelheid, stabiliteit en onderhoud. Deze overzicht vergelijkt Playwright vs Selenium vs Puppeteer vs LambdaTest vs ZenRows vs Gauge - met een focus op Python, terwijl aangegeven wordt waar Node.js of andere talen een rol spelen.
Hier hebben we een screenshot van Playwright trace viewer
Wanneer welke te gebruiken
Playwright (Python)
Playwright is een open-source browserautomatiseringsbibliotheek van Microsoft. Het communiceert met Chromium, Firefox en WebKit via de Chrome DevTools Protocol (CDP) of WebSocket, zodat je één API krijgt over alle drie de engines. Het is uitgerust met auto-wachten: voor elke actie (klikken, invullen, etc.) wacht het op het element om zichtbaar, stabiel en actiebaar te zijn, wat flakkering verminderd en het gebruik van manueel sleep of WebDriverWait overbodig maakt. De installatie is minimaal (pip install playwright gevolgd door playwright install), en de Python API is van eerste klas (synchronisch en asynchronisch). Gebruik het voor nieuwe E2E testomgevingen, scripting of automatisering (bijvoorbeeld het bouwen van MCP-servers in Python die een browser bestuurt). Voor een volledige walkthrough met Python, JavaScript- en TypeScript-voorbeelden, zie Playwright: Web Scraping & Testing. Combineer het met eenheidstesten in Python voor de rest van je app en gebruik Playwright alleen voor de browserlaag. Nadelen: nieuwer dan Selenium, dus minder derde partij-integraties en minder oudere materialen; geen officiële ondersteuning voor zeer oude browsers.
Selenium (Python)
Selenium is de lange tijd geldende standaard voor browserautomatisering. Het Selenium Project (open source, ondersteund door de OpenJS Foundation) biedt de WebDriver API: je stuurt commando’s naar een browser-specifieke driver (ChromeDriver, GeckoDriver, etc.), die communiceert met de echte browser. Selenium ondersteunt veel talen (Python, Java, C#, JavaScript, etc.) en de grootste verscheidenheid aan browsers, inclusief oude. Selenium 4+ bevat Selenium Manager, dus je hoeft niet meer handmatig driver-bestanden te downloaden of te plaatsen; de client haalt de juiste driver voor je op. De API wacht niet automatisch; je gebruikt meestal WebDriverWait en verwachte voorwaarden om flakkerende tests te vermijden. Gebruik Selenium wanneer je bestaande WebDriver suites onderhoudt, de breedste ecosystem en taalondersteuning nodig hebt of oude browsers moet ondersteunen. Het past bij Python design patterns voor clean architecture wanneer je de driver achter een kleine adapter verbergt. Nadelen: algemeen trager en bros dan Playwright zonder zorgvuldige wachttactiek; meer boilerplate.
Puppeteer
Puppeteer is Googles Node.js-bibliotheek voor het besturen van headless Chrome/Chromium (en Chromium-gebaseerde Edge). Het gebruikt het Chrome DevTools Protocol direct en is de standaardkeuze voor JavaScript/TypeScript-teams die alleen Chrome-automatisering, PDF-generatie of scraping in Node doen. Er is geen officiële Python binding; de API is alleen voor Node. Als je stack Python is, gebruik dan Playwright (zelfde “CDP controle” idee met eerste klas Python) of Selenium. Als je in Node.js bent en alleen Chromium nodig hebt, is Puppeteer een sterke, goed gedocumenteerde optie. Nadelen: alleen Chrome/Chromium; geen Firefox of WebKit; geen Python.
LambdaTest
LambdaTest is een commerciële cloud testplatform. Je blijft dezelfde Selenium of Playwright (of Cypress, etc.) scripts schrijven lokaal, maar in plaats van een lokale browser te starten verbind je met LambdaTest’s grid. Ze bieden echte browsers en echte apparaten (inclusief mobiele) in de cloud, dus je kunt tests parallel uitvoeren over veel OS/browser/versiecombinaties zonder je eigen lab te hoeven onderhouden. Je krijgt een dashboard voor resultaten, video’s en logboeken. Gebruik het wanneer je cross-browser dekking, schaalbare parallelle uitvoering of mobiele emulatie nodig hebt en je de infrastructuur niet zelf wilt hosten. Het ondersteunt ook Gauge: je voert je Gauge-specs uit op hun Selenium grid. Nadelen: betaald (met gratis niveaus); tests worden uitgevoerd over het netwerk, dus latentie en beschikbaarheid hangen af van hun service.
ZenRows
ZenRows is een commerciële web scraping en anti-detectie service. Zijn Scraping Browser is een cloudbrowser die je controleert via Playwright (of andere CDP-compatibele tools): je verbindt je script met een WebSocket-eindpunt en de browser draait op ZenRows’ kant met woonadressenproxi’s, IP-rotatie, anti-bot omzeiling (bijvoorbeeld Cloudflare, DataDome) en optionele CAPTCHA-behandeling. Je verandert je Playwright logica niet - alleen het browser-eindpunt. Gebruik het wanneer je doel scraping is en je blokkeringen of rate limits tegenkomt; voor gewone E2E testen op je eigen app is lokale Playwright of Selenium meestal voldoende. Nadelen: betaald; gericht op scraping, niet op algemene doeleinden zoals LambdaTest.
Gauge
Gauge is een open-source testframework van Thoughtworks. Het richt zich op specificaties en rapporten: je schrijft specificaties in Markdown (of andere formaten) met scenario’s en stappen, en implementeert de stappen in Python (of Java, JavaScript, etc.) met behulp van Selenium - of elke andere driver - om de browser te besturen. Gauge vervangt niet Selenium of Playwright; het zit bovenop hen en voegt structuur, hergebruik en leesbare rapporten toe. Gebruik het wanneer je BDD-stijl specificaties, levende documentatie en duidelijke testrapporten bovenop je bestaande Selenium (of vergelijkbare) setup wilt. LambdaTest ondersteunt het uitvoeren van Gauge-tests op hun grid. Nadelen: extra laag om te leren en onderhouden; je moet nog steeds een browserautomatiseringsdriver kiezen en configureren (bijvoorbeeld Selenium).
Waar ze lopen
- Playwright: Lokal of CI; Python 3.8+; Windows, macOS, Linux. Werkt ook met cloud/remote browsers (bijvoorbeeld ZenRows, LambdaTest) door verbinding te maken met een WebSocket of CDP-eindpunt.
- Selenium: Lokal of CI; elke taal met een WebDriver-client; Selenium Grid of een provider zoals LambdaTest voor schaalbaarheid.
- Puppeteer: Alleen Node.js; meestal Chrome/Chromium op de machine of in Docker.
- LambdaTest: Alleen in de cloud; je voert Selenium/Playwright (of Gauge via Selenium) uit tegen hun grid.
- ZenRows: Cloud Scraping Browser; je bestuurt het vanuit Python (bijvoorbeeld Playwright) of andere CDP-compatibele tools.
- Gauge: Loctaal of CI; gebruikt Selenium (of een andere driver) onder de kap; kan LambdaTest’s grid als doelwit hebben.
Voor een snelle verwijzing naar trends in de Python-ecosysteem, zie top trending Python projects op GitHub; veel automatiserings- en testtools verschijnen daar.
Hoe ze in Python gebruikt worden
Playwright (Python)
Playwrights Python-pakket biedt zowel synchronische als asynchrone APIs. Browsers worden apart geïnstalleerd zodat de bibliotheek klein blijft en je alleen de engines kunt kiezen die je nodig hebt (Chromium, Firefox, WebKit). Installeer en installeer browsers:
pip install playwright
playwright install
Synchronisch voorbeeld (navigeer, klik, lees tekst - Playwright wacht automatisch op elementen):
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())
# Klik op link, dan controleer kop (ingebouwde wachttijd)
page.get_by_role("link", name="Meer informatie...").click()
heading = page.get_by_role("heading", name="Voorbeelddomein").text_content()
print(heading)
browser.close()
Asynchrone is aanbevolen voor concurrentie en past bij LLM-gestructureerde uitvoerwerken of scripts die I/O uitvoeren terwijl de browser draait:
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())
Voor een Python cheatsheet en syntaxisverwijzing, houd een lokale documentatie bij de hand.
Selenium (Python)
De Python-client gebruikt het W3C WebDriver-protocol. Selenium 4+ gebruikt Selenium Manager om de juiste driver (ChromeDriver, GeckoDriver, etc.) automatisch te downloaden en te beheren, dus je hoeft geen drivers handmatig te downloaden:
pip install selenium
Basisvoorbeeld met expliciete wachttijd (Selenium wacht niet automatisch; gebruik WebDriverWait of verwachte voorwaarden):
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")
# Wacht op body om aanwezig te zijn, dan haal titel op
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
print(driver.title)
driver.quit()
Klik en lees tekst:
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, "Meer informatie."))
)
link.click()
heading = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.CSS_SELECTOR, "h1"))
)
print(heading.text)
driver.quit()
Puppeteer (Node.js; geen officiële Python)
Puppeteer is alleen voor JavaScript/Node.js - Google onderhoudt geen Python API. Als je een Puppeteer-achtig ervaring in Python nodig hebt, gebruik dan Playwright (zelfde “bestuur Chrome via CDP” idee, met eerste klas Python en auto-wachten). Er is een niet-officiële port pyppeteer, maar het wordt niet actief onderhouden; voor nieuwe Python werk is Playwright de betere keuze. Hieronder staat het Node.js-voorbeeld zodat je de API kunt vergelijken:
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)
Je gebruikt dezelfde Selenium API; de enige verandering is het verbinden met LambdaTest’s remote WebDriver hub in plaats van een lokale driver. Stel capaciteiten (browser, OS, buildnaam, etc.) in en geef je gebruikersnaam en toegangssleutel van de LambdaTest dashboard door:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.browser_version = "latest"
options.platform_name = "Windows 11"
lt_caps = {
"lt:options": {
"username": "JE_LT_GEBRUIKERSNAAM",
"accessKey": "JE_LT_TOEGANGSSLEUTEL",
"build": "Playwright-Selenium-Compare",
"name": "Selenium op LambdaTest",
}
}
options.set_capability("lt:options", lt_caps["lt:options"])
driver = webdriver.Remote(
command_executor="https://JE_LT_GEBRUIKERSNAAM:JE_LT_TOEGANGSSLEUTEL@hub.lambdatest.com/wd/hub",
options=options,
)
driver.get("https://example.com")
print(driver.title)
driver.quit()
LambdaTest (Python: Playwright)
Playwright kan zich aanmelden bij een externe browser via de CDP (Chrome DevTools Protocol). LambdaTest biedt een CDP-eindpunt voor elke testuitvoering; je verbindt je daarmee in plaats van een lokale browser te starten. Zie LambdaTest’s documentatie voor de exacte CDP URL-indeling en authenticatie:
from playwright.sync_api import sync_playwright
# LambdaTest levert een CDP-eindpunt per uitvoering; gebruik hun documentatie om het te verkrijgen
CDP_URL = "wss://cdp.lambdatest.com/playwright?capabilities=..." # vanaf 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 is CDP-compatibel, dus je gebruikt Playwrights connect_over_cdp() met hun WebSocket URL. De browser draait in ZenRows’ cloud met hun proxies en anti-botbehandeling; je script blijft hetzelfde behalve hoe je verbinding maakt. Alleen de startstap verandert:
from playwright.sync_api import sync_playwright
ZENROWS_WS = "wss://browser.zenrows.com?apikey=JE_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()
Dan geef je het resulterende HTML door naar je eigen parser of, bijvoorbeeld, HTML naar Markdown converteren met Python voor downstreamverwerking.
Gauge + Selenium (Python)
Gauge houdt specs in Markdown (of andere formaten) en stapimplementaties in Python. Elke stap kan Selenium (of elke andere driver) aanroepen om de browser te openen, te navigeren en te bevestigen. Voorbeeldopmaak:
Spec specs/example.spec:
# Voorbeeldspec
## Site openen en titel controleren
* Browser openen en naar "https://example.com" gaan
* Paginatitel moet zijn "Voorbeelddomein"
Stappen 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 openen en naar <url> gaan")
def open_url(url):
driver.get(url)
@step("Paginatitel moet zijn <title>")
def check_title(title):
assert driver.title == title, f"Verwacht {title}, gekregen {driver.title}"
Installeer Gauge, de Python runner en de Selenium plugin; voer uit met gauge run specs/. Om op LambdaTest uit te voeren, stel de Selenium driver in om LambdaTest’s remote URL en capaciteiten in een before_scenario hook in te stellen in plaats van webdriver.Chrome().
Samenvatting
| Tool | Python | Rol | Beste voor |
|---|---|---|---|
| Playwright | Ja | Browser automatisering | Nieuwe E2E tests, scraping, meervoudige browsers, snelheid |
| Selenium | Ja | Browser automatisering | Oude tests, breed ecosysteem, veel browsers |
| Puppeteer | Nee | Browser automatisering | Node.js/Chrome-only projecten |
| LambdaTest | N/A | Cloud grid | Parallel, cross-browser, Gauge + Selenium |
| ZenRows | Via PW | Scraping browser | Anti-bot, proxies, CAPTCHA; gebruik met Playwright |
| Gauge | Ja | Testframework | BDD-specs + Selenium (of andere driver) |
Voor nieuwe Python werk is Playwright de standaardkeuze; voeg LambdaTest of ZenRows toe wanneer je cloud-schaal of scraping-resilientie nodig hebt. Houd Selenium voor bestaande suites en Gauge wanneer je spec-first testontwerp bovenop Selenium wilt.
Nuttige links
- Playwright: Web Scraping & Testing
- Top 17 Trending Python Projects op GitHub
- Eenheidstesten in Python
- Python Design Patterns voor Clean Architecture
- Python Cheatsheet
- LLMs Gestructureerde Uitvoer: Ollama, Qwen3 & Python of Go
- HTML naar Markdown converteren met Python: Een Compleet Gids
- MCP-servers bouwen in Python: Webzoekopdrachten & Scrapen
Referenties
- Playwright Python – Installatie en introductie
- Selenium 4.31 release (2025)
- Puppeteer vs Playwright vs Selenium (2026)
- Selenium vs Playwright vs Puppeteer benchmark
- Playwright vs Selenium – BrowserStack
- ZenRows – Integreer Playwright met ZenRows
- ZenRows Scraping Browser – Aan de slag met Playwright
- LambdaTest – Selenium met Gauge