memex-in's picture
Update app.py
6b90b86 verified
import os
import time
import streamlit as st
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import tempfile
# Function to capture a screenshot of a webpage after redirection
def capture_screenshot(url, output_path):
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--window-size=1920,1080')
driver = webdriver.Chrome(options=chrome_options)
try:
driver.get(url)
# Wait until the page is loaded and title stabilizes (handles JavaScript-based redirects)
WebDriverWait(driver, 15).until(lambda d: d.execute_script('return document.readyState') == 'complete')
time.sleep(2) # Small extra wait to let JS redirects finish if any
driver.save_screenshot(output_path)
finally:
driver.quit()
# Streamlit UI
st.title("Timed Web Screenshot Viewer (with Redirect Support)")
url = st.text_input("Enter a website URL:", "https://example.com")
wait_time = st.number_input("Time to wait before taking screenshot (in seconds):", min_value=1, max_value=30, value=5, step=1)
if st.button("Generate Screenshot"):
screenshot_path = None
try:
with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as tmp_file:
screenshot_path = tmp_file.name
with st.empty():
for i in range(wait_time, 0, -1):
st.info(f"Waiting... {i} seconds left")
time.sleep(1)
st.write("Capturing screenshot...")
capture_screenshot(url.strip('"'), screenshot_path)
st.image(screenshot_path, caption='Screenshot of the webpage', use_column_width=True)
except Exception as e:
st.error(f"An error occurred: {e}")
finally:
if screenshot_path and os.path.exists(screenshot_path):
os.remove(screenshot_path)