o
    %hm                     @   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? d dl@mAZAmBZBmCZCmDZDmEZEmFZF d dlGmHZHmIZImJZJ d dlKmLZL d dlMmNZN d dlOmPZP d dlQmRZR erd dlSmTZT G dd deZUd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to_impl)RequestResponseRouteWebSocketRouteWebSocketRouteHandlerserialize_headers)BindingCallPageWorker)escape_regex_flags)Tracing)Waiter)WebError)Browserc                       s8  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eeef  d1ee d2ee d3eee e ef  d4ee! ddfd5d6Z"de
fd7d8Z#dd9eee$e f dee% fd:d;Z&d<e$e' ddfd=d>Z(			dd?eee e f d@eee e f dAeee e f ddfdBdCZ)	ddDe$e dEeddfdFdGZ*ddHdIZ+ddJe,ddfdKdLZ-dMeeef ddfdNdOZ.dPeddfdQdRZ/	ddSedAeeef ddfdTdUZ0	dd?edVe1dWeddfdXdYZ2d?edVe1ddfdZd[Z3	dd\e4d]e5d^e6ddfd_d`Z7	dd\e4d]ee5 ddfdadbZ8	ddcee9 ddee9 dee:df ddfdgdhZ;d\e4d]e<ddfdidjZ=ddkdlZ>	ddee:df ddfdmdnZ?				ddoeeef dee
 d\ee e ef dpedqe!ddfdrdsZ@					ddoeeef d\ee e ef dteAduedve:dw dxe!ddfdydzZBdd{d|ZCdd}d~ZD		ddede1d"edeEfddZFdddZGddeddfddZH	ddAeeef dedeIfddZJdee fddZK	ddede1d"edeLfddZM		dde1eNgef d"edeEeN fddZO		dde1e
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   r7   r<   ServiceWorkerr0   r1   RequestFailedRequestFinishedparenttypeguidinitializerreturnNc                    sf  t  |||| d  _|jjdkrtd| _g  _g  _g  _i  _	t
d  _d  _|d  _t  _t  _ jd _ jd _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=   optionsbaseURLrecordVideotracingrequestContextbindingCallc                         t| d S )Nbinding)_on_bindingr   paramsself U/var/www/html/myenv/lib/python3.10/site-packages/playwright/_impl/_browser_context.py<lambda>       z)BrowserContext.__init__.<locals>.<lambda>r@   c                          S N)	_on_close)_r`   rb   rc   rd          rC   c                    r[   NrC   )_on_pager   r^   r`   rb   rc   rd      re   routec                    s    j  t| dS )Nrm   )_loopcreate_task	_on_router   getr^   r`   rb   rc   rd      s
    webSocketRoutec                    s    j  t| d S )Nrr   )rn   ro   _on_web_socket_router   r^   r`   rb   rc   rd      s
    
backgroundPagec                    r[   rk   )_on_background_pager   r^   r`   rb   rc   rd      re   serviceWorkerc                    r[   )Nworker)_on_service_workerr   r^   r`   rb   rc   rd      re   rA   c                    s
     | S rg   )_on_console_message)eventr`   rb   rc   rd         
 rB   c                    r[   )NrB   )
_on_dialogr   r^   r`   rb   rc   rd      re   	pageErrorc                    s      t| d d t| d S )NerrorrC   )_on_page_errorr.   r   r^   r`   rb   rc   rd      s    
rF   c                         t| d t| dS )NrF   rC   )_on_requestr   r   rq   r^   r`   rb   rc   rd          
rG   c                    r   )NrG   rC   )_on_responser   r   rq   r^   r`   rb   rc   rd      r   requestFailedc              	      s,     t| d | d | dt| dS )NrF   responseEndTimingfailureTextrC   )_on_request_failedr   rq   r   r^   r`   rb   rc   rd      s    
requestFinishedc              	      s0     t| d t| d| d t| dS )NrF   rG   r   rC   )_on_request_finishedr   r   rq   r^   r`   rb   rc   rd      s    
c                    s    j dS NT)_closed_future
set_result)contextr`   rb   rc   rd      s    F).super__init___browser	__class____name__r   _pages_routes_web_socket_routes	_bindingsr(   _timeout_settings_owner_page_optionsset_background_pages_service_workersrq   	_base_url_videos_dirr:   r   _tracing_har_recorders_requestr   _clock_channelonasyncioFuturer   onceEventsrK   _close_reason_har_routers"_set_event_to_subscription_mappingr>   rL   r   r0   r1   rO   rN   _closing_or_closed)ra   rP   rQ   rR   rS   r   r`   rc   r   h   s   












	

	

zBrowserContext.__init__c                 C   s   d| j  dS )Nz<BrowserContext browser=>)browserr`   rb   rb   rc   __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 rg   )	r   appendemitr>   r   r7   _opener	is_closedPopupra   rC   rb   rb   rc   rl      s
   zBrowserContext._on_pagerm   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                      rf   rg   )_update_interception_patternsrb   r`   rb   rc   rd      rj   z*BrowserContext._on_route.<locals>.<lambda>T)_contextrF   
_safe_pager   copy_close_was_calledr   matchesurlwill_expireremovehandlelenr   ro   _connectionwrap_api_call_inner_continue	Exception)ra   rm   rC   route_handlersroute_handlerhandledrb   r`   rc   rp      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 rg   )r   r   ).0r   r   rb   rc   	<genexpr>  s    

z6BrowserContext._on_web_socket_route.<locals>.<genexpr>)nextr   r   connect_to_server)ra   r   r   rb   r   rc   rs     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   rq   _initializerr   ro   call)ra   r   funcrb   rb   rc   r]     s   zBrowserContext._on_bindingtimeoutc                 C   
   |  |S rg   )$_set_default_navigation_timeout_implra   r   rb   rb   rc   set_default_navigation_timeout     
z-BrowserContext.set_default_navigation_timeoutc                 C      | j | d S rg   )r   r   r   rb   rb   rc   r   "     z3BrowserContext._set_default_navigation_timeout_implc                 C   r   rg   )_set_default_timeout_implr   rb   rb   rc   set_default_timeout%  r   z"BrowserContext.set_default_timeoutc                 C   r   rg   )r   r   r   rb   rb   rc   r   (  r   z(BrowserContext._set_default_timeout_implc                 C   s
   | j  S rg   )r   r   r`   rb   rb   rc   pages+     
zBrowserContext.pagesr=   c                 C      | j S rg   )r   r`   rb   rb   rc   r   /     zBrowserContext.browserrecord_har_pathrecord_har_contentrecord_har_omit_contentrecord_har_url_filterrecord_har_modec                    sZ   |sd S t |}|drdnd}|p|du rdn|}| j|d |||p%ddI d H  d S )N.zipattachembedTomitfullharrC   r   update_contentupdate_mode)strendswith_record_into_har)ra   r   r   r   r   r   default_policycontent_policyrb   rb   rc   _initialize_har_from_options3  s    z+BrowserContext._initialize_har_from_optionsc                    s(   | j rtdt| jdd I d H S )Nz Please use browser.new_context()newPage)r   r   r   r   sendr`   rb   rb   rc   new_pageL  s   zBrowserContext.new_pageurlsc                    s:   |d u rg }t |tr|g}| jdd t|dI d H S )Ncookies)r   )
isinstancer   r   r   dict)ra   r   rb   rb   rc   r   Q  s   
zBrowserContext.cookiesr   c                    "   | j dd t|dI d H  d S )N
addCookies)r   r   r   r   )ra   r   rb   rb   rc   add_cookiesX      zBrowserContext.add_cookiesr   domainpathc                    s   | j d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r1|jnd t|tr;t|nd t|trC|nd t|trL|jnd t|trVt|nd d	I d H  d S )NclearCookies)	r   nameRegexSourcenameRegexFlagsr  domainRegexSourcedomainRegexFlagsr  pathRegexSourcepathRegexFlags)r   r   r   r   r   patternr9   )ra   r   r  r  rb   rb   rc   clear_cookies[  s   zBrowserContext.clear_cookiespermissionsoriginc                    "   | j dd tt I d H  d S )NgrantPermissionsr   r   r-   locals)ra   r  r  rb   rb   rc   grant_permissionsy  s    z BrowserContext.grant_permissionsc                    s   | j dd I d H  d S )NclearPermissions)r   r   r`   rb   rb   rc   clear_permissions~  s   z BrowserContext.clear_permissionsgeolocationc                    r  )NsetGeolocationr  )ra   r  rb   rb   rc   set_geolocation  r  zBrowserContext.set_geolocationheadersc                    s&   | j dd tt|dI d H  d S )NsetExtraHTTPHeaders)r  )r   r   r   r5   )ra   r  rb   rb   rc   set_extra_http_headers  s   z%BrowserContext.set_extra_http_headersofflinec                    r   )N
setOffline)r  r   )ra   r  rb   rb   rc   set_offline  r  zBrowserContext.set_offlinescriptc                    sJ   |rt |I d H  }t|tstd| jd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   )ra   r  r  rb   rb   rc   add_init_script  s   
 zBrowserContext.add_init_scriptcallbackr   c                    sr   | j D ]}||jv rtd| dq|| jv r!td| d|| j|< | jdd t||p0d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   )ra   r   r$  r   rC   rb   rb   rc   expose_binding  s   




zBrowserContext.expose_bindingc                    s    |  | fddI d H  d S )Nc                    s    | S rg   rb   )r!  argsr$  rb   rc   rd     rj   z0BrowserContext.expose_function.<locals>.<lambda>)r'  )ra   r   r$  rb   r)  rc   expose_function  s   zBrowserContext.expose_functionr   handlertimesc              	      s:   | j dt| j||| jrdnd| |  I d H  d S )Nr   TF)r   insertr&   r   _dispatcher_fiberr   )ra   r   r+  r,  rb   rb   rc   rm     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)ra   r   r+  removed	remainingrm   rb   rb   rc   unroute  s   
zBrowserContext.unrouter1  r2  behavior)r/  ignoreErrorswaitc                    sH   || _  d ur dkrtjt fdd| I d H  |  I d H  d S )Nr/  c                    s
   |   S rg   )stop)routerr4  rb   rc   rd     r{   z2BrowserContext._unroute_internal.<locals>.<lambda>)r   r   gathermapr   )ra   r1  r2  r4  rb   r9  rc   r0    s
   z BrowserContext._unroute_internalc                    s,   | j dt| j|| |  I d H  d S )Nr   )r   r-  r4   r   (_update_web_socket_interception_patterns)ra   r   r+  rb   rb   rc   route_web_socket  s   zBrowserContext.route_web_socketc                 C   s   | j D ]}|  qg | _ d S rg   )r   dispose)ra   r8  rb   rb   rc   _dispose_har_routers  s   


z#BrowserContext._dispose_har_routersc                    s$   |  | jg |I d H  |   d S rg   )r0  r   r?  )ra   r4  rb   rb   rc   unroute_all  s   zBrowserContext.unroute_allr   r   r   c                    s   |pd}dt |d|t|t r|nd t|tr|jnd t|tr't|nd |p+ddi}|r6|j|d< | jdd |I d H }t ||d| j|< d S )	Nr   rU   r   minimal)zipcontenturlGloburlRegexSourceurlRegexFlagsmoderC   harStart)r  rC  )	r   r   r   r   r  r9   r   r   r   )ra   r   rC   r   r   r   r_   har_idrb   rb   rc   r     s"   
zBrowserContext._record_into_harnotFoundupdateupdateContent)r   r   
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 )Nr   abort)local_utilsfilenot_found_actionurl_matcher)	r   r!   creater   rO  r   r   r   add_context_route)ra   r   r   rJ  rK  rL  rM  r8  rb   rb   rc   route_from_har  s$   	zBrowserContext.route_from_harc                    ,   t | j}| jdd d|iI d H  d S )NsetNetworkInterceptionPatternspatterns)r&   prepare_interception_patternsr   r   r   ra   rX  rb   rb   rc   r     s
   
z,BrowserContext._update_interception_patternsc                    rV  )N setWebSocketInterceptionPatternsrX  )r4   rY  r   r   r   rZ  rb   rb   rc   r<    s   
z7BrowserContext._update_web_socket_interception_patternsrz   	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 rg   )r   rb   rb   rb   rc   rd   5  s    z-BrowserContext.expect_event.<locals>.<lambda>)r   r   r;   reject_on_timeoutr>   r   rK   reject_on_eventwait_for_eventr   result)ra   rz   r\  r   waiterrb   rb   rc   expect_event'  s   
zBrowserContext.expect_eventc                 C   s   d| _ | jr.| | jjv r| jj|  | jjd usJ | | jjjjjv r.| jjjjj|  |   | j	
  | tjj|  d S r   )r   r   	_contextsr   _browser_type_playwright	selectors_contexts_for_selectorsr?  r   _reset_stack_counterr   r>   r   rK   r`   rb   rb   rc   rh   :  s   
zBrowserContext._on_closereasonc                    sz    j rd S | _d _  jj|dI d H  d fdd} jj|dI d H   jdd d|iI d H   jI d H  d S )	NT)rk  rT   c               
      s    j  D ]]\} }ttt jdd d| iI d H }|ddkp)|d d}|d d}|rR|sR|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harIdrC  r   r  r   z.tmp)zipFileharFile)r   itemsr   r   r   r   r   rq   r   save_asr   rO  	har_unzipdelete)rI  r_   r   is_compressedneed_compressedtmp_pathr`   rb   rc   _inner_closeT  s.   z*BrowserContext.close.<locals>._inner_closer@   rk  rT   N)	r   r   rF   r>  r   r   r   r   r   )ra   rk  rw  rb   r`   rc   r@   L  s   zBrowserContext.close	indexedDBc                    s:   | j dd d|iI d H }|rt|t|I d H  |S )NstorageStatery  )r   send_return_as_dictr,   jsondumps)ra   r  ry  rb  rb   rb   rc   storage_stateo  s   

zBrowserContext.storage_statec                 C   s   | j r| j S | jr| jj S d S rg   )r   r   r`   rb   rb   rc   _effective_close_reasony  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 rg   )rd  )ra   rz   r\  r   
event_inforb   rb   rc   ra    s
   (
zBrowserContext.wait_for_eventc                 C      |  tjj||S rg   )rd  r7   r   rL   ra   r\  r   rb   rb   rc   expect_console_message     z%BrowserContext.expect_console_messagec                 C   r  rg   )rd  r>   r   r7   r  rb   rb   rc   expect_page  r  zBrowserContext.expect_pagec                 C   s    | j | | tjj| d S rg   )r   addr   r>   r   rJ   r   rb   rb   rc   ru     s   z"BrowserContext._on_background_pagerw   c                 C   s&   | |_ | j| | tjj| d S rg   )r   r   r  r   r>   r   rM   )ra   rw   rb   rb   rc   rx     s   z!BrowserContext._on_service_workerresponse_end_timingfailure_textc                 C   s<   ||_ || | tjj| |r|tjj| d S d S rg   )_failure_text_set_response_end_timingr   r>   r   rN   r7   )ra   rF   r  r  rC   rb   rb   rc   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   rO   r7   _finished_futurer   )ra   rF   rG   r  rC   rb   rb   rc   r     s   
z#BrowserContext._on_request_finishedc                 C   sB   t || j| j}| tjj| |j}|r|tjj| d S d S rg   )	r   rn   r.  r   r>   r   rL   rC   r7   )ra   rz   messagerC   rb   rb   rc   ry     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   rC   r7   rQ   r   ro   acceptdismiss)ra   rB   has_listenersrC   rb   rb   rc   r|     s   
zBrowserContext._on_dialogr~   c                 C   s:   |  tjjt| j| j|| |r| tjj| d S d S rg   )r   r>   r   r<   rn   r.  r7   	PageError)ra   r~   rC   rb   rb   rc   r     s   zBrowserContext._on_page_errorc                 C   ,   |  tjj| |r| tjj| d S d S rg   )r   r>   r   r0   r7   )ra   rF   rC   rb   rb   rc   r        zBrowserContext._on_requestc                 C   r  rg   )r   r>   r   r1   r7   )ra   rG   rC   rb   rb   rc   r     r  zBrowserContext._on_responsec                 C   
   t | jS rg   )listr   r`   rb   rb   rc   background_pages  r   zBrowserContext.background_pagesc                 C   r  rg   )r  r   r`   rb   rb   rc   service_workers  r   zBrowserContext.service_workersc                    s\   t |}i }t|tr|j|d< nt|tr|j|d< ntdt| jdd |I d H S )NrC   framezpage: expected Page or FramenewCDPSession)r/   r   r7   r   r    r   r   r   )ra   rC   r_   rb   rb   rc   new_cdp_session  s   

zBrowserContext.new_cdp_sessionc                 C   r   rg   )r   r`   rb   rb   rc   rX     r   zBrowserContext.tracingr   c                 C   r   rg   )r   r`   rb   rb   rc   rF     r   zBrowserContext.requestc                 C   r   rg   )r   r`   rb   rb   rc   clock  r   zBrowserContext.clockrg   )NNNrx  )NN)NNNN)NNNNN)rT   r   )jr   
__module____qualname__r   r   r   r   r   r   r   r7   rl   r2   rp   r3   rs   r6   r]   floatr   r
   r   r   r   propertyr   r   r   r   r   r"   boolr   r#   r   r   r   r   r   r   r   r  r  r  r   r  r  r  r#  r   r'  r*  r)   r'   intrm   r3  r&   r	   r0  r*   r=  r?  r@  r   r%   rU  r   r<  r   rd  rh   r@   r   r~  r  r   ra  r   r  r  ru   r8   rx   r0   r   r1   r   ry   r   r|   r   r   r   r   r  r  r    r   r  r:   rX   rF   r   r  __classcell__rb   rb   r   rc   r>   Y   s   z 
$


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

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

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

$



	
	


r>   )Vr   r|  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/   playwright._impl._networkr0   r1   r2   r3   r4   r5   playwright._impl._pager6   r7   r8   playwright._impl._str_utilsr9   playwright._impl._tracingr:   playwright._impl._waiterr;   playwright._impl._web_errorr<   playwright._impl._browserr=   r>   rb   rb   rb   rc   <module>   s6   8@ 