a
    >xd                  =   @   s  d Z ddlZddlZddlmZ ddlZddlZddlZddlm	Z	 ddl
mZmZ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 dd
lmZmZ ddlmZ ddlmZ erddl
m Z  e!e"Z#G dd deZ$G dd de%Z&ddddddddddddddd Z'G d!d" d"e%Z(e)e*d#d$d%Z+G d&d' d'e%Z,d(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdd<Z-dS )ezNetwork Manager module.    N)OrderedDict)SimpleNamespace)	AwaitableDictListOptionalUnionTYPE_CHECKING)unquote)EventEmitter)
CDPSession)NetworkError)FrameManagerFrame)
debugError)Multimap)Setc                
       sv  e Zd ZdZedddddZeedd fd	d
Ze	e
e
f ddddZe	e
e
f ddddZe	e
e
f dddZeddddZe
ddddZeddddZddddZe
edddd Zedd!d"d#Ze	dd!d$d%Zd5d&ee	eee	dd'd(d)Zee
 e
e
ee
e	ee
 ed& dd*	d+d,Zedd!d-d.Zedd!d/d0Zedd!d1d2Zedd!d3d4Z  Z S )6NetworkManagerzNetworkManager class.requestresponseZrequestfailedZrequestfinished)RequestResponseRequestFailedRequestFinishedN)clientframeManagerreturnc                    s   t    || _|| _t | _t | _t | _d| _	d| _
t | _d| _d| _t | _t | _| jd| j | jd| j | jd| j | jd| j | jd| j | jd| j dS )	zMake new NetworkManager.FNzNetwork.requestWillBeSentzNetwork.requestInterceptedzNetwork.requestServedFromCachezNetwork.responseReceivedzNetwork.loadingFinishedzNetwork.loadingFailed)super__init___client_frameManagerdict_requestIdToRequest_interceptionIdToRequestr   _extraHTTPHeaders_offline_credentialsset_attemptedAuthentications_userRequestInterceptionEnabled#_protocolRequestInterceptionEnabledr   _requestHashToRequestIds_requestHashToInterceptionIdson_onRequestWillBeSent_onRequestIntercepted_onRequestServedFromCache_onResponseReceived_onLoadingFinished_onLoadingFailed)selfr   r   	__class__ Q/var/www/html/Ranjet/env/lib/python3.9/site-packages/pyppeteer/network_manager.pyr   (   s&    
zNetworkManager.__init__)credentialsr   c                    s   || _ |  I dH  dS )z"Provide credentials for http auth.N)r&   "_updateProtocolRequestInterception)r4   r9   r7   r7   r8   authenticate?   s    zNetworkManager.authenticate)extraHTTPHeadersr   c                    sj   t  | _| D ]:\}}t|ts<td| dt| d|| j| < q| j	dd| jiI dH  dS )zSet extra http headers.zExpected value of header "z" to be string, but z
 is found.zNetwork.setExtraHTTPHeadersheadersN)
r   r$   items
isinstancestr	TypeErrortypelowerr   send)r4   r<   kvr7   r7   r8   setExtraHTTPHeadersD   s    
z"NetworkManager.setExtraHTTPHeadersr   c                 C   s   t f i | jS )zGet extra http headers.)r!   r$   r4   r7   r7   r8   r<   Q   s    zNetworkManager.extraHTTPHeadersvaluer   c                    s8   | j |krdS || _ | jd| j ddddI dH  dS )z#Change offline mode enable/disable.Nz Network.emulateNetworkConditionsr   )ZofflineZlatencyZdownloadThroughputZuploadThroughput)r%   r   rD   r4   rK   r7   r7   r8   setOfflineModeU   s    
zNetworkManager.setOfflineMode)	userAgentr   c                    s   | j dd|iI dH  dS )zSet user agent.zNetwork.setUserAgentOverriderO   N)r   rD   )r4   rO   r7   r7   r8   setUserAgenta   s    zNetworkManager.setUserAgentc                    s   || _ |  I dH  dS )zEnable request interception.N)r)   r:   rM   r7   r7   r8   setRequestInterceptionf   s    z%NetworkManager.setRequestInterceptionc                    sh   | j pt| j}|| jkrd S || _|r2ddigng }t| jdd|i| jdd|iI d H  d S )NZ
urlPattern*zNetwork.setCacheDisabledZcacheDisabledzNetwork.setRequestInterceptionpatterns)r)   boolr&   r*   asynciogatherr   rD   )r4   enabledrS   r7   r7   r8   r:   k   s"    
z1NetworkManager._updateProtocolRequestInterception)methodmsgr   c              
      sL   z| j ||I d H  W n. tyF } ztt| W Y d }~n
d }~0 0 d S N)r   rD   	Exceptionr   logger)r4   rX   rY   er7   r7   r8   _send}   s    zNetworkManager._send)eventr   c                 C   s  | drd}|d | jv r"d}n| jr<d}| j|d  t| di  d}t| di  d}| jj| d	|d |||d
d d S | j	s| j
r| jj| d	d|d i d|v rL| j | dd}|rH| || dd| di ddd  | |j| dd| dd| dd| dd| di | d|j d S t|d }| j|}|r| j|| | ||d |d d |d |d |d |d g  nF| j||d  | d |d |d d |d |d |d |d g  d S )NZauthChallengeZDefaultinterceptionIdZ
CancelAuthZProvideCredentialsr&   usernamepassword"Network.continueInterceptedRequest)r   ra   rb   )r`   ZauthChallengeResponseZredirectUrl ZresponseStatusCoder   responseHeadersFisNavigationRequestresourceTyper   frameIdurl)getr(   r&   addgetattrr   _loopcreate_taskr^   r)   r*   r#   _handleRequestRedirect_handleRequestStart
_requestId_redirectChaingenerateRequestHashr+   
firstValuedeleter,   r'   )r4   r_   r   ra   rb   r   requestHash	requestIdr7   r7   r8   r/      s    











z$NetworkManager._onRequestInterceptedc                 C   s    | j |d}|rd|_d S )Nrw   T)r"   rj   _fromMemoryCache)r4   r_   r   r7   r7   r8   r0      s    z(NetworkManager._onRequestServedFromCacher   )r   redirectStatusredirectHeadersfromDiskCachefromServiceWorkersecurityDetailsr   c                 C   s   t | j||||||}||_|j| |td | j|j	d  | j
|jd  | j|j | tjj | | tjj| d S )Nz2Response body is unavailable for redirect response)r   r   	_responserr   append_bodyLoadedPromiseFulfillr   r"   poprq   r#   _interceptionIdr(   discardemitr   Eventsr   )r4   r   ry   rz   r{   r|   r}   r   r7   r7   r8   ro      s    
z%NetworkManager._handleRequestRedirect)	rw   r`   ri   rf   rg   requestPayloadrh   redirectChainr   c	                 C   sl   d }	|r| j d ur| j |}	t| j|||| j||||	|
}
|rJ|
| j|< |rX|
| j|< | tj	j|
 d S rZ   )
r    framer   r   r)   r"   r#   r   r   r   )r4   rw   r`   ri   rf   rg   r   rh   r   r   r   r7   r7   r8   rp      s    


z"NetworkManager._handleRequestStartc                 C   sD  | j rz|drd S t|d }| j|}| j|}|rd|d |_|| j|d < | j|| n| j	
||d  d S g }|dr| j|d  }|r|di }| ||d|d|d|d|d |j}|d |d	 ko|d
 dk}| |ddd|di dd||d
d|di |d| d S )NredirectResponser   rw   statusr=   r{   r|   r}   ZloaderIdrB   ZDocumentrd   ri   rh   )r*   rj   rs   r,   rt   r#   rq   r"   ru   r+   r'   ro   rr   rp   )r4   r_   rv   r`   r   r   r   rf   r7   r7   r8   r.      sX    





z#NetworkManager._onRequestWillBeSentc              
   C   sv   | j |d }|sd S |di }t| j||dd|di |d|d|d}||_| tjj| d S )	Nrw   r   r   r   r=   r{   r|   r}   )r"   rj   r   r   r~   r   r   r   )r4   r_   r   Z_respr   r7   r7   r8   r1   #  s    

z"NetworkManager._onResponseReceivedc                 C   sr   | j |dd}|sd S |j}|r0|d  | j |jd  | j|jd  | j	|j | 
tjj| d S )Nrw   rd   )r"   rj   r   r   r   rq   r#   r   r(   r   r   r   r   r   r4   r_   r   r   r7   r7   r8   r2   2  s    
z!NetworkManager._onLoadingFinishedc                 C   sz   | j |d }|sd S |d|_|j}|r8|d  | j |jd  | j|jd  | j	
|j | tjj| d S )Nrw   	errorText)r"   rj   _failureTextr   r   r   rq   r#   r   r(   r   r   r   r   r   r   r7   r7   r8   r3   @  s    
zNetworkManager._onLoadingFailed)N)!__name__
__module____qualname____doc__r   r   r   r   r   r   r@   r;   rG   r<   rT   rN   rP   rQ   r:   r!   r^   r/   r0   intro   r   r   rp   r.   r1   r2   r3   __classcell__r7   r7   r5   r8   r      sJ   
I ,r   c                   @   s6  e Zd ZdZeee eeeeeeee	 e
d  ddddZeedddZeedd	d
Zeee dddZeee dddZeedddZeed dddZeee	 dddZedddZee
d  dddZee dddZd&eddddZeddd d!Zd'edd#d$d%ZdS )(r   a  Request class.

    Whenever the page sends a request, such as for a network resource, the
    following events are emitted by pyppeteer's page:

    - ``'request'``: emitted when the request is issued by the page.
    - ``'response'``: emitted when/if the response is received for the request.
    - ``'requestfinished'``: emitted when the response body is downloaded and
      the request is complete.

    If request fails at some point, then instead of ``'requestfinished'`` event
    (and possibly instead of ``'response'`` event), the ``'requestfailed'``
    event is emitted.

    If request gets a ``'redirect'`` response, the request is successfully
    finished with the ``'requestfinished'`` event, and a new request is issued
    to a redirect url.
    N)r   rw   r`   rf   allowInterceptionri   rg   payloadr   r   r   c                 C   s   || _ || _|| _|| _|| _d| _d | _d | _|| _|	 | _
|d| _|d| _|di }dd | D | _|	| _|
| _d| _d S )NFrX   postDatar=   c                 S   s   i | ]\}}|  |qS r7   rC   .0rE   rF   r7   r7   r8   
<dictcomp>x      z$Request.__init__.<locals>.<dictcomp>)r   rq   _isNavigationRequestr   _allowInterception_interceptionHandledr~   r   _urlrC   _resourceTyperj   _method	_postDatar>   _headers_framerr   rx   )r4   r   rw   r`   rf   r   ri   rg   r   r   r   r=   r7   r7   r8   r   d  s"    
zRequest.__init__rH   c                 C   s   | j S )zURL of this request.r   rI   r7   r7   r8   ri   ~  s    zRequest.urlc                 C   s   | j S )a;  Resource type of this request perceived by the rendering engine.

        ResourceType will be one of the following: ``document``,
        ``stylesheet``, ``image``, ``media``, ``font``, ``script``,
        ``texttrack``, ``xhr``, ``fetch``, ``eventsource``, ``websocket``,
        ``manifest``, ``other``.
        )r   rI   r7   r7   r8   rg     s    	zRequest.resourceTypec                 C   s   | j S )z/Return this request's method (GET, POST, etc.).)r   rI   r7   r7   r8   rX     s    zRequest.methodc                 C   s   | j S )z!Return post body of this request.)r   rI   r7   r7   r8   r     s    zRequest.postDatac                 C   s   | j S )zgReturn a dictionary of HTTP headers of this request.

        All header names are lower-case.
        r   rI   r7   r7   r8   r=     s    zRequest.headersr   c                 C   s   | j S )zReturn matching :class:`Response` object, or ``None``.

        If the response has not been received, return ``None``.
        )r~   rI   r7   r7   r8   r     s    zRequest.responsec                 C   s   | j S )zReturn a matching :class:`~pyppeteer.frame_manager.frame` object.

        Return ``None`` if navigating to error page.
        )r   rI   r7   r7   r8   r     s    zRequest.framec                 C   s   | j S )z3Whether this request is driving frame's navigation.)r   rI   r7   r7   r8   rf     s    zRequest.isNavigationRequestc                 C   s   t  | jS )a  Return chain of requests initiated to fetch a resource.

        * If there are no redirects and request was successful, the chain will
          be empty.
        * If a server responds with at least a single redirect, then the chain
          will contain all the requests that were redirected.

        ``redirectChain`` is shared between all the requests of the same chain.
        )copyrr   rI   r7   r7   r8   r     s    zRequest.redirectChainc                 C   s   | j s
dS d| j iS )a:  Return error text.

        Return ``None`` unless this request was failed, as reported by
        ``requestfailed`` event.

        When request failed, this method return dictionary which has a
        ``errorText`` field, which contains human-readable error message, e.g.
        ``'net::ERR_RAILED'``.
        Nr   )r   rI   r7   r7   r8   failure  s    
zRequest.failure)	overridesr   c              
      s   |du ri }| j std| jr(tdd| _d| ji}|| z| jd|I dH  W n. ty } ztt	| W Y d}~n
d}~0 0 dS )aY  Continue request with optional request overrides.

        To use this method, request interception should be enabled by
        :meth:`pyppeteer.page.Page.setRequestInterception`. If request
        interception is not enabled, raise ``NetworkError``.

        ``overrides`` can have the following fields:

        * ``url`` (str): If set, the request url will be changed.
        * ``method`` (str): If set, change the request method (e.g. ``GET``).
        * ``postData`` (str): If set, change the post data or request.
        * ``headers`` (dict): If set, change the request HTTP header.
        N$Request interception is not enabled.Request is already handled.Tr`   rc   )
r   r   r   r   updater   rD   r[   r   r\   )r4   r   optr]   r7   r7   r8   	continue_  s    

zRequest.continue_)r   r   c              
      s  | j drdS | jstd| jr,tdd| _|drZt|d trZ|d d}n
|d}i }|dr|d D ]}|d | ||	 < qz|d	r|d	 |d
< |rd|vrt
||d< |dd}t|d}d| d| }d}|| }	|D ]}|	 | d||  | }	q|	| }	|	d}
|r:|
| }
t|
d}z | jd| j|dI dH  W n0 ty } ztt| W Y d}~n
d}~0 0 dS )aV  Fulfills request with given response.

        To use this, request interception should by enabled by
        :meth:`pyppeteer.page.Page.setRequestInterception`. Request
        interception is not enabled, raise ``NetworkError``.

        ``response`` is a dictionary which can have the following fields:

        * ``status`` (int): Response status code, defaults to 200.
        * ``headers`` (dict): Optional response headers.
        * ``contentType`` (str): If set, equals to setting ``Content-Type``
          response header.
        * ``body`` (str|bytes): Optional response body.
        data:Nr   r   Tbodyutf-8r=   ZcontentTypezcontent-typezcontent-lengthr      rd   z	HTTP/1.1  z
z: asciirc   )r`   rawResponse)r   
startswithr   r   r   rj   r?   r@   encoderC   lenstatusTextsbase64	b64encodedecoder   rD   r   r[   r   r\   )r4   r   ZresponseBodyre   headerZ
statusCodeZ
statusTextZ
statusLineCRLFtextZresponseBufferr   r]   r7   r7   r8   respond  sJ    



zRequest.respondfailed)	errorCoder   c              
      s   t | }|std|| js(td| jr6tdd| _z"| jdt| j|dI dH  W n. t	y } zt
t| W Y d}~n
d}~0 0 dS )ar  Abort request.

        To use this, request interception should be enabled by
        :meth:`pyppeteer.page.Page.setRequestInterception`.
        If request interception is not enabled, raise ``NetworkError``.

        ``errorCode`` is an optional error code string. Defaults to ``failed``,
        could be one of the following:

        - ``aborted``: An operation was aborted (due to user action).
        - ``accessdenied``: Permission to access a resource, other than the
          network, was denied.
        - ``addressunreachable``: The IP address is unreachable. This usually
          means that there is no route to the specified host or network.
        - ``blockedbyclient``: The client chose to block the request.
        - ``blockedbyresponse``: The request failed because the request was
          delivered along with requirements which are not met
          ('X-Frame-Options' and 'Content-Security-Policy' ancestor check,
          for instance).
        - ``connectionaborted``: A connection timeout as a result of not
          receiving an ACK for data sent.
        - ``connectionclosed``: A connection was closed (corresponding to a TCP
          FIN).
        - ``connectionfailed``: A connection attempt failed.
        - ``connectionrefused``: A connection attempt was refused.
        - ``connectionreset``: A connection was reset (corresponding to a TCP
          RST).
        - ``internetdisconnected``: The Internet connection has been lost.
        - ``namenotresolved``: The host name could not be resolved.
        - ``timedout``: An operation timed out.
        - ``failed``: A generic failure occurred.
        zUnknown error code: {}r   r   Trc   )r`   errorReasonN)errorReasonsr   formatr   r   r   rD   r!   r   r[   r   r\   )r4   r   r   r]   r7   r7   r8   abort(  s    !
zRequest.abort)N)r   )r   r   r   r   r   r   r@   rT   r!   r   r   r   propertyri   rg   rX   r   r   r=   r   r   rf   r   r   r   r   r   r7   r7   r7   r8   r   P  s:   
;r   ZAbortedZAccessDeniedZAddressUnreachableZBlockedByClientZBlockedByResponseZConnectionAbortedZConnectionClosedZConnectionFailedZConnectionRefusedZConnectionResetZInternetDisconnectedZNameNotResolvedZTimedOutZFailed)ZabortedZaccessdeniedZaddressunreachableZblockedbyclientZblockedbyresponseZconnectionabortedZconnectionclosedZconnectionfailedZconnectionrefusedZconnectionresetZinternetdisconnectedZnamenotresolvedZtimedoutr   c                
   @   s  e Zd ZdZd#eeeeeef e	e	eddddZ
ee ddddZeed	d
dZee	d	ddZeed	ddZeed	ddZeeedf d	ddZed	ddZee d	ddZed	ddZed	ddZeed	ddZee	d	dd Zee	d	d!d"ZdS )$r   zCResponse class represents responses which are received by ``Page``.N)r   r   r   r=   r{   r|   r}   r   c                 C   s   || _ || _|| _| j j | _| j j | _|j| _|| _	|| _
dd | D | _i | _|rt|d |d |d |d |d | _d S )Nc                 S   s   i | ]\}}|  |qS r7   r   r   r7   r7   r8   r   |  r   z%Response.__init__.<locals>.<dictcomp>subjectNameissuer	validFromvalidToprotocol)r   _request_statusrm   create_future_contentPromise_bodyLoadedPromiseri   r   _fromDiskCache_fromServiceWorkerr>   r   _securityDetailsSecurityDetails)r4   r   r   r   r=   r{   r|   r}   r7   r7   r8   r   o  s$    zResponse.__init__rJ   c                 C   s   | j | d S rZ   )r   
set_resultrM   r7   r7   r8   r     s    z"Response._bodyLoadedPromiseFulfillrH   c                 C   s   | j S )zURL of the response.r   rI   r7   r7   r8   ri     s    zResponse.urlc                 C   s$   | j dkp"d| j   kodkS   S )z@Return bool whether this request is successful (200-299) or not.r   r   i+  r   rI   r7   r7   r8   ok  s    zResponse.okc                 C   s   | j S )zStatus code of the response.r   rI   r7   r7   r8   r     s    zResponse.statusc                 C   s   | j S )zfReturn dictionary of HTTP headers of this response.

        All header names are lower-case.
        r   rI   r7   r7   r8   r=     s    zResponse.headersr   c                 C   s   | j S )zReturn security details associated with this response.

        Security details if the response was received over the secure
        connection, or `None` otherwise.
        )r   rI   r7   r7   r8   r}     s    zResponse.securityDetailsc                    sZ   | j I d H }t|tr|| jdd| jjiI d H }|dd}|drVt	|S |S )NzNetwork.getResponseBodyrw   r   r   Zbase64Encoded)
r   r?   r[   r   rD   r   rq   rj   r   	b64decode)r4   resultr   r   r7   r7   r8   _bufread  s    


zResponse._bufreadc                 C   s"   | j  s| jj|  S | j S )z<Return awaitable which resolves to bytes with response body.)r   doner   rm   rn   r   rI   r7   r7   r8   buffer  s    
zResponse.bufferc                    s*   |   I dH }t|tr|S |dS dS )z)Get text representation of response body.Nr   )r   r?   r@   r   r4   contentr7   r7   r8   r     s    
zResponse.textc                    s   |   I dH }t|S )z)Get JSON representation of response body.N)r   jsonloadsr   r7   r7   r8   r     s    zResponse.jsonc                 C   s   | j S )z%Get matching :class:`Request` object.)r   rI   r7   r7   r8   r     s    zResponse.requestc                 C   s   | j p| jjS )zReturn ``True`` if the response was served from cache.

        Here `cache` is either the browser's disk cache or memory cache.
        )r   r   rx   rI   r7   r7   r8   	fromCache  s    zResponse.fromCachec                 C   s   | j S )z?Return ``True`` if the response was served by a service worker.)r   rI   r7   r7   r8   r|     s    zResponse.fromServiceWorker)N)r   r   r   r   r   r   r   r   r@   rT   r   r   r[   r   r   ri   r   r   r=   r   r}   bytesr   r   r   r   r!   r   r   r   r|   r7   r7   r7   r8   r   l  s8    r   )r   r   c                 C   s   |  dd}zt|}W n ty*   Y n0 ||  d|  di d}|dst| d  }|  |D ].}| d | }| }|dv rql||d |< qlt	|S )	zGenerate request hash.ri   rd   rX   r   )ri   rX   r   r=   r   r=   )acceptZrefererz/x-devtools-emulate-network-conditions-client-idcookie)
rj   r
   r[   r   listkeyssortrC   r   dumps)r   ZnormalizedURL_hashr=   r   ZheaderValuer7   r7   r8   rs     s(    
rs   c                   @   s   e Zd ZdZeeeeeddddZeedddZeedd	d
Z	eedddZ
eedddZeedddZdS )r   z6Class represents responses which are received by page.N)r   r   r   r   r   r   c                 C   s"   || _ || _|| _|| _|| _d S rZ   )_subjectName_issuer
_validFrom_validTo	_protocol)r4   r   r   r   r   r   r7   r7   r8   r     s
    zSecurityDetails.__init__rH   c                 C   s   | j S )z:Return the subject to which the certificate was issued to.)r   rI   r7   r7   r8   r     s    zSecurityDetails.subjectNamec                 C   s   | j S )z;Return a string with the name of issuer of the certificate.)r   rI   r7   r7   r8   r     s    zSecurityDetails.issuerc                 C   s   | j S )z<Return UnixTime of the start of validity of the certificate.)r   rI   r7   r7   r8   r     s    zSecurityDetails.validFromc                 C   s   | j S )z:Return UnixTime of the end of validity of the certificate.)r   rI   r7   r7   r8   r     s    zSecurityDetails.validToc                 C   s   | j S )z;Return string of with the security protocol, e.g. "TLS1.2".)r   rI   r7   r7   r8   r     s    zSecurityDetails.protocol)r   r   r   r   r@   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r     s   r   ContinuezSwitching Protocols
ProcessingOKCreatedAcceptedzNon-Authoritative Informationz
No ContentzPartial ContentzMulti-StatuszAlready ReportedzIM UsedzMultiple ChoiceszMoved PermanentlyFoundz	See OtherzNot Modifiedz	Use ProxyzSwitch ProxyzTemporary RedirectzPermanent RedirectzBad RequestUnauthorizedzPayment Required	Forbiddenz	Not FoundzMethod Not AllowedzNot AcceptablezProxy Authentication RequiredzRequest TimeoutConflictGonezLength RequiredzPrecondition FailedzPayload Too LargezURI Too LongzUnsupported Media TypezRange Not SatisfiablezExpectation FailedzI'm a teapotzMisdirected RequestzUnprocessable EntityLockedzFailed DependencyzUpgrade RequiredzPrecondition RequiredzToo Many RequestszRequest Header Fields Too LargezUnavailable For Legal ReasonszInternal Server ErrorzNot ImplementedzBad GatewayzService UnavailablezGateway TimeoutzHTTP Version Not SupportedzVariant Also NegotiateszInsufficient StoragezLoop DetectedzNot ExtendedzNetwork Authentication Required)<100Z101Z102Z200Z201Z202Z203Z204Z206Z207Z208Z209Z300Z301Z302Z303Z304Z305Z306Z307Z308Z400Z401Z402Z403Z404Z405Z406Z407Z408Z409Z410Z411Z412Z413Z414Z415Z416Z417Z418Z421Z422Z423424Z426Z428Z429Z431Z451500Z501Z502Z503Z504Z505Z506Z507Z508Z510Z511).r   rU   r   collectionsr   r   r   loggingtypesr   typingr   r   r   r   r   r	   urllib.parser
   Zpyeer   Zpyppeteer.connectionr   Zpyppeteer.errorsr   Zpyppeteer.frame_managerr   r   Zpyppeteer.helperr   Zpyppeteer.multimapr   r   	getLoggerr   r\   r   objectr   r   r   r!   r@   rs   r   r   r7   r7   r7   r8   <module>   s    
  4  p &