|
import os |
|
from fastapi import FastAPI |
|
from playwright.sync_api import sync_playwright |
|
|
|
|
|
|
|
|
|
|
|
app = FastAPI() |
|
|
|
@app.get("/") |
|
def read_root(): |
|
return { |
|
"message": "Visit /save_mhtml to capture MHTML. Then check the dev mode to see if the file is there." |
|
} |
|
|
|
@app.get("/save_mhtml") |
|
def save_mhtml(): |
|
""" |
|
/save_mhtml にアクセスしたタイミングで外部URLを読み込み、MHTMLを保存する。 |
|
ここで失敗しても起動時には関係ないので、Devモードが落ちるリスクが減る。 |
|
""" |
|
url = "https://civitai.com/models/1055452/akashicpulse" |
|
output_path = "akashicpulse.mhtml" |
|
|
|
try: |
|
with sync_playwright() as p: |
|
browser = p.chromium.launch(headless=True) |
|
page = browser.new_page() |
|
page.goto(url, wait_until="networkidle", timeout=60000) |
|
|
|
cdp_session = page.context.new_cdp_session(page) |
|
snapshot = cdp_session.send("Page.captureSnapshot", {"format": "mhtml"}) |
|
browser.close() |
|
|
|
with open(output_path, "w", encoding="utf-8") as f: |
|
f.write(snapshot) |
|
|
|
return { |
|
"status": "success", |
|
"message": f"MHTML saved to {os.path.abspath(output_path)}" |
|
} |
|
except Exception as e: |
|
return { |
|
"status": "error", |
|
"message": str(e) |
|
} |
|
|