Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from playwright.async_api import async_playwright | |
| import asyncio | |
| from io import BytesIO | |
| st.set_page_config(page_title="Webpage Screenshot", layout="wide") | |
| st.title("All-Purpose Webpage Screenshot") | |
| url = st.text_input( | |
| "Enter any webpage URL", | |
| value="https://example.com" | |
| ) | |
| if not url.startswith("http"): | |
| st.warning("Enter a valid URL (http / https)") | |
| st.stop() | |
| def get_screenshot(url: str): | |
| async def run(): | |
| async with async_playwright() as p: | |
| browser = await p.chromium.launch( | |
| headless=True, | |
| args=[ | |
| "--no-sandbox", | |
| "--disable-blink-features=AutomationControlled" | |
| ] | |
| ) | |
| context = await browser.new_context( | |
| user_agent=( | |
| "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " | |
| "AppleWebKit/537.36 (KHTML, like Gecko) " | |
| "Chrome/121.0.0.0 Safari/537.36" | |
| ), | |
| viewport={"width": 1280, "height": 800}, | |
| locale="en-US", | |
| timezone_id="Africa/Lagos", | |
| extra_http_headers={ | |
| "Accept-Language": "en-US,en;q=0.9", | |
| "Referer": "https://www.google.com/", | |
| } | |
| ) | |
| page = await context.new_page() | |
| await page.goto( | |
| url, | |
| wait_until="domcontentloaded", | |
| timeout=60000 | |
| ) | |
| # Give JS-heavy sites time to settle | |
| await page.wait_for_timeout(5000) | |
| screenshot = await page.screenshot(full_page=True) | |
| await context.close() | |
| await browser.close() | |
| return screenshot | |
| return asyncio.run(run()) | |
| if st.button("Capture Screenshot"): | |
| st.write("Loading page and capturing screenshot...") | |
| img = get_screenshot(url) | |
| if img: | |
| st.image(BytesIO(img), caption="Captured Screenshot", use_column_width=True) | |
| st.success("Done.") | |
| else: | |
| st.error("Screenshot failed.") |