Python Playwright调用sync_playwright().start()时程序挂起
sync_playwright().start() 阻塞无响应,本质是Playwright客户端无法和本地拉起的浏览器驱动进程完成通信,常见触发场景和对应解决方法如下:
未安装Playwright内置浏览器
多数新手仅通过pip安装了Playwright的Python包,没有执行内置浏览器安装步骤,会导致驱动进程无法正常拉起。先执行命令完成安装:playwright install
安装完成后如果仍阻塞,可以开启调试日志定位具体卡点:Linux/macOS 执行DEBUG=pw:api python 你的测试脚本名.pyWindows PowerShell 执行$env:DEBUG="pw:api"; python 你的测试脚本名.py本地端口通信被拦截
Playwright启动时会在本地回环地址启动临时驱动服务,如果开启了全局网络代理、或者系统防火墙拦截了本地回环端口的通信,就会导致客户端一直等待驱动响应。临时关闭全局代理、为Playwright相关进程添加防火墙白名单即可恢复。
之前运行失败残留的僵尸驱动、浏览器进程也会占用端口导致新实例启动卡住,打开任务管理器结束所有名为playwright、chromium、firefox、webkit的残留进程后再重试。手动管理生命周期导致的兼容问题
不推荐手动调用start()/stop()方法管理Playwright实例,官方推荐使用上下文管理器自动处理资源回收,替换为如下写法测试:from playwright.sync_api import sync_playwright print('debug1') with sync_playwright() as p: print('debug2') browser = p.firefox.launch(headless=False) print('debug3') page = browser.new_page() page.goto("http://whatsmyuseragent.org/") page.screenshot(path="example.png") browser.close()运行环境缺少系统依赖
如果是在WSL、精简版Linux服务器、容器环境中运行,需要先安装全量系统依赖:sudo playwright install-deps
无桌面的精简环境运行headless模式还需要确认安装了基础图形渲染库,否则驱动进程会直接僵死。运行环境版本不兼容
Playwright同步API要求Python版本 >= 3.7,版本过低会出现异步事件循环兼容问题,导致启动方法永久阻塞,升级Python版本即可解决。
内容的提问来源于stack exchange,提问作者user19437199

