Spaces:
Sleeping
Sleeping
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) | |