Playwright与PM2问题:创建PlaywrightContextManager时进程挂起
解决Scrapy-Playwright爬虫在PM2启动下挂起的问题
强制指定Playwright无头模式及启动参数
后台进程无桌面环境,Playwright默认配置可能无法正常初始化浏览器。在代码中明确设置启动参数:# 异步API示例 async def init_browser(): playwright = await async_playwright().start() return await playwright.chromium.launch( headless=True, args=["--disable-gpu", "--no-sandbox", "--disable-dev-shm-usage"] ) # 同步API示例 def init_browser(): with sync_playwright() as playwright: browser = playwright.chromium.launch( headless=True, args=["--disable-gpu", "--no-sandbox", "--disable-dev-shm-usage"] ) return browser--no-sandbox规避权限限制,--disable-dev-shm-usage解决后台环境内存不足导致的启动失败。配置PM2环境变量,确保Playwright定位到浏览器文件
PM2启动时的环境变量与手动运行存在差异,需指定浏览器路径:
在PM2配置文件(ecosystem.config.js)中添加:module.exports = { apps: [{ name: 'my_spider', script: 'scrapy crawl my_spider', env: { PLAYWRIGHT_BROWSERS_PATH: '0', // 强制使用系统级安装的浏览器,或填写具体路径 } }] };启动前务必执行
playwright install chromium(对应你使用的浏览器)完成安装。切换PM2启动模式为fork
Cluster模式下多进程共享资源会与Playwright浏览器实例冲突,导致挂起。修改配置:module.exports = { apps: [{ name: 'my_spider', script: 'scrapy crawl my_spider', exec_mode: 'fork', instances: 1 }] };确保PM2运行用户权限充足
PM2若以root或非当前用户运行,可能无法访问浏览器文件或创建临时目录。指定运行用户启动:pm2 start ecosystem.config.js --user your_username开启日志排查具体问题
在PM2配置中添加日志输出,查看启动时的错误信息:module.exports = { apps: [{ name: 'my_spider', script: 'scrapy crawl my_spider', out_file: './spider_out.log', error_file: './spider_error.log', merge_logs: true }] };通过
spider_error.log定位浏览器初始化时的具体异常。
内容的提问来源于stack exchange,提问作者ilarion_kuleshov
相关产品推荐
相关产品推荐

