总体而言,该脚本从 S3 存储桶中获取 URL 文件,制作每个 URL 的屏幕截图,并将其保存到不同的 S3 存储桶中。打开 S3 存储桶并对其进行读/写就可以了。然而,实际的截图功能不起作用,只给出了AttributeError。
令人沮丧的是,在本地测试时工作得非常好。当它部署在 AWS 上时,我收到这些错误:
/var/lang/lib/python3.8/site-packages/playwright/driver/node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /var/lang/lib/python3.8/site-packages/playwright/driver/node)
/var/lang/lib/python3.8/site-packages/playwright/driver/node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by /var/lang/lib/python3.8/site-packages/playwright/driver/node)
和
'PlaywrightContextManager' object has no attribute '_playwright'
。
我尝试使用
p: Playwright = sync_playwright().start()
而不是 with
来调整剧作家初始化。我在互联网上搜索并询问了 ChatGPT,尽管我见过类似的问题,但没有一个能解决我的问题。
我一生都无法弄清楚如何解决这个问题。有什么想法吗?
Python 3.8,Playwright 1.42.0,使用 Windows
from playwright.sync_api import sync_playwright
def playwright_screenshot(url):
try:
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto(url)
image = page.screenshot(full_page=True)
browser.close()
logger.info("Screenshot taken successfully")
return image
except Exception as ex:
logger.info(f"Error in playwright_screenshot: {ex}")
这是通过 Dockerfile 在 AWS 中部署的:
FROM public.ecr.aws/lambda/python:3.8
WORKDIR /app
COPY requirements.txt ./requirements.txt
COPY __init__.py .__init__.py
COPY url_screenshot ./url_screenshot
ENV PYTHONPATH "${PYTHONPATH}:/app/(path)"
RUN yum -y clean all && \
pip install -r myfilepath/requirements.txt \
playwright install
ENTRYPOINT [ "python", "myfilepath/screenshot.py" ]
发布答案是因为我认为唯一的解决方案是将操作系统从 Amazon Linux 2 更改为 Amazon Linux 2023,别无他法。解决了这个问题,感谢