|
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="Win64", |
|
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<br> by <a href='https://nayankasturi.eu.org'>Nayan Kasturi</a> aka Raanna.<br> Checkout the <a href='https://github.com/raannakasturi'>Github</a> for more projects and contact info.", |
|
description="This app captures a screenshot of the website you enter and displays it.<br> Licenced under <a href='https://creativecommons.org/licenses/by-nc-sa/4.0/'>cc-by-nc-sa-4.0</a>", |
|
api_name="capture" |
|
) |
|
|
|
if __name__ == "__main__": |
|
app.launch() |
|
|