AWS Lambda中Playwright启动Chromium报TargetClosedError求助
解决AWS Lambda中Playwright启动Chromium报TargetClosedError的问题
针对你在AWS Lambda环境中遇到的playwright._impl._errors.TargetClosedError: Browser.new_page: Target page, context or browser has been closed错误,结合Lambda环境特性,给出以下可行解决办法:
1. 提升Lambda内存配置
Lambda的内存与CPU配额正相关,默认内存(如128MB/256MB)不足以支撑Chromium启动运行。建议将Lambda函数内存调整至1024MB及以上(可尝试2048MB),更高的内存能分配更多CPU资源,降低浏览器启动时的资源耗尽风险。
2. 对齐Playwright与Chromium版本
确保Lambda环境中Playwright依赖的Chromium版本与本地测试环境完全一致:
- 构建自定义镜像时,指定固定版本安装:
pip install playwright==1.37.0 playwright install chromium --version=1.37.0 - 避免使用
latest版本,防止自动更新后出现环境兼容性问题。
3. 优化Chromium启动参数
你的现有参数中部分配置可能在Lambda环境不稳定,建议调整为以下参数:
async with async_playwright() as playwright: browser_path = find_chromium_path() executable_path = f"{browser_path}/chrome-linux/chrome" if not os.path.exists(executable_path): executable_path = None browser = await playwright.chromium.launch( headless="new", # 使用Playwright新无头模式,更稳定 executable_path=executable_path, args=[ "--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage", # 解决Lambda共享内存不足问题 "--disable-gpu", "--no-zygote", "--disable-audio-output", "--disable-webgl", "--disable-extensions", # 禁用扩展减少资源占用 "--disable-plugins", "--disable-background-networking" ] )
关键调整点:
- 移除
--single-process:单进程模式会大幅降低浏览器稳定性,极易导致崩溃 - 改用
headless="new":Playwright 1.32+推出的新无头模式,内存占用更低、兼容性更好 - 增加
--disable-extensions/--disable-plugins:减少不必要的资源消耗
4. 添加启动重试机制
Lambda执行环境可能存在临时资源波动,添加重试逻辑可降低偶发失败概率:
from tenacity import retry, stop_after_attempt, wait_exponential @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10)) async def launch_browser(playwright): browser_path = find_chromium_path() executable_path = f"{browser_path}/chrome-linux/chrome" if not os.path.exists(executable_path): executable_path = None return await playwright.chromium.launch( # 上述优化后的参数 ) # 使用方式 async with async_playwright() as playwright: try: browser = await launch_browser(playwright) # 后续逻辑 except Exception as e: # 错误处理
5. 检查自定义镜像依赖
如果使用自定义Docker镜像部署Lambda:
- 基于Amazon Linux 2镜像构建,确保系统库与Lambda执行环境兼容
- 安装Chromium所需的系统依赖:
yum install -y atk cups-libs gtk3 libXcomposite libXcursor libXdamage libXext libXi libXrandr libXScrnSaver libXtst pango at-spi2-atk libXt alsa-lib libdrm mesa-libgbm
内容的提问来源于stack exchange,提问作者Shriyash Sutar
相关产品推荐
相关产品推荐

