from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium_stealth import stealth from webdriver_manager.chrome import ChromeDriverManager import base64 import json import requests from dotenv import load_dotenv import os import gradio as gr def driverSetup(): options = Options() options.add_argument("start-maximized") options.add_argument("--headless=new") options.add_argument("--disable-extensions") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) options.add_argument("--window-size=1366,768") service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=options) stealth(driver, languages=["en-US", "en"], vendor="Google Inc.", platform="linux64", webgl_vendor="Intel Inc.", renderer="Intel Iris OpenGL Engine", fix_hairline=True, ) return driver def screenshotName(url): if url.startswith('https://'): url = url.replace('https://', '') elif url.startswith('http://'): url = url.replace('http://', '') elif url.startswith('http://www.'): url = url.replace('http://www.', '') elif url.startswith('https://www.'): url = url.replace('https://www.', '') else: url = url if url.endswith('/'): url = url[:-1] else: url = url ssname = f"SS_{url.replace('/', '')}.png" return ssname def getScreenshots(driver, url): driver.get(url) ssname = screenshotName(url) driver.save_screenshot(ssname) return ssname def saveScreenshot(url): driver = driverSetup() screenshot_file = getScreenshots(driver, url) driver.quit() return screenshot_file def uploadandDelSS(file): load_dotenv() api = os.getenv("IMGBBAPI") url = os.getenv("IMGBBURL") filename = file with open(f"{filename}", "rb") as file: payload = { "key": api, "image": base64.b64encode(file.read()), "name": f"SS_{filename}", "expiration": "15552000" } r = requests.post(url, data= payload) view_url=(json.loads(r.text)["data"]["display_url"]) file.close() os.remove(filename) return view_url, view_url def main(url): ss = saveScreenshot(url) img, imgurl = uploadandDelSS(ss) return img, imgurl app = gr.Interface( fn=main, inputs=[ gr.Textbox(label="Enter URL", placeholder="https://google.com", type="text", interactive=True) ], outputs=[ gr.Image(label="Website Screenshot"), gr.Textbox(label="Image URL", type="text", show_copy_button=True, interactive=False) ], title="Website Screenshot Capture
by Nayan Kasturi aka Raanna.
Checkout the Github for more projects and contact info.", description="This app captures a screenshot of the website you enter and displays it.
Licenced under cc-by-nc-sa-4.0", api_name="capture" ) if __name__ == "__main__": app.launch()