You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.9 AWS Lambda环境中Pyppeteer启动浏览器失败:Browser closed unexpectedly问题求助

Python 3.9 AWS Lambda环境中Pyppeteer启动浏览器失败:Browser closed unexpectedly问题求助

我有一个Python函数,用来爬取网站日程并上传到RDS数据库。在本地机器上(Pyppeteer 2.0.0,Python 3.12)运行完全正常,但迁移到AWS Lambda后,浏览器总是启动失败。

我使用了对应Pyppeteer版本的Chromium可执行文件(从npm i chrome-aws-lambda@~2.0.2的/bin目录提取,上传到了权限配置正确的S3桶),Lambda函数里用pip3 install pyppeteer -t .安装了对应版本的Pyppeteer。我的Python代码会先把Chromium实例下载到/tmp目录,然后尝试用Pyppeteer从这个路径启动浏览器。Lambda运行时只能用Python 3.9,因为这是psycopg2._psycopg支持的最新版本,但我觉得这不是问题所在。

有没有人知道为什么在AWS Lambda运行时里浏览器启动失败?我怀疑可能是launch()函数的参数有问题,但不知道从哪里入手排查。


启动浏览器的代码片段

browser = await launch(
            headless=True, 
            args=[
            '--no-sandbox',
            '--disable-setuid-sandbox',
            '--disable-gpu',
            "--single-process",
            "--disable-dev-shm-usage",
            "--no-zygote",
            ],
            executablePath="/tmp/headless-chromium",
            userDataDir="/tmp",
        )

Lambda控制台的错误信息

Status: Failed
Test Event Name: testEvent

Response:
{
  "errorMessage": "Browser closed unexpectedly:\n",
  "errorType": "BrowserError",
  "requestId": "a6a20222-6082-4618-b388-fbd4c88bda7d",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 369, in lambda_handler\n    shows = asyncio.run(scrape_all_schedules())\n",
    "  File \"/var/lang/lib/python3.9/asyncio/runners.py\", line 44, in run\n    return loop.run_until_complete(main)\n",
    "  File \"/var/lang/lib/python3.9/asyncio/base_events.py\", line 647, in run_until_complete\n    return future.result()\n",
    "  File \"/var/task/lambda_function.py\", line 225, in scrape_all_schedules\n    browser = await launch(\n",
    "  File \"/var/task/pyppeteer/launcher.py\", line 307, in launch\n    return await Launcher(options, **kwargs).launch()\n",
    "  File \"/var/task/pyppeteer/launcher.py\", line 168, in launch\n    self.browserWSEndpoint = get_ws_endpoint(self.url)\n",
    "  File \"/var/task/pyppeteer/launcher.py\", line 227, in get_ws_endpoint\n    raise BrowserError('Browser closed unexpectedly:\\n')\n"
  ]
}

Function Logs:
Request ID: a6a20222-6082-4618-b388-fbd4c88bda7d

完整代码

import asyncio
from datetime import datetime
from pyppeteer import launch
import os
import psycopg2
import boto3


async def scrape_all_schedules():
    current_day = datetime.now()

    download_chromium()
    
    chromium_path = '/tmp/headless-chromium'
    if os.path.exists(chromium_path):
        print("Chromium binary found. Launching browser...")
    else:
        print(f"Error: Chromium binary not found at {chromium_path}")

    browser = await launch(
        headless=True, 
        args=[
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-gpu',
        "--single-process",
        "--disable-dev-shm-usage",
        "--no-zygote",
        ],
        executablePath="/tmp/headless-chromium",
        userDataDir="/tmp",
    )
    page = await browser.newPage()


def lambda_handler(event, context):
    print("Starting scraping process...")
    shows = asyncio.run(scrape_all_schedules())
    

    return {
        'statusCode': 200,
        'body': f"Successfully saved {len(shows)} shows to the database."
    }

备注:内容来源于stack exchange,提问作者John Carraher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:24:34