2024-04-25 13:31:28 -04:00
|
|
|
from fastapi import FastAPI
|
|
|
|
from playwright.async_api import async_playwright, Browser
|
2024-04-15 17:01:47 -04:00
|
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from pydantic import BaseModel
|
2024-04-25 13:31:28 -04:00
|
|
|
|
2024-04-15 17:01:47 -04:00
|
|
|
app = FastAPI()
|
|
|
|
|
|
|
|
|
|
|
|
class UrlModel(BaseModel):
|
|
|
|
url: str
|
|
|
|
|
|
|
|
|
2024-04-25 13:31:28 -04:00
|
|
|
browser: Browser = None
|
|
|
|
|
|
|
|
|
|
|
|
@app.on_event("startup")
|
|
|
|
async def startup_event():
|
|
|
|
global browser
|
|
|
|
playwright = await async_playwright().start()
|
|
|
|
browser = await playwright.chromium.launch()
|
|
|
|
|
2024-04-15 17:01:47 -04:00
|
|
|
|
2024-04-25 13:31:28 -04:00
|
|
|
@app.on_event("shutdown")
|
|
|
|
async def shutdown_event():
|
|
|
|
await browser.close()
|
2024-04-15 17:01:47 -04:00
|
|
|
|
|
|
|
|
2024-04-25 13:31:28 -04:00
|
|
|
@app.post("/html")
|
|
|
|
async def root(body: UrlModel):
|
|
|
|
context = await browser.new_context()
|
|
|
|
page = await context.new_page()
|
|
|
|
await page.goto(body.url)
|
|
|
|
page_content = await page.content()
|
|
|
|
await context.close()
|
|
|
|
json_compatible_item_data = {"content": page_content}
|
|
|
|
return JSONResponse(content=json_compatible_item_data)
|