
    gW              	       t   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 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 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j0        d"ej1        d#ej2        d$ej3        d%ej4        d&ej5        d'ej6        d(ej7        d)ej8        d*ej9        d+ej:        d,ej;        d-i ej<        d.ej=        d/ej>        d0ej?        d1ej@        d2ejA        d3ejB        d4ejC        d5ejD        d6ejE        d7ejF        d8ejG        d9ejH        d:ejI        d;ejJ        d<ejK        d=ejL        d>i ejM        d?ejN        d@ejO        dAejP        dBejQ        dCejR        dDejS        dEejT        dFejU        dGejV        dHejW        dIejX        dJejY        dKejZ        dLej[        dMej\        dNej]        dOi ej^        dPej_        dQej`        dReja        dSejb        dTejc        dUejd        dVeje        dWejf        dXejg        dYejh        dZeji        d[ejj        d\ejk        d]ejl        d^ejm        d_ejn        d`ejo        daejp        dbejq        dcejr        ddiZs G de df          ZtdS )g    N)	b64encode)Optional)parse)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ddlZddlZddlZe                    d          : e	e                    d e
e                                                              ne                                Zdej        v re                    d          ne                                ZdZ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&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-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
    Nr   GLOBAL_DEFAULT_TIMEOUTREQUESTS_CA_BUNDLE_client_configdarwinmacz	selenium/z	 (python )c                 R    t          j        dt          d           | j        j        S )zp:Returns:

        Timeout value in seconds for all http requests made to the
        Remote Connection
        z_get_timeout() in RemoteConnection is deprecated, get timeout from ClientConfig instance instead   
stacklevelwarningswarnDeprecationWarningr!   timeoutclss    w/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/selenium/webdriver/remote/remote_connection.pyget_timeoutzRemoteConnection.get_timeout   s4     	m	
 	
 	
 	

 !))    c                 V    t          j        dt          d           || j        _        dS )zyOverride the default timeout.

        :Args:
            - timeout - timeout value for http requests in seconds
        zlset_timeout() in RemoteConnection is deprecated, set timeout to ClientConfig instance in constructor insteadr&   r'   Nr)   )r/   r-   s     r0   set_timeoutzRemoteConnection.set_timeout   s9     	z	
 	
 	
 	

 &-"""r2   c                 p    t          j        dt          d           | j                                         dS )zAReset the http request timeout to socket._GLOBAL_DEFAULT_TIMEOUT.zgreset_timeout() in RemoteConnection is deprecated, use reset_timeout() in ClientConfig instance insteadr&   r'   N)r*   r+   r,   r!   reset_timeoutr.   s    r0   r6   zRemoteConnection.reset_timeout   sC     	u	
 	
 	
 	

 	((*****r2   c                 R    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.
        zpget_certificate_bundle_path() in RemoteConnection is deprecated, get ca_certs from ClientConfig instance insteadr&   r'   r*   r+   r,   r!   ca_certsr.   s    r0   get_certificate_bundle_pathz,RemoteConnection.get_certificate_bundle_path   s4     	~	
 	
 	
 	

 !**r2   c                 V    t          j        dt          d           || j        _        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.
        z}set_certificate_bundle_path() in RemoteConnection is deprecated, set ca_certs to ClientConfig instance in constructor insteadr&   r'   Nr8   )r/   paths     r0   set_certificate_bundle_pathz,RemoteConnection.set_certificate_bundle_path   s<     	 L	
 	
 	
 	

 '+###r2   Fc                    dd| j         d}|j        rrt          j        dd           t	          |j         d|j                                                   }|                    dd	|                                 i           |r|                    d
di           | j	        r|                    | 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usernamer*   r+   r   passwordencodeupdatedecodeextra_headers)r/   
parsed_url
keep_aliveheadersbase64strings        r0   get_remote_connection_headersz.RemoteConnection.get_remote_connection_headers   s     )<.
 
  	PMdqr    %
(;%S%Sj>Q%S%S%Z%Z%\%\]]LNNO-Ml6I6I6K6K-M-MNOOO 	9NNL,7888 	.NN3,---r2   c                 R    t          | j                  }|j        r	|j        rdS d S d S )NT)r   
_proxy_urlrE   rF   )selfrK   s     r0   _identify_http_proxy_authz*RemoteConnection._identify_http_proxy_auth  s?    do..
 	:#6 	4	 	 	 	r2   c                     t          | j                  }|j         d|j         d|j         }|j         d|j         }||fS )Nz://rA   )r   rQ   schemehostnameportrE   rF   )rR   rK   proxy_without_authauths       r0   _separate_http_proxy_authz*RemoteConnection._separate_http_proxy_auth  sY    do..
 * 1]]j6I]]JO]]%==
(;==!4''r2   c                    d| j         j        i}|                    | j         j                            di                      | j         j        r)d|d<   t          j        t          j        j	                   n | j         j
        rd|d<   | j         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-   init_args_for_pool_manager	CERT_NONE	cert_reqsCERT_REQUIREDr9   sockr   )SOCKSProxyManager)proxy_basic_authproxy_headers )r!   r-   rH   r\   getignore_certificatesurllib3disable_warnings
exceptionsInsecureRequestWarningr9   rQ   lower
startswithurllib3.contrib.socksra   rS   rZ   _basic_proxy_authmake_headersProxyManagerPoolManager)rR   pool_manager_init_argsra   s      r0   _get_connection_managerz(RemoteConnection._get_connection_manager  s   "+T-@-H!I%%:>>?[]_``	
 	
 	
 2 	N2=";/$W%7%NOOOO ) 	N2A";/151D1M":.? 	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"<<%;<<<r2   Tremote_server_addrrL   ignore_proxyrf   r\   client_configc                    |pt          ||||          | _        | j        j        t          _        | j        j        t          _        | j        t          _        | j        j        pt          j        t          _        | j        j        p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        r|                                 | _        t"          | _        d S )	N)rt   rL   rf   r\   zdsetting remote_server_addr in RemoteConnection() is deprecated, set in ClientConfig instance insteadr&   r'   z\setting keep_alive in RemoteConnection() is deprecated, set in ClientConfig instance insteadzesetting ignore_certificates in RemoteConnection() is deprecated, set in ClientConfig instance insteadzlsetting init_args_for_pool_manager in RemoteConnection() is deprecated, set in ClientConfig instance insteadz^setting ignore_proxy in RemoteConnection() is deprecated, set in ClientConfig instance instead)r
   r!   r-   r   _timeoutr9   	_ca_certsrJ   rD   r*   r+   r,   rQ   get_proxy_urlrL   rs   _connremote_commands	_commands)rR   rt   rL   ru   rf   r\   rv   s          r0   __init__zRemoteConnection.__init__2  s    , 
|1! 3'A	0
 0
 0
 %)$7$?!%)%8%A"*.*=')-)<)J)lN^Nl&&*&9&D&cHXHc# 	Mv"     	Mn"     	Mw"    & 	M~"     	BMp"   
 #DOO"1??AADO) 	85577DJ(r2   c                     ||f| j         |<   dS )zRegister a new command.N)r}   )rR   namemethodurls       r0   add_commandzRemoteConnection.add_commandu  s     &}tr2   r   c                 6    | j                             |          S )z Retrieve a command if it exists.)r}   re   )rR   r   s     r0   get_commandzRemoteConnection.get_commandy  s    ~!!$'''r2   c                 p   | j                             |          p| j                            |          }|J d|             |d         }t          j        |                              |          }d |                    d          D             }t          |t                    r
|r|D ]}||= t          j
        |          }| 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rl   ).0words     r0   	<setcomp>z+RemoteConnection.execute.<locals>.<setcomp>  s2    aaa$DOO\_L`L`aT!""Xaaar2   /z%s %s %sr   )body)r}   re   extra_commandsstringTemplate
substitutesplit
isinstancedictr	   	dump_jsonr!   rt   _trim_large_entriesLOGGERdebugstr_request)rR   commandparamscommand_infopath_stringr<   substitute_paramsr   datar   trimmeds              r0   executezRemoteConnection.execute}  s<    ~))'22Vd6I6M6Mg6V6V'')J)J)J'''"1o{++66v>>aa+2C2CC2H2Haaafd## 	!(9 	!) ! !4LLv&&$7???**622Za#s7||DDD}}\!_c}===r2   c                    t          j        |          }|                     || j        j                  }| j                                        }|r|                    |           |r|dvrd}| j        j        r1| j                            ||||| j        j	                  }|j
        }nY|                                 }	|	5 }
|
                    ||||| j        j	                  }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    rn n|dk    r3|ddt                              d
           |                                 S ||st)          |          n|                                dt                              d
           |                                 S g }|j                            dd          r.|j                            dd                              d          }t/          d |D                       s	 t1          j        |                                          }n~# t4          $ rq d|cxk     rdk     rn nt6          j        }nt6          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.
        )r   PUTN)r   rM   r-   zUTF-8z1Remote response: status=%s | data=%s | headers=%si,  i0  r   locationzFinished Requesti  i  i  zAuthorization Required)statusvaluer@   ;c                 8    g | ]}|                     d           S )z	image/pngr   )r   xs     r0   
<listcomp>z-RemoteConnection._request.<locals>.<listcomp>  s$    HHHa[11HHHr2      r   r   )r   r   rO   r!   rL   get_auth_headerrH   r{   requestr-   r   rs   r   rI   r   r   rM   r   re   closer   stripr   anyr	   	load_json
ValueErrorr   SUCCESSUNKNOWN_ERROR)rR   r   r   r   rK   rM   auth_headerresponse
statuscodeconnhttpr   content_typer   s                 r0   r   zRemoteConnection._request  sp    ^C((
44ZATA_``)99;; 	(NN;''' 	F/11D) 	)z))&#D'[_[n[v)wwH!JJ//11D v<<$Y]YlYt<uuv v v v v v v v v v v v v v v!J}##G,,H(/[_aiaqrrr	j&&&&3&&&&&}}UH,<,@,@T,R,RSS4 LL+,,,NN5 Z&&&&3&&&&&$$&0;STT. LL+,,,NN/ #-d7ds:X\XbXbXdXdee, 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s\    %C11C58C5>O	 2O	 ;'O	 A$O	 6&K O	 A
M'O	 MO	 O	 	0O9c                 \    t          | d          r| j                                         dS dS )z<Clean up resources when finished with the remote_connection.r{   N)hasattrr{   clear)rR   s    r0   r   zRemoteConnection.close  s8    4!! 	J	 	r2   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   len)rR   
input_dict
max_lengthoutput_dictionarykeyr   s         r0   r   z$RemoteConnection._trim_large_entries  s     $**,, 	/ 	/JC%&& /)-)A)A%)T)T!#&&E3'' /CJJ,C,C).{
{);e)C!#&&).!#&&  r2   )F)NTFFNN)N)r   ).__name__
__module____qualname____doc__browser_nameossocketcertifigetenvfloatr   getdefaulttimeoutrx   environwherery   r!   r
   __annotations__platformsystemrk   rJ   r   rD   classmethodr1   r4   r6   r:   r=   rO   rS   rZ   rs   r   boolr   r~   r   r   r   r   r   r   r   rd   r2   r0   r   r      s          LIIIMMMNNN 99-..: 	bii0##f6N6N6P6P2Q2QRRSSS%%'' 
 4H2:3U3U		.///[b[h[h[j[jI#'NL'''X_$$&&F M<[<<6<<<J* * [* - - [- + + [+ + + [+ + + [+    [:  
( ( (= = =6 -1%)',.35904?) ?)$SM?) TN?) tn	?)
 &d^?) %-TN?)  -?) ?) ?) ?)B N- - -( ( ( ( (> > >2< < < <|  
! ! ! ! ! !r2   r   )uloggingr   r   r*   base64r   typingr   urllibr   urllib.parser   rg   seleniumr    r	   rv   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_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   rd   r2   r0   <module>r;     s  $                       ! ! ! ! ! !                    ' ' ' ' ' '       # # # # # #		8	$	$d-dL3d )+Pd "$Q	d
 K4d ?d O9d O<d  Ld $&Sd ?d ;d Bd Ad  Ud  A!d" C#d 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 d 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 M;[d\ -/k]d^  "O_d` Badb Acdd Ledf Jgd d 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~ O;d@ #%PAdB "$JCdD DEdF FGdH PId d 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 d@ !S "UR "UGd dN\! \! \! \! \! \! \! \! \! \!r2   