Spaces:
Sleeping
Sleeping
File size: 2,007 Bytes
905d221 9f7a613 f0ac569 905d221 9f7a613 77fa18f 9f7a613 c2db713 9f7a613 58cc09f f0ac569 58cc09f 9f7a613 176d27e 9f7a613 f0ac569 9f7a613 f0ac569 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
from fastapi import FastAPI
from playwright.async_api import async_playwright
from pydantic import BaseModel
from typing import List, Dict, Any
import logging
# ロギング設定
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
app = FastAPI()
class Step(BaseModel):
tool: str
parameters: Dict[str, Any]
class Payload(BaseModel):
steps: List[Step]
@app.api_route("/", methods=["GET", "POST"])
async def automate(payload: Payload):
logger.info(f"Received payload:")
async with async_playwright() as p:
try:
browser = await p.chromium.launch(headless=True, timeout=180000)
page = await browser.new_page()
# デフォルトのナビゲーション/操作タイムアウトを180秒に設定
page.set_default_navigation_timeout(180000)
page.set_default_timeout(180000)
for step in payload.steps:
tool = step.tool
params = step.parameters
logger.info(f"Executing step: {tool}")
if tool == "browser_navigate":
await page.goto(params["url"])
elif tool == "browser_type":
await page.fill(params["element"], params["text"])
if params.get("submit", False):
await page.press(params["element"], "Enter")
elif tool == "browser_click":
await page.click(params["element"])
elif tool == "browser_snapshot":
content = await page.content()
return {"snapshot": content}
else:
return {"error": f"Unknown tool: {tool}"}
return {"status": "completed"}
except Exception as e:
logger.error(f"Error during execution: {str(e)}", exc_info=True)
return {"error": str(e)}
finally:
if 'browser' in locals():
await browser.close() |