a
    #yëi
&  ã                   @   sr   d dl Z d dlZd dlZd dlZd dlmZ dZdZdZdadd„ Z	dd	d
„Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)Údatetimezdhttps://autogestion-empresas.claro.com.ar/sites/launchpad#zcrm0204gestionesgeneraleslineas-Display&/zSapplication-zcrm0204gestionesgeneraleslineas-Display-component---Menu--input_cuentazUapplication-zcrm0204gestionesgeneraleslineas-Display-component---Menu--inpLinea-innerFc                 Ã   sˆ  |   dt› d�¡}| d¡I d H }|r@||v r@td|› �ƒ dS tdƒ |  dt› d�¡I d H }|rt| ¡ I d H  n|  dt› �¡I d H  t d¡I d H  g d	¢}|D ]�}|  |¡I d H }|r¦td
|› dt	|ƒ› d�ƒ |D ]R}| 
¡ I d H }	||	v rÜ| ¡ I d H  t d¡I d H  td|	 ¡ › �ƒ   dS qÜ �q8q¦| d¡I d H }
|
�rbtd|
› d�ƒ dS td|› d�ƒ | jdd�I d H  dS )Nú#z-innerÚvaluez  Cuenta ya seleccionada: TzAbriendo dropdown cuenta...z .sapMInputBaseIconContaineré   )ú[role='option']z[role='listitem']z.sapMSelectListItemz.sapMListTbl trz.sapMLIBContentz  Encontrado con 'z': ú itemsz  Cuenta seleccionada: z  Cuenta en campo: z (usando valor existente)z	  Cuenta z no encontradazerror_cuenta.png©ÚpathF)ÚlocatorÚ	ID_CUENTAÚget_attributeÚprintÚquery_selectorÚclickÚasyncioÚsleepÚquery_selector_allÚlenÚ
inner_textÚstripÚ
screenshot)ÚpageÚnumero_cuentaZinput_cuentaZvalor_actualZboton_dropdownZ
selectoresÚselectorÚitemsÚitemÚtextoZvalor© r   ú/home/Claro/claro/extractor.pyÚseleccionar_cuenta   s>    
r   c                 Ã   sâ  |rHt dƒ | jtdd�I d H  t d¡I d H  t| |ƒI d H }|sHdS t d|› �ƒ |  dt› �¡}| ¡ I d H  t d¡I d H  | j	 
d	¡I d H  | j	 
d
¡I d H  t d¡I d H  | j	j|dd�I d H  t d¡I d H  t dƒ g d¢}g }tdƒD ]H}|D ]"}	|  |	¡I d H }|�r �q&�q|�r2 �qDt d¡I d H  qú|�sh| jdd�I d H  t dƒ dS t dt|ƒ› d�ƒ t�s`|  d¡I d H }
|
�rht dƒ |
 ¡ I d H  t d¡I d H  tdƒD ]Š}g }|D ]4}	|  |	¡I d H }|�rÒt|ƒt|ƒk�rÒ �q�qÒ|�r>t|ƒt|ƒk�r>|}t dt|ƒ› d�ƒ  �qRt d¡I d H  �qÆdat dƒ nt dƒ |D ]`}| ¡ I d H }||v �rl|  d|¡I d H  t d¡I d H  t d | ¡ d d!… › �ƒ  dS �qlt d"|› d#�ƒ dS )$Nz"Navegando a Gestiones en Lineas...Údomcontentloaded)Ú
wait_untilé   FzIngresando linea: r   g      à?z	Control+aÚDeleteé–   )Údelayr   z#  Esperando lista de sugerencias...)z.sapMSuggestionItemz.sapMSuggPopover lir   z.sapMLIBz.sapMSLIé   zdebug_linea.pngr   z'  Sin sugerencias - ver debug_linea.pngz  Lista aparecio con r   z#btnGrowingz  Haciendo clic en Ver mas...é   é
   z  Lista completa: Tz-  Ver mas clickeado, no se volvera a clickearz(  Ver mas ya fue clickeado anteriormentea  el => {
                el.dispatchEvent(new MouseEvent('mousedown', {bubbles: true}));
                el.dispatchEvent(new MouseEvent('mouseup',   {bubbles: true}));
                el.dispatchEvent(new MouseEvent('click',     {bubbles: true}));
            }é   z  Linea seleccionada: é<   z  Linea z no encontrada en la lista)r   ÚgotoÚURL_CONSUMOr   r   r   r
   ÚID_LINEA_INPUTr   ÚkeyboardÚpressÚtypeÚranger   r   r   Ú_vermas_clickeador   r   Úevaluater   )r   r   Únumero_lineaÚprimera_vezÚokZinput_lineaZselectores_sugr   Zintentor   Zboton_vermasZitems_nuevosr   r   r   r   r   Úseleccionar_lineaA   s~    



ü

r7   c                 Ã   sˆ  t dƒ g d¢}d}|D ]n}zX|  |¡j}| ¡ I d H }|rr| ¡ I d H  t d¡I d H  t d|› �ƒ d}W  qˆW q   Y qY q0 q|� sþzD|  d¡j|  d¡d	�j ¡ I d H  t d¡I d H  d}t d
ƒ W n*   | jdd�I d H  t dƒ g  Y S 0 |  	d¡I d H }t dt
|ƒ› �ƒ g }|D �]X}	�z|	 d¡I d H }
|	 d¡I d H }|	 d¡I d H }|	 d¡I d H }|
�r†|
 ¡ I d H nd}|�rž| ¡ I d H nd}|�r¶| ¡ I d H nd}|�rÎ| ¡ I d H nd}t||ƒ}t ¡  d¡|||||d |d |d |dœ	}| |¡ t d|› d|› d|› d|d › d|d › d|› �ƒ W n4 t�y~ } zt d |› �ƒ W Y d }~n
d }~0 0 �q(|S )!Nz Navegando a Saldos y Consumos...)z+.sapMSLITitle:has-text('Saldos y Consumos')z'.sapMText:has-text('Saldos y Consumos')z li:has-text('Saldos y Consumos')z*.sapMNavItem:has-text('Saldos y Consumos')z[title='Saldos y Consumos']Fr"   z  Menu clickeado con: Tztext=Saldos y Consumosz:visible)Úhasz#  Menu clickeado con filtro visiblezdebug_menu.pngr   z/  No se pudo clickear menu - ver debug_menu.pngz.zBloqueBordeRedondeadozBloques encontrados: z.sapMTitle spanz.sapSuiteRMCInsideLabelz.sapMObjectIdentifierText spanZbdiz
Sin tituloúN/Az%Y-%m-%d %H:%MÚusadoÚtotalÚunidad)	ZfechaÚlineaÚtituloZporcentaje_usadoÚdetaller:   r;   r<   Ú
renovacionz  z: z | z	 | usado=ú z  Error en bloque: )r   r
   ÚfirstÚ
is_visibler   r   r   Úfilterr   r   r   r   r   Úparsear_detaller   ÚnowÚstrftimeÚappendÚ	Exception)r   r4   Zselectores_menuZ	clickeador   ZelementoÚvisibleZbloquesÚ
resultadosZbloqueZ	titulo_elZpct_elZ
detalle_elZrenovacion_elr>   Z
porcentajer?   r@   Úparsedr   Úer   r   r   Úextraer_bloques›   sl    
$


÷
8(rN   c                 C   sÐ   | st dƒ d S tdddd��"}tj| |ddd� W d   ƒ n1 sF0    Y  td	dd
dd��8}tj|| d  ¡ d�}| ¡  | | ¡ W d   ƒ n1 sž0    Y  t dt	| ƒ› d�ƒ t dƒ t dƒ d S )NzSin resultados para guardarzconsumo_todas.jsonÚwzutf-8)ÚencodingFr   )Úensure_asciiÚindentzconsumo_todas.csvÚ )ÚnewlinerP   r   )Z
fieldnamesz
Listo. z registros guardados.z  -> consumo_todas.jsonz  -> consumo_todas.csv)
r   ÚopenÚjsonÚdumpÚcsvZ
DictWriterÚkeysZwriteheaderZ	writerowsr   )rK   ÚfÚwriterr   r   r   Úguardar_resultados_archivoå   s    0(r\   c                 C   sz   | r| dkrddddœS t  d| ¡}|rntt| d¡ dd¡ƒƒ}| d	¡}t| d
¡ dd¡ƒ}|||dœS ddddœS )zt
    Entrada:  '2276.27 Min de 10000 Min'
    Salida:   { 'usado': 2276.27, 'total': 10000.0, 'unidad': 'Min' }
    r9   Nr   )r:   r;   r<   z*([\d,.]+)\s*(\w+)\s+de\s+([\d,.]+)\s*(\w+)r)   ú,Ú.r   r"   )ÚreÚsearchÚintÚfloatÚgroupÚreplace)r?   r>   Úmatchr:   r<   r;   r   r   r   rE   ø   s    
rE   c                 C   sL   | D ]B}|d dkr|d dkrt d|d › d|d › d	�ƒ ||ƒ qd
S )z]
    Revisa cada resultado y llama a callback_alerta
    cuando el campo usado llega a 0
    r:   r   r<   r9   z  ALERTA: linea r=   z - r>   u    llegÃ³ a 0N)r   )rK   Zcallback_alertar   r   r   r   Úverificar_alertas  s    rf   )F)r   rV   rX   r_   r   r,   r   r-   r2   r   r7   rN   r\   rE   rf   r   r   r   r   Ú<module>   s   2
ZJ