Switch Playwright to headless — Xvfb fails on Proxmox LXC kernels

Xvfb exits immediately on the production LXC (no framebuffer device
support), so headed mode was never working. Switch to headless=True
and remove Xvfb from the Dockerfile entirely.

Stealth coverage is unchanged: playwright-stealth patches webdriver,
plugins and chrome.runtime; the residential proxy + sticky session
provide the GB residential fingerprint; homepage warmup carries real
session cookies into the search. --enable-unsafe-swiftshader and
--disable-blink-features=AutomationControlled are kept.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
jtricerolph 2026-07-09 17:01:54 +00:00
parent e781b1e8b9
commit 617ff932bb
2 changed files with 7 additions and 10 deletions

View file

@ -159,14 +159,17 @@ class PlaywrightLocalBackend(ScraperBackend):
if self._playwright is None:
self._playwright = await async_playwright().start()
launch_kwargs = dict(
# Headful under xvfb — far cleaner fingerprint than headless.
headless=False,
# Headless — stealth patches + residential proxy + session
# cookies cover the fingerprint; headed+xvfb is unreliable
# in Proxmox LXC kernels where Xvfb exits immediately.
headless=True,
args=[
'--disable-blink-features=AutomationControlled',
'--no-sandbox',
'--disable-dev-shm-usage',
'--disable-features=IsolateOrigins,site-per-process',
'--start-maximized',
'--disable-gpu',
'--enable-unsafe-swiftshader',
],
)
# Proxy is set at launch (Chromium binds the sticky session, which