在使用 FastAPI 调用 Playwright 进行浏览器截图功能时,如果遇到 NotImplementedError 错误,通常是由于 uvicorn 的 reload 参数与 Playwright 的异步操作不兼容导致的。以下是解决该问题的步骤:

修改 uvicorn 启动参数

将 uvicorn.run 中的 reload=True 参数移除,改为以下代码:

uvicorn.run("main:app", host="127.0.0.1", port=8083)

reload=True 会在代码更改时自动重启服务器,但在某些情况下会与 Playwright 的异步操作冲突,导致 NotImplementedError 错误。

确保 Playwright 正确安装

确保 Playwright 已正确安装,并且浏览器驱动程序已下载。可以通过以下命令安装 Playwright 并下载浏览器:

pip install playwright
playwright install

使用异步上下文管理

在 FastAPI 中调用 Playwright 时,确保使用异步上下文管理器。以下是一个示例代码:

from fastapi import FastAPI
from playwright.async_api import async_playwright

app = FastAPI()

@app.get("/screenshot")
async def take_screenshot(url: str):
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto(url)
        screenshot = await page.screenshot(full_page=True)
        await browser.close()
        return {"screenshot": screenshot}

运行 FastAPI 应用

使用修改后的 uvicorn 命令运行 FastAPI 应用:

uvicorn main:app --host 127.0.0.1 --port 8083

通过以上步骤,可以解决 NotImplementedError 错误,并成功使用 FastAPI 调用 Playwright 进行浏览器截图功能。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐