
    >fhW              	       	   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
mZ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 d d
lmZ  e j0                  e      Zi ej6                  dej8                  dej:                  dej<                  dej>                  dej@                  dejB                  dejD                  dejF                  dejH                  dejJ                  dejL                  dejN                  dejP                  dejR                  dejT                  dejV                  di ejX                  dejZ                  dej\                  dej^                  dej`                  d ejb                  d!ejd                  d"ejf                  d#ejh                  d$ejj                  d%ejl                  d&ejn                  d'ejp                  d(ejr                  d)ejt                  d*ejv                  d+ejx                  d,i ejz                  d-ej|                  d.ej~                  d/ej                  d0ej                  d1ej                  d2ej                  d3ej                  d4ej                  d5ej                  d6ej                  d7ej                  d8ej                  d9ej                  d:ej                  d;ej                  d<ej                  d=i ej                  d>ej                  d?ej                  d@ej                  dAej                  dBej                  dCej                  dDej                  dEej                  dFej                  dGej                  dHej                  dIej                  dJej                  dKej                  dLej                  dMej                  dNi ej                  dOej                  dPej                  dQej                  dRej                  dSej                  dTej                  dUej                  dVej                  dWej                  dXej                  dYej                  dZej                  d[ej                  d\ej                  d]ej                  d^ej                  d_ej                  d`ej                  daej                  dbej                  dciZt G dd de      Zuy)f    N)	b64encode)Optional)parse)unquoteurlparse)__version__)utils)ClientConfig)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   )r   z"/session/$sessionId/fedcm/gettitle)r   z'/session/$sessionId/fedcm/getdialogtype)r   z%/session/$sessionId/fedcm/accountlist)r   z+/session/$sessionId/fedcm/clickdialogbutton)r   z&/session/$sessionId/fedcm/canceldialog)r   z'/session/$sessionId/fedcm/selectaccount)r   z)/session/$sessionId/fedcm/setdelayenabled)r   z'/session/$sessionId/fedcm/resetcooldownc                      e Zd ZU dZdZee   ed<   ddlZddl	Z	ddl
Z
e	j                         Zdej                  v rej                  d      ne
j                         ZdZee   ed<   ej(                  Zedk(  rdZdZd	e d
e dZed        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%dee   dee%   dee%   dee%   dee&   dee   fdZ'i Z(d Z)defdZ*d  Z+d&d!Z,d" Z-d'd#Z.y)(RemoteConnectionzA connection with the Remote WebDriver server.

    Communicates with the server using the WebDriver wire protocol:
    https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol
    Nbrowser_namer   REQUESTS_CA_BUNDLE_client_configdarwinmacz	selenium/z	 (python )c                     | j                   S N)r!   selfs    ^/var/www/zara/venv/lib/python3.12/site-packages/selenium/webdriver/remote/remote_connection.pyclient_configzRemoteConnection.client_config   s    """    c                 f    t        j                  dt        d       | j                  j                  S )zp:Returns:

        Timeout value in seconds for all http requests made to the
        Remote Connection
        zWget_timeout() in RemoteConnection is deprecated, get timeout from client_config instead   
stacklevelwarningswarnDeprecationWarningr!   timeoutclss    r)   get_timeoutzRemoteConnection.get_timeout   s-     	e	

 !!)))r+   c                 ^    t        j                  dt        d       || j                  _        y)zyOverride the default timeout.

        :Args:
            - timeout - timeout value for http requests in seconds
        zUset_timeout() in RemoteConnection is deprecated, set timeout in client_config insteadr-   r.   Nr0   )r6   r4   s     r)   set_timeoutzRemoteConnection.set_timeout   s)     	c	

 &-"r+   c                 p    t        j                  dt        d       | j                  j	                          y)zAReset the http request timeout to socket._GLOBAL_DEFAULT_TIMEOUT.z_reset_timeout() in RemoteConnection is deprecated, use reset_timeout() in client_config insteadr-   r.   N)r1   r2   r3   r!   reset_timeoutr5   s    r)   r;   zRemoteConnection.reset_timeout   s-     	m	

 	((*r+   c                 f    t        j                  dt        d       | j                  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.
        zhget_certificate_bundle_path() in RemoteConnection is deprecated, get ca_certs from client_config insteadr-   r.   r1   r2   r3   r!   ca_certsr5   s    r)   get_certificate_bundle_pathz,RemoteConnection.get_certificate_bundle_path   s-     	v	

 !!***r+   c                 ^    t        j                  dt        d       || j                  _        y)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.
        zfset_certificate_bundle_path() in RemoteConnection is deprecated, set ca_certs in client_config insteadr-   r.   Nr=   )r6   paths     r)   set_certificate_bundle_pathz,RemoteConnection.set_certificate_bundle_path   s)     	t	

 '+#r+   c                    dd| j                   d}|j                  rmt        j                  dd       t	        |j                   d|j
                   j                               }|j                  dd	|j                          i       |r|j                  d
di       | j                  r|j                  | j                         |S )zGet headers for remote request.

        :Args:
         - parsed_url - The parsed url
         - keep_alive (Boolean) - Is this a keep-alive connection (default: False)
        zapplication/jsonzapplication/json;charset=UTF-8)AcceptContent-Typez
User-AgentzREmbedding username and password in URL could be insecure, use ClientConfig insteadr-   r.   :AuthorizationzBasic 
Connectionz
keep-alive)

user_agentusernamer1   r2   r   passwordencodeupdatedecodeextra_headers)r6   
parsed_url
keep_aliveheadersbase64strings        r)   get_remote_connection_headersz.RemoteConnection.get_remote_connection_headers   s     )<..
 MMdqr %
(;(;'<Aj>Q>Q=R%S%Z%Z%\]LNNOvl6I6I6K5L-MNONNL,78NN3,,-r+   c                 b    t        | j                        }|j                  r|j                  ryy y )NT)r   
_proxy_urlrJ   rK   )r(   rP   s     r)   _identify_http_proxy_authz*RemoteConnection._identify_http_proxy_auth  s,    doo.
:#6#6 $7r+   c                     t        | j                        }|j                   d|j                   d|j                   }|j
                   d|j                   }||fS )Nz://rF   )r   rV   schemehostnameportrJ   rK   )r(   rP   proxy_without_authauths       r)   _separate_http_proxy_authz*RemoteConnection._separate_http_proxy_auth  sc    doo.
 * 1 12#j6I6I5J!JOOK\]%%&a
(;(;'<=!4''r+   c                 N   d| j                   j                  i}|j                  | j                   j                  j	                  di              | j                   j
                  r3d|d<   t        j                  t        j                  j                         n4| j                   j                  rd|d<   | j                   j                  |d<   | j                  r| j                  j                         j                  d      rdd	lm}  || j                  fi |S | j!                         rI| j#                         \  | _        | _        t        j&                  t)        | j$                        
      |d<   t        j*                  | j                  fi |S t        j,                  di |S )Nr4   init_args_for_pool_manager	CERT_NONE	cert_reqsCERT_REQUIREDr>   sockr   )SOCKSProxyManager)proxy_basic_authproxy_headers )r!   r4   rM   r`   getignore_certificatesurllib3disable_warnings
exceptionsInsecureRequestWarningr>   rV   lower
startswithurllib3.contrib.socksre   rW   r^   _basic_proxy_authmake_headersr   ProxyManagerPoolManager)r(   pool_manager_init_argsre   s      r)   _get_connection_managerz(RemoteConnection._get_connection_manager  s`   "+T-@-@-H-H!I%%::>>?[]_`	
 222=";/$$W%7%7%N%NO  ))2A";/151D1D1M1M":.??$$&11&9C(S<RSS--/:>:X:X:Z7!7:A:N:N%,T-C-C%D;&7 ''R;QRR""<%;<<r+   remote_server_addrrQ   ignore_proxyrj   r`   r*   c                    |xs t        ||||      | _        | j                  j                  t        _        | j                  j
                  t        _        | j                  t        _        | j                  j                  xs t        j                  t        _        | j                  j                  xs t        j                  t        _        |rt        j                  dt        d       |st        j                  dt        d       |rt        j                  dt        d       |rt        j                  dt        d       |r$t        j                  dt        d       d | _        n| j                  j                         | _        | j                  j                  r| j                         | _        t"        | _        y )	N)rx   rQ   rj   r`   z\setting remote_server_addr in RemoteConnection() is deprecated, set in client_config insteadr-   r.   zTsetting keep_alive in RemoteConnection() is deprecated, set in client_config insteadz]setting ignore_certificates in RemoteConnection() is deprecated, set in client_config insteadzdsetting init_args_for_pool_manager in RemoteConnection() is deprecated, set in client_config insteadzVsetting ignore_proxy in RemoteConnection() is deprecated, set in client_config instead)r
   r!   r4   r   _timeoutr>   	_ca_certsrO   rI   r1   r2   r3   rV   get_proxy_urlrQ   rw   _connremote_commands	_commands)r(   rx   rQ   ry   rj   r`   r*   s          r)   __init__zRemoteConnection.__init__3  sf    , 
|1! 3'A	0
 %)$7$7$?$?!%)%8%8%A%A"*.*=*=')-)<)<)J)J)lN^NlNl&&*&9&9&D&D&cHXHcHc#MMn" MMf" MMo" &MMv" MMh"
 #DO"11??ADO))557DJ(r+   c                 &    ||f| j                   |<   y)zRegister a new command.N)r   )r(   namemethodurls       r)   add_commandzRemoteConnection.add_commandv  s     &}tr+   r   c                 8    | j                   j                  |      S )z Retrieve a command if it exists.)r   ri   )r(   r   s     r)   get_commandzRemoteConnection.get_commandz  s    ~~!!$''r+   c                 z   | j                   j                  |      xs | j                  j                  |      }|
J d|        |d   }t        j                  |      j                  |      }|j                  d      D ch c]  }|j                  d      s|dd  }}t        |t              r|r
|D ]  }||=  t        j                  |      }| j                  j                   | }	| j                  |      }
t        j!                  d|d   |	t#        |
             | j%                  |d   |	|      S c c}w )	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    /$z%s %s %sr   )body)r   ri   extra_commandsstringTemplate
substitutesplitrp   
isinstancedictr	   	dump_jsonr!   rx   _trim_large_entriesLOGGERdebugstr_request)r(   commandparamscommand_infopath_stringrA   wordsubstitute_paramsdatar   trimmeds              r)   executezRemoteConnection.execute~  s/    ~~))'2Vd6I6I6M6Mg6V'J+@	)JJ'"1o{+66v>2=2C2CC2Ha$DOO\_L`T!"Xaafd#(9) !4L!v&$$778?**62Za#s7|D}}\!_c}== bs   D8D8c                    t        j                  |      }| j                  || j                  j                        }| j                  j                         }|r|j                  |       |r|dvrd}| j                  j                  rA| j                  j                  ||||| j                  j                        }|j                  }nQ| j                         }	|	5 }
|
j                  ||||| j                  j                        }ddd       j                  }|j                  j                  d      }t        j                  d|j                  ||j                          	 d|cxk  rdk  rTn nQ| j#                  d|j                   j%                  d	d            t        j                  d
       |j'                          S |dk(  r*|ddt        j                  d
       |j'                          S |dk\  rF||s|j(                  n|j+                         dt        j                  d
       |j'                          S g }|j                   j%                  dd      r+|j                   j%                  dd      j-                  d      }t/        |D cg c]  }|j1                  d       c}      sT	 t3        j4                  |j+                               }d|vrd|d<   |t        j                  d
       |j'                          S d|d}|t        j                  d
       |j'                          S # 1 sw Y   (xY wc c}w # t6        $ rj d|cxk  rdk  rn nt8        j:                  }nt8        j<                  }||j+                         dcY t        j                  d
       |j'                          S w xY w# t        j                  d
       |j'                          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.
        )r   PUTN)r   rR   r4   zUTF-8z1Remote response: status=%s | data=%s | headers=%si,  i0  r   locationzFinished Requesti  zAuthorization Required)statusvaluei  rE   ;z	image/png   r   r   )r   r   rT   r!   rQ   get_auth_headerrM   r~   requestr4   r   rw   r   rN   r   r   rR   r   ri   closereasonstripr   anyrp   r	   	load_json
ValueErrorr   SUCCESSUNKNOWN_ERROR)r(   r   r   r   rP   rR   auth_headerresponse
statuscodeconnhttpr   content_typexr   s                  r)   r   zRemoteConnection._request  s4    ^^C(
44ZATATA_A_`))99;NN;'F/1D))zz))&#D'[_[n[n[v[v)wH!J//1D v<<$Y]YlYlYtYt<uv!J}}##G,H(//[_aiaqaqr	j&3&}}UH,<,<,@,@T,RS4 LL+,NN5 S ",7OP0 LL+,NN1 S ",dxX\XbXbXde, LL+,NN- L##ND9'//33NDIOOPST<Ha[1HIE ??4::<8D $&$(DM LL+,NN	  $/DLL+,NNEv v I " EZ-#-!*!2!2!*!8!8&,tzz|DD LL+,NN!E LL+,NNsh   +L+!9N3  	N3 /%N3 :AN3 L8$N3 ,#L= 
N3 ?N3 +L58N3 =AN0N3 /N00N3 3'Oc                 R    t        | d      r| j                  j                          yy)z<Clean up resources when finished with the remote_connection.r~   N)hasattrr~   clearr'   s    r)   r   zRemoteConnection.close  s!    4!JJ "r+   c                     i }|j                         D ]Z  \  }}t        |t              r| j                  ||      ||<   ,t        |t              rt        |      |kD  r|d| dz   ||<   V|||<   \ |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   len)r(   
input_dict
max_lengthoutput_dictionarykeyr   s         r)   r   z$RemoteConnection._trim_large_entries  s     $**, 	/JC%&)-)A)A%)T!#&E3'CJ,C).{
);e)C!#&).!#&	/ ! r+   )F)NTFFNNr&   )d   )/__name__
__module____qualname____doc__r   r   r   __annotations__ossocketcertifigetdefaulttimeoutr{   environgetenvwherer|   r!   r
   sysplatformsystemrO   r   rI   propertyr*   classmethodr7   r9   r;   r?   rB   rT   rW   r^   rw   boolr   r   r   r   r   r   r   r   r   rh   r+   r)   r   r      s    #'L(3-&'')H3G2::3U		./[b[h[h[jI-1NH\*1\\F M[M6(!<J# # * * - - + + + + + +  :
(=: -1%)',.35904?)$SM?) TN?) tn	?)
 &d^?) %-TN?)  -?)B N-( (>2<|
!r+   r   )vloggingr   r   r1   base64r   typingr   urllibr   urllib.parser   r   rk   seleniumr   selenium.webdriver.remoter	   'selenium.webdriver.remote.client_configr
   !selenium.webdriver.remote.commandr   &selenium.webdriver.remote.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_FILESGET_FEDCM_TITLEGET_FEDCM_DIALOG_TYPEGET_FEDCM_ACCOUNT_LISTCLICK_FEDCM_DIALOG_BUTTONCANCEL_FEDCM_DIALOGSELECT_FEDCM_ACCOUNTSET_FEDCM_DELAYRESET_FEDCM_COOLDOWNr   r   rh   r+   r)   <module>r<     s  $   
     *    + @ 5 <			8	$d-dLL3d ))+Pd ""$Q	d
 KK4d ?d OO9d OO<d  Ld $$&Sd ?d ;d Bd Ad  Ud  A!d" C#d$ ""$Q%d&  S'd( !U)d* L+d, L-d. M/d0   "S1d2   "Q3d4 !T5d6  R7d8 M9d: !!#];d<   "[=d> !!#Z?d@ ""$\AdB NCdD ))+cEdF **,eGdH BIdJ >KdL CMdN  HOdP IQdR BSdT ""$PUdV DWdX BYdZ MM;[d\ --/k]d^   "O_d` Badb Acdd Ledf Jgdh !Kidj  Ikdl @mdn Hodp Hqdr Gsdt !Pudv ""$Owdx ""$Nydz ""$U{d| ""$V}d~ OO;d@ ##%PAdB ""$JCdD DEdF FGdH PIdJ LKdL =MdN %%']OdP (( +QdX nYdZ o[d\   ]dd "" %edl imdn @odp ""$Kqdr Csdt %%'Qudx Jydz !!#U{d| ""$T}d~ %%'^d@ !S  "UR  "UGdN^! ^!r+   