|
|
|
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 |
|
|
|
|
|
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): |
|
im1=Image.open(in1) |
|
im2=Image.open(in2) |
|
dst = Image.new( |
|
'RGB', (min(im1.width, im2.width), im1.height + im2.height)) |
|
dst.paste(im1, (0, 0)) |
|
dst.paste(im2, (0, im1.height)) |
|
return dst |
|
|
|
|
|
|
|
def run_script(url: str, height: int, width: int, check_b,check_h): |
|
mes_box=[] |
|
out_box=[] |
|
uid=uuid.uuid4() |
|
out=None |
|
is_url=True |
|
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(30) |
|
driver.set_window_size(int(width), int(height)) |
|
|
|
|
|
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(url: str, height: int, width: int, check_b,check_h): |
|
mes_box=[] |
|
out_box=[] |
|
uid=uuid.uuid4() |
|
out=None |
|
is_url=True |
|
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 |
|
|
|
html=driver.page_source |
|
print(html) |
|
driver.implicitly_wait(30) |
|
driver.set_window_size(int(width), int(height)) |
|
|
|
screenshot = driver.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 |
|
|
|
|
|
with gr.Blocks() as app: |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
inp = gr.Textbox(label="URL (must be Public)",lines=1) |
|
btn= gr.Button() |
|
|
|
with gr.Column(): |
|
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() |
|
|
|
btn.click(run_script,[inp,height,width,check_b,check_h],[outim,message,outgal,out]) |
|
app.queue(default_concurrency_limit=5).launch() |