o
    $[ii                     @   s  d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZm Z m!Z! d d
l"m#Z# d dl$m%Z% d dl&m'Z'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ d dlAmBZBmCZCmDZDmEZEmFZFmGZG d dlHmIZImJZJmKZK d dlLmMZM d dlNmOZO d dlPmQZQ d dlRmSZS erd dlTmUZU G dd deZVdS )    N)Path)SimpleNamespace)TYPE_CHECKINGAnyCallableDictListLiteralOptionalPatternSequenceSetUnioncast)CookieGeolocationSetCookieParamStorageState)Artifact)
CDPSession)Clock)ChannelOwnerfrom_channelfrom_nullable_channel)ConsoleMessage)Dialog)ErrorTargetClosedError)EventContextManagerImpl)APIRequestContext)Frame)	HarRouter)HarContentPolicyHarModeHarRecordingMetadataRouteFromHarNotFoundPolicyRouteHandlerRouteHandlerCallbackTimeoutSettingsURLMatchWebSocketRouteHandlerCallbackasync_readfileasync_writefilelocals_to_paramsparse_errorprepare_record_har_optionsto_impl)RequestResponseRouteWebSocketRouteWebSocketRouteHandlerserialize_headers)BindingCallPageWorker)escape_regex_flags)Tracing)Waiter)WebError)Browserc                       s  e Zd Zeddddddddd	d
ddZdededededdf
 fddZdefddZ	de
ddfddZdeddfddZdeddfddZdeddfd d!Zd"eddfd#d$Zd"ee ddfd%d&Zd"eddfd'd(Zd"ee ddfd)d*Zedee
 fd+d,Zeded- fd.d/Zd0ed1eddfd2d3Zde
fd4d5Zdd6eeee f dee  fd7d8Z!d9ee" ddfd:d;Z#			dd<eee$e f d=eee$e f d>eee$e f ddfd?d@Z%	ddAee dBeddfdCdDZ&ddEdFZ'ddGe(ddfdHdIZ)dJeeef ddfdKdLZ*dMe+ddfdNdOZ,	ddPed>eee-f ddfdQdRZ.	dd<edSe/dTe+ddfdUdVZ0d<edSe/ddfdWdXZ1	ddYe2dZe3d[e4ddfd\d]Z5	ddYe2dZee3 ddfd^d_Z6	dd`ee7 daee7 dbe8dc ddfdddeZ9dYe2dZe:ddfdfdgZ;ddhdiZ<	ddbe8dc ddfdjdkZ=				ddlee-ef dee
 dYee$e ef dme>dne?ddfdodpZ@					ddlee-ef dYee$e ef dqeAdre+dse8dt due?ddfdvdwZBddxdyZCddzd{ZD		dd|ed}e/d"edeEfd~dZFdddZGddeddfddZHdd>eee-f deIfddZJdee fddZK	dd|ed}e/d"edeLfddZM		dd}e/eNge+f d"edeEeN fddZO		dd}e/e
ge+f d"edeEe
 fddZPde
ddfddZQdeRddfddZSdeTdedee dee
 ddf
ddZUdeTd	eeV dedee
 ddf
ddZWd|eddfddZXdeYddfddZZde[dee
 ddfddZ\deTdee
 ddfddZ]d	eVdee
 ddfddZ^edee
 fddZ_edeeR fddZ`dee
eaf debfddZcededfddZeedddZfedegfddZh  ZiS )BrowserContextbackgroundpagecloseconsoledialogpageweberrorserviceworkerrequestresponserequestfailedrequestfinished)BackgroundPageCloseConsoler   r8   r=   ServiceWorkerr1   r2   RequestFailedRequestFinishedparenttypeguidinitializerreturnNc                    sT  t  |||| d  _|jjdkrtd| _ jj  g  _g  _	g  _
i  _td  _d  _i  _t  _t  _ttt|d  _i  _t|d  _t  _ jd fdd  jd fdd  jd	 fd
d  jd fdd  jd fdd  jd fdd  jd fdd  jd fdd  jd fdd  jd fdd  jd fdd  jd fdd  jd fdd  jd fd d t  _  j j! fd!d d  _"g  _# $t%j j&dt%j j'dt%j j(dt%j j)dt%j j*dt%j j+di d" _,d S )#Nr>   tracingrequestContextbindingCallc                         t| d S )Nbinding)_on_bindingr   paramsself a/var/www/html/flask_server/venv/lib/python3.10/site-packages/playwright/_impl/_browser_context.py<lambda>       z)BrowserContext.__init__.<locals>.<lambda>rA   c                          S N)	_on_close)_r^   r`   ra   rb          rD   c                    rY   NrD   )_on_pager   r\   r^   r`   ra   rb      rc   routec                    s    j  t| dS )Nrk   )_loopcreate_task	_on_router   getr\   r^   r`   ra   rb      s
    webSocketRoutec                    s    j  t| d S )Nrp   )rl   rm   _on_web_socket_router   r\   r^   r`   ra   rb      s
    
backgroundPagec                    rY   ri   )_on_background_pager   r\   r^   r`   ra   rb      rc   serviceWorkerc                    rY   )Nworker)_on_service_workerr   r\   r^   r`   ra   rb      rc   rB   c                    s
     | S re   )_on_console_message)eventr^   r`   ra   rb         
 rC   c                    rY   )NrC   )
_on_dialogr   r\   r^   r`   ra   rb      rc   	pageErrorc                    s      t| d d t| d S )NerrorrD   )_on_page_errorr.   r   r\   r^   r`   ra   rb      s    
rG   c                         t| d t| dS )NrG   rD   )_on_requestr   r   ro   r\   r^   r`   ra   rb          
rH   c                    r~   )NrH   rD   )_on_responser   r   ro   r\   r^   r`   ra   rb      r   requestFailedc              	      s,     t| d | d | dt| dS )NrG   responseEndTimingfailureTextrD   )_on_request_failedr   ro   r   r\   r^   r`   ra   rb      s    
requestFinishedc              	      s0     t| d t| d| d t| dS )NrG   rH   r   rD   )_on_request_finishedr   r   ro   r\   r^   r`   ra   rb      s    
c                    s    j dS NT)_closed_future
set_result)contextr^   r`   ra   rb      s    F)-super__init___browser	__class____name__r   	_contextsappend_pages_routes_web_socket_routes	_bindingsr(   _timeout_settings_owner_page_optionsset_background_pages_service_workersr;   r   _tracing_har_recorders_requestr   _clock_channelonasyncioFuturer   onceEventsrL   _close_reason_har_routers"_set_event_to_subscription_mappingr?   rM   r   r1   r2   rP   rO   _close_was_called)r_   rQ   rR   rS   rT   r   r^   ra   r   i   s   











	

	

zBrowserContext.__init__c                 C   s   d| j  dS )Nz<BrowserContext browser=>)browserr^   r`   r`   ra   __repr__   s   zBrowserContext.__repr__c                 C   sJ   | j | | tjj| |jr!|j s#|jtjj| d S d S d S re   )	r   r   emitr?   r   r8   _opener	is_closedPopupr_   rD   r`   r`   ra   rj      s
   zBrowserContext._on_pagerk   c                    s   |_ |j } j }|D ]`}|r|js jr d S ||jjs%q| jvr+q|jr4 j	| z|
|I d H }W t jdkrSt j fddd nt jdkrjt j fddd w w |rp d S qz|dI d H  W d S  ty   Y d S w )Nr   c                      rd   re   )_update_interception_patternsr`   r^   r`   ra   rb      rh   z*BrowserContext._on_route.<locals>.<lambda>T)_contextrG   
_safe_pager   copyr   matchesurlwill_expireremovehandlelenr   rm   _connectionwrap_api_call_inner_continue	Exception)r_   rk   rD   route_handlersroute_handlerhandledr`   r^   ra   rn      sJ   


zBrowserContext._on_routeweb_socket_routec                    s@   t  fdd| jD d }|r| I d H  d S    d S )Nc                 3   s     | ]}|  jr|V  qd S re   )r   r   ).0r   r   r`   ra   	<genexpr>  s    

z6BrowserContext._on_web_socket_route.<locals>.<genexpr>)nextr   r   connect_to_server)r_   r   r   r`   r   ra   rq   
  s   
z#BrowserContext._on_web_socket_routebinding_callc                 C   s2   | j |jd }|d u rd S t|| d S )Nname)r   ro   _initializerr   rm   call)r_   r   funcr`   r`   ra   r[     s   zBrowserContext._on_bindingtimeoutc                 C   
   |  |S re   )$_set_default_navigation_timeout_implr_   r   r`   r`   ra   set_default_navigation_timeout     
z-BrowserContext.set_default_navigation_timeoutc                 C   4   | j | | jd|d u ri  d S d|i d S )N"setDefaultNavigationTimeoutNoReplyr   )r   r   r   send_no_replyr   r`   r`   ra   r   !  s   
z3BrowserContext._set_default_navigation_timeout_implc                 C   r   re   )_set_default_timeout_implr   r`   r`   ra   set_default_timeout(  r   z"BrowserContext.set_default_timeoutc                 C   r   )NsetDefaultTimeoutNoReplyr   )r   r   r   r   r   r`   r`   ra   r   +  s   z(BrowserContext._set_default_timeout_implc                 C   s
   | j  S re   )r   r   r^   r`   r`   ra   pages1     
zBrowserContext.pagesr>   c                 C      | j S re   )r   r^   r`   r`   ra   r   5     zBrowserContext.browsercontext_optionsbrowser_optionsc                 C   sJ   || _ | j dr| j d d | j d dd| jd< |d| j_d S )N	recordHarpathcontentr   r    	tracesDir)r   ro   r   r   _traces_dir)r_   r   r   r`   r`   ra   _set_options9  s   zBrowserContext._set_optionsc                    s&   | j rtdt| jdI d H S )Nz Please use browser.new_context()newPage)r   r   r   r   sendr^   r`   r`   ra   new_pageB  s   zBrowserContext.new_pageurlsc                    s8   |d u rg }t |tr|g}| jdt|dI d H S )Ncookies)r   )
isinstancestrr   r   dict)r_   r   r`   r`   ra   r   G  s   
zBrowserContext.cookiesr   c                        | j dt|dI d H  d S )N
addCookies)r   r   r   r   )r_   r   r`   r`   ra   add_cookiesN     zBrowserContext.add_cookiesr   domainr   c                    s   | j dt|tr|nd t|tr|jnd t|trt|nd t|tr'|nd t|tr0|jnd t|tr:t|nd t|trB|nd t|trK|jnd t|trUt|nd d	I d H  d S )NclearCookies)	r   nameRegexSourcenameRegexFlagsr   domainRegexSourcedomainRegexFlagsr   pathRegexSourcepathRegexFlags)r   r   r   r   r   patternr:   )r_   r   r   r   r`   r`   ra   clear_cookiesQ  s   zBrowserContext.clear_cookiespermissionsoriginc                        | j dtt I d H  d S )NgrantPermissionsr   r   r-   locals)r_   r  r  r`   r`   ra   grant_permissionsn  s   z BrowserContext.grant_permissionsc                    s   | j dI d H  d S )NclearPermissions)r   r   r^   r`   r`   ra   clear_permissionss  s   z BrowserContext.clear_permissionsgeolocationc                    r  )NsetGeolocationr  )r_   r
  r`   r`   ra   set_geolocationv  r   zBrowserContext.set_geolocationheadersc                    s$   | j dtt|dI d H  d S )NsetExtraHTTPHeaders)r  )r   r   r   r6   )r_   r  r`   r`   ra   set_extra_http_headersy  s   z%BrowserContext.set_extra_http_headersofflinec                    r   )N
setOffline)r  r   )r_   r  r`   r`   ra   set_offline~  r   zBrowserContext.set_offlinescriptc                    sH   |rt |I d H  }t|tstd| jdt|dI d H  d S )Nz1Either path or script parameter must be specifiedaddInitScript)source)r+   decoder   r   r   r   r   r   )r_   r  r   r`   r`   ra   add_init_script  s   
zBrowserContext.add_init_scriptcallbackr   c                    sp   | j D ]}||jv rtd| dq|| jv r!td| d|| j|< | jdt||p/ddI d H  d S )Nz
Function "z1" has been already registered in one of the pagesz" has been already registeredexposeBindingF)r   needsHandle)r   r   r   r   r   r   )r_   r   r  r   rD   r`   r`   ra   expose_binding  s   




zBrowserContext.expose_bindingc                    s    |  | fddI d H  d S )Nc                    s    | S re   r`   )r  argsr  r`   ra   rb     rh   z0BrowserContext.expose_function.<locals>.<lambda>)r  )r_   r   r  r`   r  ra   expose_function  r   zBrowserContext.expose_functionr   handlertimesc              	      s@   | j dt| jd||| jrdnd| |  I d H  d S )Nr   baseURLTF)r   insertr&   r   ro   _dispatcher_fiberr   )r_   r   r  r   r`   r`   ra   rk     s   

zBrowserContext.routec                    s\   g }g }| j D ]}|j|ks|r|j|kr|| q|| q| ||dI d H  d S )Ndefault)r   r   r  r   _unroute_internal)r_   r   r  removed	remainingrk   r`   r`   ra   unroute  s   
zBrowserContext.unrouter&  r'  behavior)r$  ignoreErrorswaitc                    sL   || _ |  I d H   d u s dkrd S tjt fdd| I d H  d S )Nr$  c                    s
   |   S re   )stop)routerr)  r`   ra   rb     ry   z2BrowserContext._unroute_internal.<locals>.<lambda>)r   r   r   gathermap)r_   r&  r'  r)  r`   r.  ra   r%    s   "z BrowserContext._unroute_internalc                    s2   | j dt| jd|| |  I d H  d S )Nr   r!  )r   r"  r5   r   ro   (_update_web_socket_interception_patterns)r_   r   r  r`   r`   ra   route_web_socket  s   zBrowserContext.route_web_socketc                 C   s   | j D ]}|  qg | _ d S re   )r   dispose)r_   r-  r`   r`   ra   _dispose_har_routers  s   


z#BrowserContext._dispose_har_routersc                    s$   |  | jg |I d H  |   d S re   )r%  r   r4  )r_   r)  r`   r`   ra   unroute_all  s   zBrowserContext.unroute_allharupdate_contentupdate_modec                    s^   dt ||pd|p
d|di}|r|j|d< | jd|I d H }t||p'dd| j|< d S )Noptionsattachminimal)recordHarPathrecordHarContentrecordHarModerecordHarUrlFilterrD   harStartr   )r/   r   r   r   r   )r_   r6  rD   r   r7  r8  r]   har_idr`   r`   ra   _record_into_har  s   	

zBrowserContext._record_into_harnotFoundupdateupdateContent)r:  embed
updateModec                    sh   |r| j |d |||dI d H  d S tj| jjt||pd|dI d H }| j| || I d H  d S )N)r6  rD   r   r7  r8  abort)local_utilsfilenot_found_actionurl_matcher)	rB  r!   creater   rI  r   r   r   add_context_route)r_   r6  r   rC  rD  rE  rG  r-  r`   r`   ra   route_from_har  s$   	zBrowserContext.route_from_harc                    *   t | j}| jdd|iI d H  d S )NsetNetworkInterceptionPatternspatterns)r&   prepare_interception_patternsr   r   r   r_   rR  r`   r`   ra   r     s
   z,BrowserContext._update_interception_patternsc                    rP  )N setWebSocketInterceptionPatternsrR  )r5   rS  r   r   r   rT  r`   r`   ra   r1    s   z7BrowserContext._update_web_socket_interception_patternsrx   	predicatec                 C   sz   |d u r	| j  }t| d| d}||d| d| d |tjjkr0|| tjjdd  || || t	|
 S )Nzbrowser_context.expect_event()zTimeout z%ms exceeded while waiting for event ""c                   S   s   t  S re   )r   r`   r`   r`   ra   rb   (  s    z-BrowserContext.expect_event.<locals>.<lambda>)r   r   r<   reject_on_timeoutr?   r   rL   reject_on_eventwait_for_eventr   result)r_   rx   rV  r   waiterr`   r`   ra   expect_event  s   
zBrowserContext.expect_eventc                 C   s:   | j r
| j j|  |   | j  | tjj	|  d S re   )
r   r   r   r4  r   _reset_stack_counterr   r?   r   rL   r^   r`   r`   ra   rf   -  s
   
zBrowserContext._on_closereasonc                    s   j rd S  _d_ jj fdddI d H  d	fdd}jj|dI d H  jdd iI d H  jI d H  d S )
NTc                      s   j j dS )N)r`  )rG   r3  r`   r`  r_   r`   ra   rb   <  s    z&BrowserContext.close.<locals>.<lambda>rU   c               	      s    j  D ]\\} }ttt jdd| iI d H }|ddkp(|d d}|d d}|rQ|sQ|d d }|	|I d H   j
jj||d dI d H  n
|	|d I d H  | I d H  qd S )	N	harExportharIdr   r:  r   z.zipz.tmp)zipFileharFile)r   itemsr   r   r   r   r   ro   endswithsave_asr   rI  	har_unzipdelete)rA  r]   r6  is_compressedneed_compressedtmp_pathr^   r`   ra   _inner_close?  s.   z*BrowserContext.close.<locals>._inner_closerA   r`  rU   N)r   r   r   r   r   r   r   )r_   r`  rn  r`   ra  ra   rA   5  s   
zBrowserContext.closec                    s2   | j dI d H }|rt|t|I d H  |S )NstorageState)r   send_return_as_dictr,   jsondumps)r_   r   r\  r`   r`   ra   storage_stateZ  s
   zBrowserContext.storage_statec                 C   s   | j r| j S | jr| jj S d S re   )r   r   r^   r`   r`   ra   _effective_close_reason`  s
   z&BrowserContext._effective_close_reasonc              	      sN   |  |||4 I d H }W d   I d H  n1 I d H sw   Y  |I d H S re   )r^  )r_   rx   rV  r   
event_infor`   r`   ra   r[  g  s
   (
zBrowserContext.wait_for_eventc                 C      |  tjj||S re   )r^  r8   r   rM   r_   rV  r   r`   r`   ra   expect_console_messagen     z%BrowserContext.expect_console_messagec                 C   rw  re   )r^  r?   r   r8   rx  r`   r`   ra   expect_pageu  rz  zBrowserContext.expect_pagec                 C   s    | j | | tjj| d S re   )r   addr   r?   r   rK   r   r`   r`   ra   rs   |  s   z"BrowserContext._on_background_pageru   c                 C   s&   | |_ | j| | tjj| d S re   )r   r   r|  r   r?   r   rN   )r_   ru   r`   r`   ra   rv     s   z!BrowserContext._on_service_workerresponse_end_timingfailure_textc                 C   s<   ||_ || | tjj| |r|tjj| d S d S re   )_failure_text_set_response_end_timingr   r?   r   rO   r8   )r_   rG   r}  r~  rD   r`   r`   ra   r     s   
z!BrowserContext._on_request_failedc                 C   sF   | | | tjj| |r|tjj| |r!|jd d S d S r   )r  r   r?   r   rP   r8   _finished_futurer   )r_   rG   rH   r}  rD   r`   r`   ra   r     s   
z#BrowserContext._on_request_finishedc                 C   sB   t || j| j}| tjj| |j}|r|tjj| d S d S re   )	r   rl   r#  r   r?   r   rM   rD   r8   )r_   rx   messagerD   r`   r`   ra   rw     s   z"BrowserContext._on_console_messagec                 C   sd   |  tjj|}|j}|r| tjj|p|}|s0|jdkr't|	  d S t|
  d S d S )Nbeforeunload)r   r?   r   r   rD   r8   rR   r   rm   acceptdismiss)r_   rC   has_listenersrD   r`   r`   ra   rz     s   
zBrowserContext._on_dialogr|   c                 C   s6   |  tjjt| j|| |r| tjj| d S d S re   )r   r?   r   r=   rl   r8   	PageError)r_   r|   rD   r`   r`   ra   r}     s   zBrowserContext._on_page_errorc                 C   ,   |  tjj| |r| tjj| d S d S re   )r   r?   r   r1   r8   )r_   rG   rD   r`   r`   ra   r        zBrowserContext._on_requestc                 C   r  re   )r   r?   r   r2   r8   )r_   rH   rD   r`   r`   ra   r     r  zBrowserContext._on_responsec                 C   
   t | jS re   )listr   r^   r`   r`   ra   background_pages  r   zBrowserContext.background_pagesc                 C   r  re   )r  r   r^   r`   r`   ra   service_workers  r   zBrowserContext.service_workersc                    sZ   t |}i }t|tr|j|d< nt|tr|j|d< ntdt| jd|I d H S )NrD   framezpage: expected Page or FramenewCDPSession)r0   r   r8   r   r    r   r   r   )r_   rD   r]   r`   r`   ra   new_cdp_session  s   

zBrowserContext.new_cdp_sessionc                 C   r   re   )r   r^   r`   r`   ra   rV     r   zBrowserContext.tracingr   c                 C   r   re   )r   r^   r`   r`   ra   rG     r   zBrowserContext.requestc                 C   r   re   )r   r^   r`   r`   ra   clock  r   zBrowserContext.clockre   )NNNro  )NN)NNNN)NNNNN)rU   r   )jr   
__module____qualname__r   r   r   r   r   r   r   r8   rj   r3   rn   r4   rq   r7   r[   floatr   r
   r   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r   r  r  boolr  r   r  r   r  r  r)   r'   intrk   r(  r&   r	   r%  r*   r2  r4  r5  r"   r#   rB  r%   rO  r   r1  r   r^  rf   rA   r   rt  ru  r   r[  r   ry  r{  rs   r9   rv   r1   r   r2   r   rw   r   rz   r   r}   r   r   r  r  r    r   r  r;   rV   rG   r   r  __classcell__r`   r`   r   ra   r?   Z   s   x 	$











	
	







%
	
	


r?   )Wr   rr  pathlibr   typesr   typingr   r   r   r   r   r	   r
   r   r   r   r   r    playwright._impl._api_structuresr   r   r   r   playwright._impl._artifactr   playwright._impl._cdp_sessionr   playwright._impl._clockr   playwright._impl._connectionr   r   r   !playwright._impl._console_messager   playwright._impl._dialogr   playwright._impl._errorsr   r   'playwright._impl._event_context_managerr   playwright._impl._fetchr   playwright._impl._framer    playwright._impl._har_routerr!   playwright._impl._helperr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   playwright._impl._networkr1   r2   r3   r4   r5   r6   playwright._impl._pager7   r8   r9   playwright._impl._str_utilsr:   playwright._impl._tracingr;   playwright._impl._waiterr<   playwright._impl._web_errorr=   playwright._impl._browserr>   r?   r`   r`   r`   ra   <module>   s6   8D 