xc / app.py
COLTO50's picture
Update app.py
562ace5 verified
import gradio as gr
import asyncio
from playwright.async_api import async_playwright
import base64
from PIL import Image
import io
async def capture_screenshot(url):
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto(url)
screenshot = await page.screenshot()
await browser.close()
return Image.open(io.BytesIO(screenshot))
async def open_link(url, index):
try:
screenshot = await capture_screenshot(url)
return f"Request {index+1}: Successfully captured screenshot", screenshot
except Exception as e:
return f"Request {index+1}: Error: {str(e)}", None
async def open_links(link, count):
tasks = [open_link(link, i) for i in range(count)]
results = await asyncio.gather(*tasks)
statuses = [result[0] for result in results]
screenshots = [result[1] for result in results if result[1] is not None]
return "\n".join(statuses), screenshots[0] if screenshots else None
def gradio_open_links(link, count):
return asyncio.run(open_links(link, count))
iface = gr.Interface(
fn=gradio_open_links,
inputs=[
gr.Textbox(label="Enter link", placeholder="https://example.com"),
gr.Slider(minimum=1, maximum=5, step=1, value=1, label="Number of times to open")
],
outputs=[
gr.Textbox(label="Results"),
gr.Image(label="Screenshot")
],
title="Link Opener with Screenshot",
description="Enter a link and choose how many times to open it. The app will attempt to open the link, capture a screenshot, and display the first successful screenshot.",
theme="huggingface",
examples=[["https://www.example.com", 1]]
)
iface.launch()