
    EgA                         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 G d	 d
          ZdS )    N)	b64encode)parse)__version__   )utils)Command)	ErrorCodec                   
   e Zd ZdZdZej        Z 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S )RemoteConnectionzA connection with the Remote WebDriver server.

    Communicates with the server using the WebDriver wire protocol:
    https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol
    Nc                 >    | j         t          j        k    rdn| j         S )zt
        :Returns:
            Timeout value in seconds for all http requests made to the Remote Connection
        N)_timeoutsocket_GLOBAL_DEFAULT_TIMEOUTclss    `/var/www/sysmax/venv/lib/python3.11/site-packages/selenium/webdriver/remote/remote_connection.pyget_timeoutzRemoteConnection.get_timeout1   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_timeout9   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_timeoutB   s     5r   c                     | j         S )zv
        :Returns:
            Paths of the .pem encoded certificate to verify connection to command executor
        	_ca_certsr   s    r   get_certificate_bundle_pathz,RemoteConnection.get_certificate_bundle_pathG   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_pathO   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_headersZ   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_urlv   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 )Nr'      @r   
_proxy_urlfindlen)rB   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 )Nr'   rE   rF   r   rG   )rB   rK   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   rH   r,   r=   urllib3.contrib.socksrX   rL   rR   _basic_proxy_authurllib3make_headersProxyManagerPoolManager)rB   pool_manager_init_argsrX   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_addrr3   ignore_proxyc                 (
   || _         || _        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|                                 | _        i t          j        dt          j        dt          j        dt          j        d	t          j        d
t          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j         di t          j!        dt          j"        dt          j#        dt          j$        dt          j%        dt          j&        dt          j'        dt          j(        dt          j)        dt          j*        d t          j+        d!t          j,        d"t          j-        d#t          j.        d$t          j/        d%t          j0        d&t          j1        d'i t          j2        d(t          j3        d)t          j4        d*t          j5        d+t          j6        d,t          j7        d-t          j8        d.t          j9        d/t          j:        d0t          j;        d1t          j<        d2t          j=        d3t          j>        d4t          j?        d5t          j@        d6t          jA        d7t          jB        d8i t          jC        d9t          jD        d:t          jE        d;t          jF        d<t          jG        d=t          jH        d>t          jI        d?t          jJ        d@t          jK        dAt          jL        dBt          jM        dCt          jN        dDt          jO        dEt          jP        dFt          jQ        dGt          jR        dHt          jS        dIt          jT        dJt          jU        dKt          jV        dLt          jW        dMt          jX        dNt          jY        dOt          jZ        dPt          j[        dQt          j\        dRt          j]        dSi
| _^        d S )TNno_proxyNO_PROXY,*T)POSTz/session)DELETEz/session/$sessionId)GET/session/$sessionId/window)rm   z"/session/$sessionId/window/handles)rk   /session/$sessionId/url)rk   z/session/$sessionId/forward)rk   z/session/$sessionId/back)rk   z/session/$sessionId/refresh)rk   z /session/$sessionId/execute/sync)rk   z!/session/$sessionId/execute/async)rm   ro   )rm   z/session/$sessionId/title)rm   z/session/$sessionId/source)rm   z/session/$sessionId/screenshot)rm   z*/session/$sessionId/element/$id/screenshot)rk   z/session/$sessionId/element)rk   z/session/$sessionId/elements)rm   z"/session/$sessionId/element/active)rk   z'/session/$sessionId/element/$id/element)rk   z(/session/$sessionId/element/$id/elements)rk   z%/session/$sessionId/element/$id/click)rk   z%/session/$sessionId/element/$id/clear)rm   z$/session/$sessionId/element/$id/text)rk   z%/session/$sessionId/element/$id/value)rk   z/session/$sessionId/se/file)rm   z$/session/$sessionId/element/$id/name)rm   z(/session/$sessionId/element/$id/selected)rm   z'/session/$sessionId/element/$id/enabled)rm   z$/session/$sessionId/element/$id/rect)rm   z//session/$sessionId/element/$id/attribute/$name)rm   z./session/$sessionId/element/$id/property/$name)rm   z,/session/$sessionId/element/$id/computedrole)rm   z-/session/$sessionId/element/$id/computedlabel)rm   z&/session/$sessionId/element/$id/shadow)rk   z,/session/$sessionId/shadow/$shadowId/element)rk   z-/session/$sessionId/shadow/$shadowId/elements)rm   /session/$sessionId/cookie)rk   rp   )rm    /session/$sessionId/cookie/$name)rl   rp   )rl   rq   )rk   z/session/$sessionId/frame)rk   z /session/$sessionId/frame/parent)rk   rn   )rk   z/session/$sessionId/window/new)rl   rn   )rm   z1/session/$sessionId/element/$id/css/$propertyName)rk   z!/session/$sessionId/execute_async)rk   /session/$sessionId/timeouts)rm   rr   )rk   z!/session/$sessionId/alert/dismiss)rk   z /session/$sessionId/alert/accept)rk   /session/$sessionId/alert/text)rm   rs   )rk   /session/$sessionId/actions)rl   rt   )rk   /session/$sessionId/window/rect)rm   ru   )rk   z#/session/$sessionId/window/maximize)rk   /session/$sessionId/orientation)rm   rv   )rm   &/session/$sessionId/network_connection)rk   rw   )rk   z/session/$sessionId/se/log)rm   z /session/$sessionId/se/log/types)rm   /session/$sessionId/context)rm   z/session/$sessionId/contexts)rk   rx   )rk   z%/session/$sessionId/window/fullscreen)rk   z#/session/$sessionId/window/minimize)rk   z/session/$sessionId/print)rk   z*/session/$sessionId/webauthn/authenticator)rl   z;/session/$sessionId/webauthn/authenticator/$authenticatorId)rk   zF/session/$sessionId/webauthn/authenticator/$authenticatorId/credential)rm   G/session/$sessionId/webauthn/authenticator/$authenticatorId/credentials)rl   zU/session/$sessionId/webauthn/authenticator/$authenticatorId/credentials/$credentialId)rl   ry   )rk   z>/session/$sessionId/webauthn/authenticator/$authenticatorId/uv)_r3   r<   r>   r?   r@   splitstripr   urlparsenetlocr   rC   rH   rc   _connr   NEW_SESSIONQUITW3C_GET_CURRENT_WINDOW_HANDLEW3C_GET_WINDOW_HANDLESrm   
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UPLOAD_FILE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	_commands)rB   rd   r3   re   	_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X
!5X
L;X
 13XX
 *,Y	X

 K<X
  GX
 OAX
 ODX
 &(TX
 ,.[X
 #%GX
 CX
 #%JX
  IX
 &(]X
   "I!X
" !#K#X
 X
$ *,Y%X
& &(['X
( ')])X
* !#T+X
, !#T-X
. $&U/X
0 (*[1X
2 !H3X
4 (*Y5X
6 ')\7X
8 &(Z9X
: $&U;X
< )+e=X
> (*c?X
@ )+bAX
B *,dCX
D #%VEX
 X
 X
F 13kGX
H 24mIX
J #%JKX
L  FMX
N  KOX
P &(PQX
R !#QSX
T #%JUX
V *,XWX
X $&LYX
Z  J[X
\ MC]X
^ 57s_X
` (*WaX
b  "JcX
d  "IeX
f %'TgX
 X
 X
h $&RiX
j ')SkX
l &(QmX
n !HoX
p %'PqX
r #%PsX
t #%OuX
v ')XwX
x *,WyX
z *,V{X
| *,]}X
~ *,^X
@ OCAX
B +-XCX
D *,REX
F #%LGX
H %'NIX
 X
J %'X#%T E-/e0 3 "$v#%w% ( * - %'qoX
 X
r   c                 F   | j         |         }|J d|             t          j        |d                                       |          }t	          |t
                    rd|v r|d= t          j        |          }| j         | }| 	                    |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   	sessionIdr   )body)
r   stringTemplate
substitute
isinstancedictr   	dump_jsonr<   _request)rB   commandparamscommand_infor   datarK   s          r   executezRemoteConnection.execute  s     ~g.'')J)J)J'''|A//::6BBfd## 	$v(=(={#v&&"D""}}\!_c}===r   c                    t                               | d| d|            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         d|
 d|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)rk   PUT)r   r4   zUTF-8zRemote response: status=z | data=z | headers=i,  i0  rm   locationzFinished Requesti  i  )statusvaluer&   ;c                 8    g | ]}|                     d           S )z	image/png)r=   ).0xs     r   
<listcomp>z-RemoteConnection._request.<locals>.<listcomp>H  s$    HHHa[11HHHr      r   r   )LOGGERdebugr   r|   r6   r3   r~   requestr   rc   r   r1   r4   r   r@   closerz   anyr   	load_jsonr{   
ValueErrorr	   SUCCESSUNKNOWN_ERROR)rB   methodrK   r   r2   r4   response
statuscodeconnhttpr   content_typer   s                r   r   zRemoteConnection._request$  s	    	----t--...^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,,lllllZbZjllmmm	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   CC	C	>M M A$M 4&I M A
K%M KM M 0M7c                 \    t          | d          r| j                                         dS dS )z<Clean up resources when finished with the remote_connection.r~   N)hasattrr~   clearrA   s    r   r   zRemoteConnection.close]  s8    4!! 	J	 	r   )F)FF)N)__name__
__module____qualname____doc__browser_namer   r   r   certifiwherer   classmethodr   r   r   r   r    r6   rC   rL   rR   rc   strboolr   r   r   r   r[   r   r   r   r   &   s         L-HIX X [X   [ 6 6 [6   [   [    [6N N N< < <
( ( (= = =$s
 s
3 s
D s
X\ s
 s
 s
 s
j> > >(7 7 7 7r    r   r   )loggingr>   r*   r   r   base64r   urllibr   r  r^   seleniumr    r   r   r   errorhandlerr	   	getLoggerr   r   r   r[   r   r   <module>r     s   $  				                                          # # # # # #		8	$	$z z z z z z z z z zr   