1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
U
\±d½Aã@sœddlZddlZddlZddlZddlZddlmZddlmZddl    Z    ddl
Z
ddl m Z ddl mZddlmZddlmZe e¡ZGd    d
„d
ƒZdS) éN)Ú    b64encode)Úparse)Ú __version__é)Úutils)ÚCommand)Ú    ErrorCodec@sºeZdZdZdZejZe     ¡Z
e dd„ƒZ e dd„ƒZ e dd„ƒZe d    d
„ƒZe d d „ƒZe d!dd„ƒZdd„Zdd„Zdd„Zdd„Zd"eeedœdd„Zdd„Zd#dd„Zdd „ZdS)$ÚRemoteConnectionz¹A connection with the Remote WebDriver server.
 
    Communicates with the server using the WebDriver wire protocol:
    https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol
    NcCs|jtjkrdS|jS)zt
        :Returns:
            Timeout value in seconds for all http requests made to the Remote Connection
        N)Ú_timeoutÚsocketÚ_GLOBAL_DEFAULT_TIMEOUT©Úcls©rúbd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\selenium/webdriver/remote/remote_connection.pyÚ get_timeout1szRemoteConnection.get_timeoutcCs
||_dS)zyOverride the default timeout.
 
        :Args:
            - timeout - timeout value for http requests in seconds
        N)r
)rÚtimeoutrrrÚ set_timeout9szRemoteConnection.set_timeoutcCs tj|_dS)zAReset the http request timeout to socket._GLOBAL_DEFAULT_TIMEOUT.N)r r r
r rrrÚ reset_timeoutBszRemoteConnection.reset_timeoutcCs|jS)zv
        :Returns:
            Paths of the .pem encoded certificate to verify connection to command executor
        ©Ú    _ca_certsr rrrÚget_certificate_bundle_pathGsz,RemoteConnection.get_certificate_bundle_pathcCs
||_dS)zóSet 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ÚpathrrrÚset_certificate_bundle_pathOs    z,RemoteConnection.set_certificate_bundle_pathFcCs€t ¡ ¡}|dkrd}dddt›d|›ddœ}|jrjt|j›d    |j› ¡ƒ}| d
d |     ¡›i¡|r|| d d i¡|S)z²Get headers for remote request.
 
        :Args:
         - parsed_url - The parsed url
         - keep_alive (Boolean) - Is this a keep-alive connection (default: False)
        ÚdarwinÚmaczapplication/jsonzapplication/json;charset=UTF-8z    selenium/z     (python ú))ÚAcceptú Content-Typez
User-Agentú:Ú AuthorizationzBasic Ú
Connectionz
keep-alive)
ÚplatformÚsystemÚlowerrÚusernamerÚpasswordÚencodeÚupdateÚdecode)rÚ
parsed_urlÚ
keep_aliver#ÚheadersZ base64stringrrrÚget_remote_connection_headersZs     ýz.RemoteConnection.get_remote_connection_headerscCsH|j d¡r"tj dtj d¡¡S|j d¡rDtj dtj d¡¡SdS)Nzhttps://Z https_proxyZ HTTPS_PROXYzhttp://Z
http_proxyZ
HTTP_PROXY)Ú_urlÚ
startswithÚosÚenvironÚget©ÚselfrrrÚ_get_proxy_urlvs  zRemoteConnection._get_proxy_urlcCs>|j}|| d¡dd…}d|ko<t|d| d¡…ƒdkS)Nréú@r©Ú
_proxy_urlÚfindÚlen)r4ÚurlrrrÚ_identify_http_proxy_auth|sz*RemoteConnection._identify_http_proxy_authcCs^|j}|d| d¡d…}|t|ƒd…}|d| d¡…}||t|ƒdd…}||fS)Nrr6r7rr8)r4r<ÚprotocolZ no_protocolÚauthZproxy_without_authrrrÚ_separate_http_proxy_auths z*RemoteConnection._separate_http_proxy_authcCsšd| ¡i}|jr$d|d<|j|d<|jrŽ|j ¡ d¡rTddlm}||jf|ŽS| ¡r~| ¡\|_|_    t
j |j    d|d    <t
j |jf|ŽSt
j f|ŽS)
NrÚ CERT_REQUIREDÚ    cert_reqsÚca_certsÚsockr)ÚSOCKSProxyManager)Úproxy_basic_authÚ proxy_headers)rrr9r$r/Zurllib3.contrib.socksrEr=r@Z_basic_proxy_authÚurllib3Ú make_headersÚ ProxyManagerÚ PoolManager)r4Zpool_manager_init_argsrErrrÚ_get_connection_manager‰s 
 z(RemoteConnection._get_connection_manager)Úremote_server_addrr+Ú ignore_proxycœCs’||_||_tj dtj d¡¡}|r”| d¡D]b}| ¡}|dkrLd}q”t |¡}t |j¡}|j    r~|j    |j    kr’d}q”q0|j
|j    kr0d}q”q0|s |  ¡nd|_ |r´|  ¡|_tjdtjdtjdtjd    tjd
tjd tjd tjd tjdtjdtjdtjdtjdtjdtjdtjdtj dtj!dtj"dtj#dtj$dtj%dtj&dtj'dtj(dtj)dtj*d tj+d!tj,d"tj-d#tj.d$tj/d%tj0d&tj1d'tj2d(tj3d)tj4d*tj5d+tj6d,tj7d-tj8d.tj9d/tj:d0tj;d1tj<d2tj=d3tj>d4tj?d5tj@d6tjAd7tjBd8tjCd9tjDd:tjEd;tjFd<tjGd=tjHd>tjId?tjJd@tjKdAtjLdBtjMdCtjNdDtjOdEtjPdFtjQdGtjRdHtjSdItjTdJtjUdKtjVdLtjWdMtjXdNtjYdOtjZdPtj[dQtj\dRtj]dSiN|_^dS)TNÚno_proxyZNO_PROXYú,Ú*T)ÚPOSTz/session)ÚDELETEz/session/$sessionId)ÚGETú/session/$sessionId/window)rTz"/session/$sessionId/window/handles)rRú/session/$sessionId/url)rRz/session/$sessionId/forward)rRz/session/$sessionId/back)rRz/session/$sessionId/refresh)rRz /session/$sessionId/execute/sync)rRz!/session/$sessionId/execute/async)rTrV)rTz/session/$sessionId/title)rTz/session/$sessionId/source)rTz/session/$sessionId/screenshot)rTz*/session/$sessionId/element/$id/screenshot)rRz/session/$sessionId/element)rRz/session/$sessionId/elements)rTz"/session/$sessionId/element/active)rRz'/session/$sessionId/element/$id/element)rRz(/session/$sessionId/element/$id/elements)rRz%/session/$sessionId/element/$id/click)rRz%/session/$sessionId/element/$id/clear)rTz$/session/$sessionId/element/$id/text)rRz%/session/$sessionId/element/$id/value)rRz/session/$sessionId/se/file)rTz$/session/$sessionId/element/$id/name)rTz(/session/$sessionId/element/$id/selected)rTz'/session/$sessionId/element/$id/enabled)rTz$/session/$sessionId/element/$id/rect)rTz//session/$sessionId/element/$id/attribute/$name)rTz./session/$sessionId/element/$id/property/$name)rTz,/session/$sessionId/element/$id/computedrole)rTz-/session/$sessionId/element/$id/computedlabel)rTz&/session/$sessionId/element/$id/shadow)rRz,/session/$sessionId/shadow/$shadowId/element)rRz-/session/$sessionId/shadow/$shadowId/elements)rTú/session/$sessionId/cookie)rRrW)rTú /session/$sessionId/cookie/$name)rSrW)rSrX)rRz/session/$sessionId/frame)rRz /session/$sessionId/frame/parent)rRrU)rRz/session/$sessionId/window/new)rSrU)rTz1/session/$sessionId/element/$id/css/$propertyName)rRz!/session/$sessionId/execute_async)rRú/session/$sessionId/timeouts)rTrY)rRz!/session/$sessionId/alert/dismiss)rRz /session/$sessionId/alert/accept)rRú/session/$sessionId/alert/text)rTrZ)rRú/session/$sessionId/actions)rSr[)rRú/session/$sessionId/window/rect)rTr\)rRz#/session/$sessionId/window/maximize)rRú/session/$sessionId/orientation)rTr])rTú&/session/$sessionId/network_connection)rRr^)rRz/session/$sessionId/se/log)rTz /session/$sessionId/se/log/types)rTú/session/$sessionId/context)rTz/session/$sessionId/contexts)rRr_)rRz%/session/$sessionId/window/fullscreen)rRz#/session/$sessionId/window/minimize)rRz/session/$sessionId/print)rRz*/session/$sessionId/webauthn/authenticator)rSz;/session/$sessionId/webauthn/authenticator/$authenticatorId)rRzF/session/$sessionId/webauthn/authenticator/$authenticatorId/credential)rTúG/session/$sessionId/webauthn/authenticator/$authenticatorId/credentials)rSzU/session/$sessionId/webauthn/authenticator/$authenticatorId/credentials/$credentialId)rSr`)rRz>/session/$sessionId/webauthn/authenticator/$authenticatorId/uv)_r+r.r0r1r2ÚsplitÚstriprÚurlparseÚnetlocrr5r9rLÚ_connrZ NEW_SESSIONZQUITZW3C_GET_CURRENT_WINDOW_HANDLEZW3C_GET_WINDOW_HANDLESrTZ
GO_FORWARDZGO_BACKZREFRESHZW3C_EXECUTE_SCRIPTZW3C_EXECUTE_SCRIPT_ASYNCZGET_CURRENT_URLZ    GET_TITLEZGET_PAGE_SOURCEZ
SCREENSHOTZELEMENT_SCREENSHOTZ FIND_ELEMENTZ FIND_ELEMENTSZW3C_GET_ACTIVE_ELEMENTZFIND_CHILD_ELEMENTZFIND_CHILD_ELEMENTSZ CLICK_ELEMENTZ CLEAR_ELEMENTZGET_ELEMENT_TEXTZSEND_KEYS_TO_ELEMENTZ UPLOAD_FILEZGET_ELEMENT_TAG_NAMEZIS_ELEMENT_SELECTEDZIS_ELEMENT_ENABLEDZGET_ELEMENT_RECTZGET_ELEMENT_ATTRIBUTEZGET_ELEMENT_PROPERTYZGET_ELEMENT_ARIA_ROLEZGET_ELEMENT_ARIA_LABELZGET_SHADOW_ROOTZFIND_ELEMENT_FROM_SHADOW_ROOTZFIND_ELEMENTS_FROM_SHADOW_ROOTZGET_ALL_COOKIESZ
ADD_COOKIEZ
GET_COOKIEZDELETE_ALL_COOKIESZ DELETE_COOKIEZSWITCH_TO_FRAMEZSWITCH_TO_PARENT_FRAMEZSWITCH_TO_WINDOWZ
NEW_WINDOWZCLOSEZ!GET_ELEMENT_VALUE_OF_CSS_PROPERTYZEXECUTE_ASYNC_SCRIPTZ SET_TIMEOUTSZ GET_TIMEOUTSZW3C_DISMISS_ALERTZW3C_ACCEPT_ALERTZW3C_SET_ALERT_VALUEZW3C_GET_ALERT_TEXTZ W3C_ACTIONSZW3C_CLEAR_ACTIONSZSET_WINDOW_RECTZGET_WINDOW_RECTZW3C_MAXIMIZE_WINDOWZSET_SCREEN_ORIENTATIONZGET_SCREEN_ORIENTATIONZGET_NETWORK_CONNECTIONZSET_NETWORK_CONNECTIONZGET_LOGZGET_AVAILABLE_LOG_TYPESZCURRENT_CONTEXT_HANDLEZCONTEXT_HANDLESZSWITCH_TO_CONTEXTZFULLSCREEN_WINDOWZMINIMIZE_WINDOWZ
PRINT_PAGEZADD_VIRTUAL_AUTHENTICATORZREMOVE_VIRTUAL_AUTHENTICATORZADD_CREDENTIALZGET_CREDENTIALSZREMOVE_CREDENTIALZREMOVE_ALL_CREDENTIALSZSET_USER_VERIFIEDÚ    _commands)r4rMr+rNZ    _no_proxyZnpuZn_urlZ
remote_addrrrÚ__init__›sd
 
©zRemoteConnection.__init__cCsx|j|}|dk    s td|›ƒ‚t |d¡ |¡}t|tƒrLd|krL|d=t |¡}|j    ›|›}|j
|d||dS)amSend 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.
        NzUnrecognised command rZ    sessionIdr)Úbody) rfÚAssertionErrorÚstringÚTemplateÚ
substituteÚ
isinstanceÚdictrZ    dump_jsonr.Ú_request)r4ÚcommandÚparamsÚ command_inforÚdatar<rrrÚexecutes
 
zRemoteConnection.executec     Cs t |›d|›d|›¡t |¡}| ||j¡}d}|rF|dkrFd}|jrh|jj||||d}|j}n0|     ¡}|}    |    j||||d}W5QRX|j}|j
  d¡}
t d|j›d|
›d|j ›¡z,d
|krÜd krünn| d |j  d d¡¡W¢úSd|krdkr&nn||
dœW¢ÐSg} |j  dd¡rN|j  dd¡ d¡} tdd„| Dƒƒsâzt |
 ¡¡}
WnRtk
rÆd|kržd
krªnntj} ntj} | |
 ¡dœYW¢0SXd|
krÚd|
d<|
W¢Sd|
dœ}
|
W¢St d    ¡|  ¡XdS)aqSend 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)rRÚPUT)rhr,zUTF-8zRemote response: status=z | data=z  | headers=zFinished Requesti,i0rTÚlocationiiô)ÚstatusÚvaluerú;cSsg|]}| d¡‘qS)z    image/png)r/)Ú.0ÚxrrrÚ
<listcomp>Hsz-RemoteConnection._request.<locals>.<listcomp>éÇryr)ÚLOGGERÚdebugrrcr-r+reÚrequestrxrLrsr)r,Úcloseror2raÚanyrZ    load_jsonrbÚ
ValueErrorrÚSUCCESSÚ UNKNOWN_ERROR) r4Úmethodr<rhr*r,ÚresponseZ
statuscodeÚconnÚhttprsÚ content_typerxrrrro$sL 
   
 
 
zRemoteConnection._requestcCst|dƒr|j ¡dS)z<Clean up resources when finished with the remote_connection.reN)ÚhasattrreÚclearr3rrrr‚]s
zRemoteConnection.close)F)FF)N)Ú__name__Ú
__module__Ú __qualname__Ú__doc__Z browser_namer r r
ÚcertifiÚwhererÚ classmethodrrrrrr-r5r=r@rLÚstrÚboolrgrtror‚rrrrr    &s0
 
 
 
 
 
 u
9r    )Úloggingr0r"r rjÚbase64rÚurllibrr’rHZseleniumrÚrrprZ errorhandlerrÚ    getLoggerrŽrr    rrrrÚ<module>s