#from __future__ import annotations
from selenium import webdriver
import gradio as gr
import uuid
import re
from PIL import Image
from io import BytesIO
from pathlib import Path
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
#from selenium_webdriver import WebElement
driver_type = 'chromedriver'
driver=False
def get_concat_h_cut(in1, in2):
im1=Image.open(in1)
im2=Image.open(in2)
dst = Image.new('RGB', (im1.width + im2.width,
min(im1.height, im2.height)))
dst.paste(im1, (0, 0))
dst.paste(im2, (im1.width, 0))
return dst
def get_concat_v_cut(in1, in2, theme):
im1=Image.open(in1)
im2=Image.open(in2)
if theme=='dark':
color=(31,41,55)
if theme=='light':
color=(255,255,255)
dst = Image.new('RGB', (min(im1.width, im2.width), im1.height + im2.height+30),color=color)
dst.paste(im1, (0, 10))
dst.paste(im2, (0, im1.height+20))
return dst
def run_script1(url: str, height: int, width: int, check_b,check_h):
mes_box=[]
out_box=[]
uid=uuid.uuid4()
out=None
is_url=True
url='https://omnibus-snap.hf.space/?chat=[(123,555),(2342,32344)]&__theme=dark'
if is_url:
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
mes='
operation success'
try:
driver = webdriver.Chrome(options=options)
#driver.current_window_handle
driver.get(url)
html=driver.page_source
#print(html)
driver.implicitly_wait(30)
driver.set_window_size(int(width), int(height))
#page = driver.find_element(By.TAG_NAME, "html")
#driver.execute_script("arguments[0].style.background = 'blue';",page)
main_head = driver.find_element(By.CLASS_NAME, "main-content-header")
head_shot = main_head.screenshot(f'head-{uid}-tmp.png')
obj = driver.find_element(By.CLASS_NAME, "main")
messages = driver.find_elements(By.CLASS_NAME, "message")
for i,ea in enumerate(check_b):
try:
ea = int(ea)
ea = (ea*2)-2
print (ea)
messages[ea].screenshot(f'{i}-{uid}-tmp.png')
messages[ea+1].screenshot(f'{i+1}-{uid}-tmp.png')
im_roll = get_concat_v_cut(f'{i}-{uid}-tmp.png',f'{i+1}-{uid}-tmp.png')
im_roll.save(f'comb{i}-{uid}-tmp.png')
out_box.append(f'comb{i}-{uid}-tmp.png')
except Exception:
mes="Some blocks returned an error"
if out_box:
if len(out_box)>1:
im_roll = get_concat_v_cut(f'{out_box[0]}',f'{out_box[1]}')
im_roll.save(f'comb-{uid}-tmp.png')
for i in range(2,len(out_box)):
im_roll = get_concat_v_cut(f'comb-{uid}-tmp.png',f'{out_box[i]}')
im_roll.save(f'comb-{uid}-tmp.png')
out = f'comb-{uid}-tmp.png'
else:
tmp_im = Image.open(out_box[0])
tmp_im.save(f'comb-{uid}-tmp.png')
out = f'comb-{uid}-tmp.png'
if check_h:
head_paste = get_concat_v_cut(f'head-{uid}-tmp.png',f'comb-{uid}-tmp.png')
head_paste.save(f'comb-{uid}-tmp.png')
out = f'comb-{uid}-tmp.png'
screenshot = obj.screenshot(f'{uid}-tmp.png')
except WebDriverException as e:
return Image.new('RGB', (1, 1)), f'Please enter a valid URL of a website/host.',out_box,out
finally:
if driver:
driver.quit()
return Image.open(f'{uid}-tmp.png'), mes,out_box,out
else:
return None, 'Please enter a valid URL of a website/host.',out_box,out
def run_script(chat: list, height: int, width: int, check_b,check_h,check_t,wait_time):
mes_box=[]
out_box=[]
uid=uuid.uuid4()
out=None
is_url=True
url=f'https://omnibus-snap.hf.space/?chat={chat}&__theme={check_t}'
if wait_time>10000:
wait_time=10000
if is_url:
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
mes='operation success'
try:
driver = webdriver.Chrome(options=options)
driver.get(url)
html=driver.page_source
print(html)
driver.implicitly_wait(int(wait_time*30))
driver.set_window_size(int(width), int(height))
obj = driver.find_element(By.ID, "component-1")
screenshot = obj.screenshot(f'{uid}-tmp.png')
yield Image.open(f'{uid}-tmp.png'), 'Finished loading. If loading is incomplete, restart with longer wait time',out_box,out
#main_head = driver.find_element(By.CLASS_NAME, "main-content-header")
#head_shot = main_head.screenshot(f'head-{uid}-tmp.png')
obj = driver.find_element(By.CLASS_NAME, "main")
#messages = driver.find_elements(By.CLASS_NAME, "panel")
messages = driver.find_elements(By.CLASS_NAME, "message-row")
for i,ea in enumerate(check_b):
try:
ea = int(ea)
ea = (ea*2)-2
print (ea)
messages[ea].screenshot(f'{i}-{uid}-tmp.png')
messages[ea+1].screenshot(f'{i+1}-{uid}-tmp.png')
im_roll = get_concat_v_cut(f'{i}-{uid}-tmp.png',f'{i+1}-{uid}-tmp.png',check_t)
im_roll.save(f'comb{i}-{uid}-tmp.png')
out_box.append(f'comb{i}-{uid}-tmp.png')
except Exception:
mes="Some blocks returned an error"
if out_box:
if len(out_box)>1:
im_roll = get_concat_v_cut(f'{out_box[0]}',f'{out_box[1]}',check_t)
im_roll.save(f'comb-{uid}-tmp.png')
for i in range(2,len(out_box)):
im_roll = get_concat_v_cut(f'comb-{uid}-tmp.png',f'{out_box[i]}',check_t)
im_roll.save(f'comb-{uid}-tmp.png')
out = f'comb-{uid}-tmp.png'
else:
tmp_im = Image.open(out_box[0])
tmp_im.save(f'comb-{uid}-tmp.png')
out = f'comb-{uid}-tmp.png'
except WebDriverException as e:
return Image.new('RGB', (1, 1)), f'Please enter a valid URL of a website/host.',out_box,out
finally:
if driver:
driver.quit()
yield Image.open(f'{uid}-tmp.png'), mes,out_box,out
else:
yield None, 'Please enter a valid URL of a website/host.',out_box,out
def load_frame(inp):
html_mod=f"""
"""
return html_mod
with gr.Blocks() as app:
gr.HTML("""""")
with gr.Row():
with gr.Column():
inp = gr.Textbox(label="Chat: [('user','bot'),('user','bot')]",lines=6,value=[('123','555'),('2342','32344')])
wait_t=gr.Slider(1, 10000, value=2000, label="Wait time", info="Wait for page to load. More data = Longer wait")
with gr.Row():
btn= gr.Button("Snapshot")
stop_btn=gr.Button("Stop")
with gr.Column():
with gr.Row():
check_t=gr.Radio(label="Theme", choices=["light","dark"], value="dark")
check_h=gr.Checkbox(label="Show Header", value=True)
check_b=gr.CheckboxGroup(label="Chatblocks", choices=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20], value=[1])
with gr.Row():
height=gr.Number(label="Height", value=4096)
width=gr.Number(label="Width",value=800)
message=gr.HTML('Enter URL')
with gr.Row():
with gr.Column():
out=gr.Image()
outgal=gr.Gallery()
outim = gr.Image()
prev=gr.HTML()
#load_btn.click(load_frame,inp,prev)
go = btn.click(run_script,[inp,height,width,check_b,check_h,check_t,wait_t],[outim,message,outgal,out])
stop_btn.click(None,None,None,cancels=go)
app.queue(default_concurrency_limit=10).launch()