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) # keep session alive 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 # Run in background loop = asyncio.get_event_loop() loop.create_task(run_bot(url)) st.subheader("Logs") for log in st.session_state.logs: st.text(log)