Pyppeteer: браузер неожиданно закрылся на Python 3.9 Функция AWS Lambda ⇐ Python
Pyppeteer: браузер неожиданно закрылся на Python 3.9 Функция AWS Lambda
У меня есть функция Python, которая собирает расписание веб-сайта и загружает его в базу данных RDS. Код отлично работает на моей локальной машине (версия pyppeteer: 2.0.0, Python 3.12). Однако я пытался перенести его на AWS Lambda, но мой браузер по-прежнему не запускается.
Я использовал исполняемый файл chromium ЭТОГО репозитория (извлеченный из /bin npm i chrome-aws-lambda@~2.0.2 и загруженный в корзину S3 с соответствующими разрешениями), который соответствовал версия pyppeteer, которую я установил с моей лямбда-функцией (pip3 install pyppeteer -t .). Код Python сначала загружает экземпляр Chromium в каталог /tmp, а затем пытается запустить из него браузер с помощью pyppeteer. Моя среда выполнения лямбда-выражений застряла на 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."
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... a-function
У меня есть функция Python, которая собирает расписание веб-сайта и загружает его в базу данных RDS. Код отлично работает на моей локальной машине (версия pyppeteer: 2.0.0, Python 3.12). Однако я пытался перенести его на AWS Lambda, но мой браузер по-прежнему не запускается.
Я использовал исполняемый файл chromium ЭТОГО репозитория (извлеченный из /bin npm i chrome-aws-lambda@~2.0.2 и загруженный в корзину S3 с соответствующими разрешениями), который соответствовал версия pyppeteer, которую я установил с моей лямбда-функцией (pip3 install pyppeteer -t .). Код Python сначала загружает экземпляр Chromium в каталог /tmp, а затем пытается запустить из него браузер с помощью pyppeteer. Моя среда выполнения лямбда-выражений застряла на 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."
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... a-function
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Pyppeteer: браузер неожиданно закрылся на Python 3.9 Функция AWS Lambda
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Pyppeteer: браузер неожиданно закрылся на Python 3.9 Функция AWS Lambda
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-
-
-
AWS Lambda (.NET) + SQS: ошибка преобразования полезных данных JSON события Lambda в строку
Anonymous » » в форуме C# - 0 Ответы
- 88 Просмотры
-
Последнее сообщение Anonymous
-