Neon-AI commited on
Commit
2a0d681
·
verified ·
1 Parent(s): ef4149d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -18
app.py CHANGED
@@ -1,38 +1,52 @@
1
  import streamlit as st
2
  import asyncio
3
  from playwright.async_api import async_playwright
4
- import threading
5
 
6
- logs = []
 
 
 
 
 
7
 
8
  async def run_bot(url):
 
 
9
  async with async_playwright() as p:
10
- browser = await p.chromium.launch(headless=True)
 
 
 
 
11
  page = await browser.new_page()
12
 
13
- page.on("console", lambda msg: logs.append(f"LOG: {msg.text}"))
14
- page.on("request", lambda req: logs.append(f"REQ: {req.url}"))
15
- page.on("response", lambda res: logs.append(f"RES: {res.url} {res.status}"))
16
 
17
  await page.goto(url)
18
- await page.evaluate("console.log('Injected script running');")
 
 
 
 
19
  await browser.close()
20
 
21
- # Wrapper to run async function in thread
22
- def run_bot_thread(url):
23
- asyncio.run(run_bot(url))
24
 
25
  st.title("DevTools Bot Dashboard")
26
 
27
- target_url = st.text_input("Enter the URL to monitor:", "https://example.com")
 
 
 
 
 
28
 
29
- if st.button("Run Bot"):
30
- logs.clear()
31
- # Start bot in separate thread
32
- threading.Thread(target=run_bot_thread, args=(target_url,), daemon=True).start()
33
- st.success("Bot started in background. Logs will appear below shortly.")
34
 
35
- # Display logs
36
  st.subheader("Logs")
37
- for log in logs:
 
38
  st.text(log)
 
1
  import streamlit as st
2
  import asyncio
3
  from playwright.async_api import async_playwright
 
4
 
5
+ if "logs" not in st.session_state:
6
+ st.session_state.logs = []
7
+
8
+ if "running" not in st.session_state:
9
+ st.session_state.running = False
10
+
11
 
12
  async def run_bot(url):
13
+ st.session_state.logs.append("Starting bot...")
14
+
15
  async with async_playwright() as p:
16
+ browser = await p.chromium.launch(
17
+ headless=True,
18
+ args=["--no-sandbox", "--disable-dev-shm-usage"]
19
+ )
20
+
21
  page = await browser.new_page()
22
 
23
+ page.on("console", lambda msg: st.session_state.logs.append(f"LOG: {msg.text}"))
24
+ page.on("request", lambda req: st.session_state.logs.append(f"REQ: {req.url}"))
25
+ page.on("response", lambda res: st.session_state.logs.append(f"RES: {res.url} {res.status}"))
26
 
27
  await page.goto(url)
28
+
29
+ # keep session alive
30
+ for _ in range(15):
31
+ await asyncio.sleep(1)
32
+
33
  await browser.close()
34
 
35
+ st.session_state.logs.append("Bot finished.")
36
+ st.session_state.running = False
37
+
38
 
39
  st.title("DevTools Bot Dashboard")
40
 
41
+ url = st.text_input("Enter URL", "https://example.com")
42
+
43
+ if st.button("Run Bot") and not st.session_state.running:
44
+ st.session_state.logs.clear()
45
+ st.session_state.running = True
46
+ asyncio.run(run_bot(url))
47
 
 
 
 
 
 
48
 
 
49
  st.subheader("Logs")
50
+
51
+ for log in st.session_state.logs:
52
  st.text(log)