raannakasturi commited on
Commit
1787bdb
1 Parent(s): 6ce525e

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +104 -0
app.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from selenium import webdriver
2
+ from selenium.webdriver.chrome.service import Service
3
+ from selenium.webdriver.chrome.options import Options
4
+ from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
5
+ from selenium_stealth import stealth
6
+ from webdriver_manager.chrome import ChromeDriverManager
7
+ import base64
8
+ import json
9
+ import requests
10
+ from dotenv import load_dotenv
11
+ import os
12
+ import gradio as gr
13
+
14
+ def driverSetup():
15
+ options = Options()
16
+ options.add_argument("start-maximized")
17
+ options.add_argument("--headless=new")
18
+ options.add_argument("--disable-extensions")
19
+ options.add_experimental_option("excludeSwitches", ["enable-automation"])
20
+ options.add_experimental_option('useAutomationExtension', False)
21
+ options.add_argument("--window-size=1366,768")
22
+ service = Service(ChromeDriverManager().install())
23
+ driver = webdriver.Chrome(service=service, options=options)
24
+
25
+ stealth(driver,
26
+ languages=["en-US", "en"],
27
+ vendor="Google Inc.",
28
+ platform="Win64",
29
+ webgl_vendor="Intel Inc.",
30
+ renderer="Intel Iris OpenGL Engine",
31
+ fix_hairline=True,
32
+ )
33
+ return driver
34
+
35
+ def screenshotName(url):
36
+ if url.startswith('https://'):
37
+ url = url.replace('https://', '')
38
+ elif url.startswith('http://'):
39
+ url = url.replace('http://', '')
40
+ elif url.startswith('http://www.'):
41
+ url = url.replace('http://www.', '')
42
+ elif url.startswith('https://www.'):
43
+ url = url.replace('https://www.', '')
44
+ else:
45
+ url = url
46
+ if url.endswith('/'):
47
+ url = url[:-1]
48
+ else:
49
+ url = url
50
+ ssname = f"SS_{url.replace('/', '')}.png"
51
+ return ssname
52
+
53
+ def getScreenshots(driver, url):
54
+ driver.get(url)
55
+ ssname = screenshotName(url)
56
+ driver.save_screenshot(ssname)
57
+ return ssname
58
+
59
+ def saveScreenshot(url):
60
+ driver = driverSetup()
61
+ screenshot_file = getScreenshots(driver, url)
62
+ driver.quit()
63
+ return screenshot_file
64
+
65
+ def uploadandDelSS(file):
66
+ load_dotenv()
67
+ api = os.getenv("IMGBBAPI")
68
+ url = os.getenv("IMGBBURL")
69
+ filename = file
70
+ with open(f"{filename}", "rb") as file:
71
+ payload = {
72
+ "key": api,
73
+ "image": base64.b64encode(file.read()),
74
+ "name": f"SS_{filename}",
75
+ "expiration": "15552000"
76
+ }
77
+ r = requests.post(url, data= payload)
78
+ view_url=(json.loads(r.text)["data"]["display_url"])
79
+ file.close()
80
+ os.remove(filename)
81
+ return view_url, view_url
82
+
83
+ def main(url):
84
+ ss = saveScreenshot(url)
85
+ img, imgurl = uploadandDelSS(ss)
86
+ return img, imgurl
87
+
88
+ app = gr.Interface(
89
+ fn=main,
90
+ inputs=[
91
+ gr.Textbox(label="Enter URL", placeholder="https://google.com", type="text", interactive=True)
92
+ ],
93
+ outputs=[
94
+ gr.Image(label="Website Screenshot"),
95
+ gr.Textbox(label="Image URL", type="text", show_copy_button=True, interactive=False)
96
+ ],
97
+ 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.",
98
+ 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>",
99
+ api_name="capture",
100
+ concurrency_limit=10
101
+ )
102
+
103
+ if __name__ == "__main__":
104
+ app.launch()