#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 from html2image import Html2Image hti = Html2Image() driver_type = 'chromedriver' driver=False def html2im(html,css=None): html = html #css = css #hti.screenshot(html_str=html, save_as='red_page.png') hti.screenshot(html_str=html, css_str=css, save_as='red_page.png') return 'red_page.png' 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='
operation success' try: driver = webdriver.Chrome(options=options) driver.get(url) html=driver.page_source #print (driver.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 with gr.Blocks() as app: with gr.Row(): with gr.Column(): inp = gr.Textbox(label="URL (must be Public)",lines=1) css_inp=gr.Textbox(label="CSS") 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('
Enter URL') with gr.Row(): with gr.Column(): out=gr.Image() outgal=gr.Gallery() outim = gr.Image() btn.click(html2im,[inp,css_inp],out) #btn.click(run_script,[inp,height,width,check_b,check_h],[outim,message,outgal,out]) app.queue(default_concurrency_limit=5).launch()