
     fD                        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	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  e j        e          Zi ej        d	ej        d
ej        dej        dej        dej        dej        dej        dej        dej        dej         dej!        dej"        dej#        dej$        dej%        dej&        di ej'        dej(        dej)        dej*        dej+        dej,        dej-        d ej.        d!ej/        d"ej0        d#ej1        d$ej2        d%ej3        d&ej4        d'ej5        d(ej6        d)ej7        d*i ej8        d+ej9        d,ej:        d-ej;        d.ej<        d/ej=        d0ej>        d1ej?        d2ej@        d3ejA        d4ejB        d5ejC        d6ejD        d7ejE        d8ejF        d9ejG        d:ejH        d;i ejI        d<ejJ        d=ejK        d>ejL        d?ejM        d@ejN        dAejO        dBejP        dCejQ        dDejR        dEejS        dFejT        dGejU        dHejV        dIejW        dJejX        dKejY        dLejZ        dMej[        dNej\        dOej]        dPej^        dQej_        dRej`        dSeja        dTejb        dUejc        dVejd        dWeje        dXejf        dYiZg G dZ d[          ZhdS )\    N)	b64encode)parse)__version__   )utils)Command)	ErrorCode)POSTz/session)DELETEz/session/$sessionId)GET/session/$sessionId/window)r   z"/session/$sessionId/window/handles)r
   /session/$sessionId/url)r
   z/session/$sessionId/forward)r
   z/session/$sessionId/back)r
   z/session/$sessionId/refresh)r
   z /session/$sessionId/execute/sync)r
   z!/session/$sessionId/execute/async)r   r   )r   z/session/$sessionId/title)r   z/session/$sessionId/source)r   z/session/$sessionId/screenshot)r   z*/session/$sessionId/element/$id/screenshot)r
   z/session/$sessionId/element)r
   z/session/$sessionId/elements)r   z"/session/$sessionId/element/active)r
   z'/session/$sessionId/element/$id/element)r
   z(/session/$sessionId/element/$id/elements)r
   z%/session/$sessionId/element/$id/click)r
   z%/session/$sessionId/element/$id/clear)r   z$/session/$sessionId/element/$id/text)r
   z%/session/$sessionId/element/$id/value)r   z$/session/$sessionId/element/$id/name)r   z(/session/$sessionId/element/$id/selected)r   z'/session/$sessionId/element/$id/enabled)r   z$/session/$sessionId/element/$id/rect)r   z//session/$sessionId/element/$id/attribute/$name)r   z./session/$sessionId/element/$id/property/$name)r   z,/session/$sessionId/element/$id/computedrole)r   z-/session/$sessionId/element/$id/computedlabel)r   z&/session/$sessionId/element/$id/shadow)r
   z,/session/$sessionId/shadow/$shadowId/element)r
   z-/session/$sessionId/shadow/$shadowId/elements)r   /session/$sessionId/cookie)r
   r   )r    /session/$sessionId/cookie/$name)r   r   )r   r   )r
   z/session/$sessionId/frame)r
   z /session/$sessionId/frame/parent)r
   r   )r
   z/session/$sessionId/window/new)r   r   )r   z1/session/$sessionId/element/$id/css/$propertyName)r
   z!/session/$sessionId/execute_async)r
   /session/$sessionId/timeouts)r   r   )r
   z!/session/$sessionId/alert/dismiss)r
   z /session/$sessionId/alert/accept)r
   /session/$sessionId/alert/text)r   r   )r
   /session/$sessionId/actions)r   r   )r
   /session/$sessionId/window/rect)r   r   )r
   z#/session/$sessionId/window/maximize)r
   /session/$sessionId/orientation)r   r   )r   &/session/$sessionId/network_connection)r
   r   )r
   z/session/$sessionId/se/log)r   z /session/$sessionId/se/log/types)r   /session/$sessionId/context)r   z/session/$sessionId/contexts)r
   r   )r
   z%/session/$sessionId/window/fullscreen)r
   z#/session/$sessionId/window/minimize)r
   z/session/$sessionId/print)r
   z*/session/$sessionId/webauthn/authenticator)r   z;/session/$sessionId/webauthn/authenticator/$authenticatorId)r
   zF/session/$sessionId/webauthn/authenticator/$authenticatorId/credential)r   G/session/$sessionId/webauthn/authenticator/$authenticatorId/credentials)r   zU/session/$sessionId/webauthn/authenticator/$authenticatorId/credentials/$credentialId)r   r   )r
   z>/session/$sessionId/webauthn/authenticator/$authenticatorId/uv)r
   z/session/$sessionId/se/file)r   /session/$sessionId/se/files)r
   r   )r   r   c                   D   e Zd ZdZdZej        Zdej	        v r ej
        d          n ej                    Zed             Zed             Zed             Zed             Zed             Zedd
            Zd Zd Zd Zd ZddededefdZd ZddZd ZddZdS )RemoteConnectionzA connection with the Remote WebDriver server.

    Communicates with the server using the WebDriver wire protocol:
    https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol
    NREQUESTS_CA_BUNDLEc                 >    | j         t          j        k    rdn| j         S )zp:Returns:

        Timeout value in seconds for all http requests made to the
        Remote Connection
        N)_timeoutsocket_GLOBAL_DEFAULT_TIMEOUTclss    n/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/selenium/webdriver/remote/remote_connection.pyget_timeoutzRemoteConnection.get_timeout   s     |v'EEEtt3<W    c                     || _         dS )zyOverride the default timeout.

        :Args:
            - timeout - timeout value for http requests in seconds
        N)r   )r"   timeouts     r#   set_timeoutzRemoteConnection.set_timeout   s     r%   c                 (    t           j        | _        dS )zAReset the http request timeout to socket._GLOBAL_DEFAULT_TIMEOUT.N)r   r    r   r!   s    r#   reset_timeoutzRemoteConnection.reset_timeout   s     5r%   c                     | j         S )z:Returns:

        Paths of the .pem encoded certificate to verify connection to
        command executor. Defaults to certifi.where() or
        REQUESTS_CA_BUNDLE env variable if set.
        	_ca_certsr!   s    r#   get_certificate_bundle_pathz,RemoteConnection.get_certificate_bundle_path   s     }r%   c                     || _         dS )zSet the path to the certificate bundle to verify connection to
        command executor. Can also be set to None to disable certificate
        validation.

        :Args:
            - path - path of a .pem encoded certificate chain.
        Nr,   )r"   paths     r#   set_certificate_bundle_pathz,RemoteConnection.set_certificate_bundle_path   s     r%   Fc                 |   t          j                                                    }|dk    rd}dddt           d| dd}|j        r\t          |j         d	|j                                                   }|                    d
d|	                                 i           |r|                    ddi           |S )zGet headers for remote request.

        :Args:
         - parsed_url - The parsed url
         - keep_alive (Boolean) - Is this a keep-alive connection (default: False)
        darwinmaczapplication/jsonzapplication/json;charset=UTF-8z	selenium/z	 (python ))AcceptContent-Typez
User-Agent:AuthorizationzBasic 
Connectionz
keep-alive)
platformsystemlowerr   usernamer   passwordencodeupdatedecode)r"   
parsed_url
keep_aliver<   headersbase64strings         r#   get_remote_connection_headersz.RemoteConnection.get_remote_connection_headers   s     ""((**XF )<EkEEFEEE
 
  	P$
(;%S%Sj>Q%S%S%Z%Z%\%\]]LNNO-Ml6I6I6K6K-M-MNOOO 	9NNL,7888r%   c                 b   | j                             d          r=t          j                            dt          j                            d                    S | j                             d          r=t          j                            dt          j                            d                    S d S )Nzhttps://https_proxyHTTPS_PROXYzhttp://
http_proxy
HTTP_PROXY)_url
startswithosenvirongetselfs    r#   _get_proxy_urlzRemoteConnection._get_proxy_url   s    9
++ 	P:>>-1N1NOOO9	** 	N:>>,
|0L0LMMM	N 	Nr%   c                     | j         }||                    d          dz   d          }d|v o-t          |d |                    d                             dk    S )Nr8      @r   
_proxy_urlfindlen)rS   urls     r#   _identify_http_proxy_authz*RemoteConnection._identify_http_proxy_auth   sW    o#((3--!#%%&cz;c#oo"677!;;r%   c                     | j         }|d |                    d          dz            }|t          |          d          }|d |                    d                   }||t          |          dz   d          z   }||fS )Nr8   rV   rW   r   rX   )rS   r\   protocolno_protocolauthproxy_without_auths         r#   _separate_http_proxy_authz*RemoteConnection._separate_http_proxy_auth   s    o*#**+#h--//*2[--c2223%CIIMOO(DD!4''r%   c                    d|                                  i}| j        rd|d<   | j        |d<   | j        r| j                                                            d          rddlm}  || j        fi |S |                                 r>|                                 \  | _        | _	        t          j        | j	                  |d	<   t          j        | j        fi |S t          j        d
i |S )Nr'   CERT_REQUIRED	cert_reqsca_certssockr   )SOCKSProxyManager)proxy_basic_authproxy_headers )r$   r-   rY   r=   rN   urllib3.contrib.socksri   r]   rc   _basic_proxy_authurllib3make_headersProxyManagerPoolManager)rS   pool_manager_init_argsri   s      r#   _get_connection_managerz(RemoteConnection._get_connection_manager   s   "+T-=-=-?-?!@> 	@2A";/15":.? 	S$$&&11&99 TCCCCCC((SS<RSSS--// x:>:X:X:Z:Z7!7:A:N`d`v:w:w:w&7'RR;QRRR"<<%;<<<r%   remote_server_addrrD   ignore_proxyc                 J   || _         || _        t          j                            dt          j                            d                    }|r|                    d          D ]{}|                                }|dk    rd} n\t          j        |          }t          j        | j                  }|j	        r|j	        |j	        k    rd} ni|j
        |j	        v rd} n||s|                                 nd | _        |r|                                 | _        t          | _        d S )Nno_proxyNO_PROXY,*T)rD   rM   rO   rP   rQ   splitstripr   urlparsenetlocr0   rT   rY   rt   _connremote_commands	_commands)rS   ru   rD   rv   	_no_proxynpun_url
remote_adds           r#   __init__zRemoteConnection.__init__   s(   $&	 JNN:rz~~j/I/IJJ	 	 s++  iikk#::#'LEs++"^DI66
< !(EL88'+ 9 zZ%666'+ 7 8DM$--/// 	85577DJ(r%   c                    | j         |         }|J d|             |d         }t          j        |                              |          }d |                    d          D             }t          |t                    r
|r|D ]}||= t          j        |          }| j	         | }	| 
                    |          }
t                              d|d         |	t          |
                     |                     |d         |	|          S )	am  Send a command to the remote server.

        Any path substitutions required for the URL mapped to the command should be
        included in the command parameters.

        :Args:
         - command - A string specifying the command to execute.
         - params - A dictionary of named parameters to send with the command as
           its JSON payload.
        NzUnrecognised command r   c                 L    h | ]!}|                     d           |dd         "S )$r   NrN   ).0words     r#   	<setcomp>z+RemoteConnection.execute.<locals>.<setcomp>&  s2    aaa$DOO\_L`L`aT!""Xaaar%   /z%s %s %sr   )body)r   stringTemplate
substituter|   
isinstancedictr   	dump_jsonrM   _trim_large_entriesLOGGERdebugstr_request)rS   commandparamscommand_infopath_stringr0   substitute_paramsr   datar\   trimmeds              r#   executezRemoteConnection.execute  s    ~g.'')J)J)J'''"1o{++66v>>aa+2C2CC2H2Haaafd## 	!(9 	!) ! !4LLv&&"D""**622Za#s7||DDD}}\!_c}===r%   c                    t          j        |          }|                     || j                  }d}|r|dvrd}| j        r&| j                            ||||          }|j        }nN|                                 }|5 }	|	                    ||||          }ddd           n# 1 swxY w Y   |j        }|j        	                    d          }
t                              d|j        |
|j                   	 d|cxk    rdk     r`n n]|                     d|j                            d	d                    t                              d
           |                                 S d|cxk     rdk    r6n n3||
dt                              d
           |                                 S g }|j                            dd          r.|j                            dd                              d          }t#          d |D                       s	 t%          j        |
                                          }
n~# t*          $ rq d|cxk     rdk     rn nt,          j        }nt,          j        }||
                                dcY t                              d
           |                                 S w xY wd|
vrd|
d<   |
t                              d
           |                                 S d|
d}
|
t                              d
           |                                 S # t                              d
           |                                 w xY w)aq  Send an HTTP request to the remote server.

        :Args:
         - method - A string for the HTTP method to send the request with.
         - url - A string for the URL to send the request to.
         - body - A string for request body. Ignored unless method is POST or PUT.

        :Returns:
          A dictionary with the server's parsed JSON response.
        N)r
   PUT)r   rE   zUTF-8z1Remote response: status=%s | data=%s | headers=%si,  i0  r   locationzFinished Requesti  i  )statusvaluer7   ;c                 8    g | ]}|                     d           S )z	image/pngr   )r   xs     r#   
<listcomp>z-RemoteConnection._request.<locals>.<listcomp>S  s$    HHHa[11HHHr%      r   r   )r   r~   rG   rD   r   requestr   rt   r   rB   r   r   rE   r   rQ   closer|   anyr   	load_jsonr}   
ValueErrorr	   SUCCESSUNKNOWN_ERROR)rS   methodr\   r   rC   rE   response
statuscodeconnhttpr   content_typer   s                r#   r   zRemoteConnection._request0  s    ^C((
44ZQQ 	F/11D? 	)z))&#D')RRH!JJ//11D Q<<$<PPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q!J}##G,,H(/[_aiaqrrr	j&&&&3&&&&&}}UH,<,@,@T,R,RSS0 LL+,,,NN1 Z&&&&3&&&&&",t<<, LL+,,,NN- L##ND99 U'/33NDIIOOPSTTHH<HHHII E ?4::<<88DD! E E EZ----#-----!*!2!*!8&,tzz||DDDD LL+,,,NN!E $&&$(DM LL+,,,NN	  $//DLL+,,,NN LL+,,,NNsV   =B##B'*B'7>L $L 'A$L &H3 2L 3A
J.=L -J..L *L 0Mc                 \    t          | d          r| j                                         dS dS )z<Clean up resources when finished with the remote_connection.r   N)hasattrr   clearrR   s    r#   r   zRemoteConnection.closeh  s8    4!! 	J	 	r%   d   c                    i }|                                 D ]r\  }}t          |t                    r|                     ||          ||<   4t          |t                    r$t          |          |k    r|d|         dz   ||<   m|||<   s|S )a  Truncate string values in a dictionary if they exceed max_length.

        :param dict: Dictionary with potentially large values
        :param max_length: Maximum allowed length of string values
        :return: Dictionary with truncated string values
        Nz...)itemsr   r   r   r   r[   )rS   
input_dict
max_lengthoutput_dictionarykeyr   s         r#   r   z$RemoteConnection._trim_large_entriesm  s     $**,, 	/ 	/JC%&& /)-)A)A%)T)T!#&&E3'' /CJJ,C,C).{
{);e)C!#&&).!#&&  r%   )F)FF)N)r   ) __name__
__module____qualname____doc__browser_namer   r    r   rO   rP   getenvcertifiwherer-   classmethodr$   r(   r*   r.   r1   rG   rT   r]   rc   rt   r   boolr   r   r   r   r   rl   r%   r#   r   r      s         L-H3G2:3U3U		.///[h[b[h[j[jIX X [X   [ 6 6 [6   [   [    [6N N N< < <
( ( (= = =$) )3 )D )X\ ) ) ) )8> > >26 6 6 6p  
! ! ! ! ! !r%   r   )iloggingrO   r;   r   r   base64r   urllibr   r   ro   seleniumr    r   r   r   errorhandlerr	   	getLoggerr   r   NEW_SESSIONQUITW3C_GET_CURRENT_WINDOW_HANDLEW3C_GET_WINDOW_HANDLESr   
GO_FORWARDGO_BACKREFRESHW3C_EXECUTE_SCRIPTW3C_EXECUTE_SCRIPT_ASYNCGET_CURRENT_URL	GET_TITLEGET_PAGE_SOURCE
SCREENSHOTELEMENT_SCREENSHOTFIND_ELEMENTFIND_ELEMENTSW3C_GET_ACTIVE_ELEMENTFIND_CHILD_ELEMENTFIND_CHILD_ELEMENTSCLICK_ELEMENTCLEAR_ELEMENTGET_ELEMENT_TEXTSEND_KEYS_TO_ELEMENTGET_ELEMENT_TAG_NAMEIS_ELEMENT_SELECTEDIS_ELEMENT_ENABLEDGET_ELEMENT_RECTGET_ELEMENT_ATTRIBUTEGET_ELEMENT_PROPERTYGET_ELEMENT_ARIA_ROLEGET_ELEMENT_ARIA_LABELGET_SHADOW_ROOTFIND_ELEMENT_FROM_SHADOW_ROOTFIND_ELEMENTS_FROM_SHADOW_ROOTGET_ALL_COOKIES
ADD_COOKIE
GET_COOKIEDELETE_ALL_COOKIESDELETE_COOKIESWITCH_TO_FRAMESWITCH_TO_PARENT_FRAMESWITCH_TO_WINDOW
NEW_WINDOWCLOSE!GET_ELEMENT_VALUE_OF_CSS_PROPERTYEXECUTE_ASYNC_SCRIPTSET_TIMEOUTSGET_TIMEOUTSW3C_DISMISS_ALERTW3C_ACCEPT_ALERTW3C_SET_ALERT_VALUEW3C_GET_ALERT_TEXTW3C_ACTIONSW3C_CLEAR_ACTIONSSET_WINDOW_RECTGET_WINDOW_RECTW3C_MAXIMIZE_WINDOWSET_SCREEN_ORIENTATIONGET_SCREEN_ORIENTATIONGET_NETWORK_CONNECTIONSET_NETWORK_CONNECTIONGET_LOGGET_AVAILABLE_LOG_TYPESCURRENT_CONTEXT_HANDLECONTEXT_HANDLESSWITCH_TO_CONTEXTFULLSCREEN_WINDOWMINIMIZE_WINDOW
PRINT_PAGEADD_VIRTUAL_AUTHENTICATORREMOVE_VIRTUAL_AUTHENTICATORADD_CREDENTIALGET_CREDENTIALSREMOVE_CREDENTIALREMOVE_ALL_CREDENTIALSSET_USER_VERIFIEDUPLOAD_FILEGET_DOWNLOADABLE_FILESDOWNLOAD_FILEDELETE_DOWNLOADABLE_FILESr   r   rl   r%   r#   <module>r&     s  $  				                                          # # # # # #		8	$	$[-[L3[ )+P[ "$Q	[
 K4[ ?[ O9[ O<[  L[ $&S[ ?[ ;[ B[ A[  U[  A![" C#[ [$ "$Q%[&  S'[( !U)[* L+[, L-[. M/[0  "S1[2  "Q3[4 !T5[6  R7[8 M9[: !#];[<  "[=[> !#Z?[@ "$\A[B NC[D )+cE[ [ [F *,eG[H BI[J >K[L CM[N  HO[P IQ[R BS[T "$PU[V DW[X BY[Z M;[[\ -/k][^  "O_[` Ba[b Ac[d Le[f Jg[ [ [h !Ki[j  Ik[l @m[n Ho[p Hq[r Gs[t !Pu[v "$Ow[x "$Ny[z "$U{[| "$V}[~ O;[@ #%PA[B "$JC[D DE[F FG[H PI[ [J L=%']( + no   " % i@"$KC%'Qu[ [|z! z! z! z! z! z! z! z! z! z!r%   