| import streamlit as st |
| import asyncio |
| from playwright.async_api import async_playwright |
|
|
| if "logs" not in st.session_state: |
| st.session_state.logs = [] |
|
|
| if "running" not in st.session_state: |
| st.session_state.running = False |
|
|
|
|
| async def run_bot(url): |
| st.session_state.logs.append("Starting bot...") |
|
|
| async with async_playwright() as p: |
| browser = await p.chromium.launch( |
| headless=True, |
| args=["--no-sandbox", "--disable-dev-shm-usage"] |
| ) |
|
|
| page = await browser.new_page() |
|
|
| page.on("console", lambda msg: st.session_state.logs.append(f"LOG: {msg.text}")) |
| page.on("request", lambda req: st.session_state.logs.append(f"REQ: {req.url}")) |
| page.on("response", lambda res: st.session_state.logs.append(f"RES: {res.url} {res.status}")) |
|
|
| await page.goto(url) |
|
|
| |
| for _ in range(15): |
| await asyncio.sleep(1) |
|
|
| await browser.close() |
|
|
| st.session_state.logs.append("Bot finished.") |
| st.session_state.running = False |
|
|
|
|
| st.title("DevTools Bot Dashboard") |
|
|
| url = st.text_input("Enter URL", "https://example.com") |
|
|
| if st.button("Run Bot") and not st.session_state.running: |
| st.session_state.logs.clear() |
| st.session_state.running = True |
| |
| loop = asyncio.get_event_loop() |
| loop.create_task(run_bot(url)) |
|
|
|
|
| st.subheader("Logs") |
|
|
| for log in st.session_state.logs: |
| st.text(log) |