o
    ,e&                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m	Z	 d dl
Zd dlmZ d dlmZ d dlmZ d dlmZ G d	d
 d
ZdS )    N)Image)BytesIO)tqdm)By)WebDriverWait)expected_conditions)Tablec                   @   sn   e Zd Z																		dd
dZdd Zdd Zdd Zdd Zdd Zdd Z	dd Z
dS )GenerateTablecell      
         r   chrome  c                 C   s   || _ || _|| _|| _|| _|| _|| _|| _|| _|| _	|| _
|| _|| _|	| _|
| _|| _|| _|| _|| _| jdkrKddlm} ddlm} nddlm} ddlm} | }|d |d ||d	| _d S )
Nr   r   )Chrome)ChromeOptions)Firefox)FirefoxOptionsz
--headlessz--no-sandbox)Zoptions)outputch_dict_pathen_dict_pathcell_box_typemin_rowmax_rowmin_colmax_colmax_txt_lenmin_txt_len
color_probcell_max_widthcell_max_heightmax_span_row_countmax_span_col_countmax_span_valuebrowerbrower_heightbrower_widthZselenium.webdriverr   r   r   r   Zadd_argumentdriver)selfr   r   r   r   r   r   r   r   r#   r$   r%   r   r   r    r!   r"   r&   r(   r'   ZBrowerZOptionsZopts r+   tc:\Users\DELL\Documents\GitHub\TableGeneration#%E7%94%9F%E6%88%90%E8%A1%A8%E6%A0%BC\TableGeneration\GenerateTable.py__init__   s8   


zGenerateTable.__init__c              	   C   s  t j| jdd tt j| jdddd}tt|D ]}|  }|d u r&q|\}}}}}	| 	||\}}dt
jtjtj dd	}
d
|	||
}
t jt j| jddd t jt j| jddd t j| jd|
d }t j| jd|
d }t|ddd}|| W d    n1 sw   Y  |j|dd t jd|
d }| |||}|dtj|dd q|  |   d S )NT)exist_okzgt.txtzutf-8w)encodingmode r   )kz{}_{}_{}htmlimgz.htmlz.jpg)X  r6   )Zdpiz{}
F)ensure_ascii)osmakedirsr   openpathjoinr   rangegenerate_table
clip_whiterandomchoicesstringZascii_uppercasedigitsformatwriteZsavemake_ppstructure_labeljsondumpsclose)r*   Z	img_countZf_gtioutimhtml_content	structurecontensborderZoutput_file_nameZhtml_save_pathZimg_save_pathfZimg_file_name
label_infor+   r+   r,   gen_table_imgE   sN   zGenerateTable.gen_table_imgc                 C   s   t | j| j}t | j| j}z3t| j| j| j	||| j
| j| j| j| j| j| j| j}| \}}}}| ||\}}	||||	|fW S  tyU   dd l}
|
  Y d S    dd l}|  Y d S )Nr   )r@   randintr   r   r   r   r   r   r   r   r   r   r#   r$   r%   r    r!   r"   Zcreatehtml_to_imgKeyboardInterruptsysexit	tracebackZ	print_exc)r*   ZcolsZrowstableid_countrM   rN   rP   rL   rO   rW   rY   r+   r+   r,   r>   r   s*   

zGenerateTable.generate_tablec                 C   sb   |dd|iid}g }|D ]}|d }| t||dd  d q||d d< | ||d	< |S )
NrN   tokens)filenamer4      r   )r\   bboxr4   cellsgt)appendlist#rebuild_html_from_ppstructure_label)r*   rN   bboxesimg_pathdr`   r_   textr+   r+   r,   rF      s   z$GenerateTable.make_ppstructure_labelc                    s   ddl m  |d d d  }dd t|D }t|d d d |d d	 d d d D ] \}}|d rL fd
d|d D }d|}||d | q,d|}d|}|S )Nr   escaper4   rN   r\   c                 S   s   g | ]
\}}|d v r|qS ))z<td>>r+   ).0rJ   tagr+   r+   r,   
<listcomp>   s
    zEGenerateTable.rebuild_html_from_ppstructure_label.<locals>.<listcomp>r`   c                    s$   g | ]}t |d kr |n|qS )r^   )len)rl   Ztokenri   r+   r,   rn      s    r2   r^   z+<html><body><table>{}</table></body></html>)r4   rj   copy	enumeratezipr<   insertrD   )r*   rR   Z	html_codeZ	to_insertrJ   r
   r+   ri   r,   rd      s$   .


z1GenerateTable.rebuild_html_from_ppstructure_labelc                 C   sT  |j \}}tdd |D }|d d d d df  }|d d d d df  }|d d d d df  }|d d d d df  }	td|tdd }td|tdd }t||tdd }t||	tdd }	|||||	g}|d d d d df  |8  < |d d d d df  |8  < t||D ]
\}
}|	 |
d< q||fS )Nc                 S   s   g | ]}|d  qS )r   r+   )rl   xr+   r+   r,   rn      s    z,GenerateTable.clip_white.<locals>.<listcomp>r   r^   r   r   )
sizenpZarrayminmaxr@   rT   croprs   tolist)r*   rL   re   r/   hr_   xminyminxmaxymaxitemZboxr+   r+   r,   r?      s    
zGenerateTable.clip_whitec              
   C   s.  | j d|  | j   | j j| j| jdd | j  }|d |d }}g }t|D ]N}t| j d	t
tjt|f}|j }	t|	}
|j}|j}|d }|d }t|d | }t|d | }||
|	||g||g||g||ggg q,| j  }tt|d	}|d
d
||f}||fS )zconverts html to imagezdata:text/html;charset=utf-8,Zcurrent)widthheightZwindowHandler   r   r   ru   yZRGBr   )r)   getZmaximize_windowZset_window_sizer(   r'   Zget_window_sizer=   r   ZuntilECZpresence_of_element_locatedr   ZIDstrrh   striprp   locationrv   intrb   Zget_screenshot_as_pngr   r:   r   Zconvertrz   )r*   rM   r[   Zwindow_sizeZ
max_heightZ	max_widthrO   ideZtxtZlentextZlocZsize_r}   r~   r   r   ZpngrL   r+   r+   r,   rU      sD   



zGenerateTable.html_to_imgc                 C   s   | j   | j   d S )N)r)   Zstop_clientquit)r*   r+   r+   r,   rI      s   
zGenerateTable.closeN)r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname__r-   rS   r>   rF   rd   r?   rU   rI   r+   r+   r+   r,   r	      s2    
3-%r	   )rG   r8   rW   r@   rB   ZPILr   ior   r   Znumpyrw   Zselenium.webdriver.common.byr   Zselenium.webdriver.support.uir   Zselenium.webdriver.supportr   r   ZTableGeneration.Tabler   r	   r+   r+   r+   r,   <module>   s    