Spaces:
Sleeping
Sleeping
#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='<center>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="<center>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'<center>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, '<center>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='<center>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'), '<center>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="<center>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'<center>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, '<center>Please enter a valid URL of a website/host.',out_box,out | |
def load_frame(inp): | |
html_mod=f""" | |
<div id="my_game" style="height:600px;width:100%"> | |
<iframe | |
id="myIframe" | |
src="https://omnibus-snap.hf.space/?chat=[(123,555),(2342,32344)]&__theme=dark" | |
frameborder="0" | |
width="100%" | |
height="100%" | |
></iframe> | |
</div>""" | |
return html_mod | |
with gr.Blocks() as app: | |
gr.HTML("""<head><meta http-equiv="refresh" content="180"></head>""") | |
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('<center>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() |