ff / app.py
ccyyss's picture
Update app.py
ea4ccbd verified
Raw
History Blame Contribute Delete
2.23 kB
import gradio as gr
from playwright.sync_api import sync_playwright
from PIL import Image
import io
import subprocess
import sys
import os
# ==================== 自动安装浏览器 ====================
def install_browsers():
print("Downloading Playwright browsers...")
try:
subprocess.run(["playwright", "install", "chromium", "--with-deps"], check=True)
print("Browser installation completed!")
except Exception as e:
print(f"Browser install failed: {e}")
if "SPACE_ID" in os.environ: # HF Space 环境
install_browsers()
# ==================== 主函数 ====================
def run_automation(url: str, action: str = "screenshot"):
try:
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page(viewport={"width": 1280, "height": 720})
page.goto(url, wait_until="networkidle", timeout=60000)
if action == "screenshot":
screenshot_bytes = page.screenshot(full_page=True)
browser.close()
image = Image.open(io.BytesIO(screenshot_bytes))
return "✅ 截图成功!", image
else:
title = page.title()
browser.close()
return f"📄 页面标题:{title}", None
except Exception as e:
return f"❌ 错误:{str(e)}", None
# ==================== Gradio 界面 ====================
with gr.Blocks(title="网页截图工具") as demo:
gr.Markdown("# 🌐 网页自动化演示(Playwright)")
with gr.Row():
url_input = gr.Textbox(
label="网址",
placeholder="https://huggingface.co",
value="https://example.com",
scale=4
)
action = gr.Radio(["screenshot", "title"], label="操作", value="screenshot")
btn = gr.Button("🚀 执行", variant="primary")
with gr.Row():
output_text = gr.Textbox(label="状态")
output_image = gr.Image(label="截图结果")
btn.click(
fn=run_automation,
inputs=[url_input, action],
outputs=[output_text, output_image]
)
demo.launch()