a
    >xd1                     @   s   d 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 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 eeZG dd deZG dd deZdS )zBrowser module.    N)Popen)SimpleNamespace)Any	AwaitableCallableDictListOptional)EventEmitter)
Connection)BrowserError)Page)Targetc                       s  e Zd ZdZedddddZd6eee e	e	e
e eg ed f edd fd	d
Zee
e dddZddddZddddZeed dddZeddddZed7eee e	e	e
e eg ed f ed dddZeddddZeddddZeddd d!Zeedd"d#Zedd$d%Ze
e edd&d'Zee  dd(d)Z!ee dd*d+Z"edd,d-Z#edd.d/Z$ddd0d1Z%ddd2d3Z&edd4d5Z'  Z(S )8BrowserzBrowser class.

    A Browser object is created when pyppeteer connects to chrome, either
    through :func:`~pyppeteer.launcher.launch` or
    :func:`~pyppeteer.launcher.connect`.
    targetcreatedtargetdestroyedtargetchangeddisconnected)TargetCreatedTargetDestroyedTargetChangedDisconnectedN)
connection
contextIdsignoreHTTPSErrorssetDefaultViewportprocesscloseCallbackkwargsreturnc           
         s   t    | _| _| _g  _| _td  d fdd}|rJ| _n| _t	 d  _
t  _|D ]}	t	 |	 j|	< qht  _ j fdd  jd j  jd j  jd j d S )	Nr   c                     s    j j } | d  | S N)_connection_loopcreate_future
set_result)futself I/var/www/html/Ranjet/env/lib/python3.9/site-packages/pyppeteer/browser.py_dummy_callback0   s    
z)Browser.__init__.<locals>._dummy_callbackc                      s     tjjS r!   )emitr   Eventsr   r)   r'   r)   r*   <lambda>A       z"Browser.__init__.<locals>.<lambda>zTarget.targetCreatedzTarget.targetDestroyedzTarget.targetInfoChanged)super__init___ignoreHTTPSErrors_setDefaultViewport_process_screenshotTaskQueuer"   r   _closeCallbackBrowserContext_defaultContextdict	_contexts_targetsZsetClosedCallbackon_targetCreated_targetDestroyed_targetInfoChanged)
r(   r   r   r   r   r   r   r   r+   	contextId	__class__r'   r*   r1   $   s*    

zBrowser.__init__r    c                 C   s   | j S )zReturn process of this browser.

        If browser instance is created by :func:`pyppeteer.launcher.connect`,
        return ``None``.
        )r4   r'   r)   r)   r*   r   G   s    zBrowser.processr7   c                    s   t d |  I dH S )zm[Deprecated] Miss spelled method.

        Use :meth:`createIncognitoBrowserContext` method instead.
        zWcreateIncogniteBrowserContext is deprecated. Use createIncognitoBrowserContext instead.N)loggerwarningcreateIncognitoBrowserContextr'   r)   r)   r*   createIncogniteBrowserContextP   s    z%Browser.createIncogniteBrowserContextc                    s2   | j dI dH }|d }t| |}|| j|< |S )a  Create a new incognito browser context.

        This won't share cookies/cache with other browser contexts.

        .. code::

            browser = await launch()
            # Create a new incognito browser context.
            context = await browser.createIncognitoBrowserContext()
            # Create a new page in a pristine context.
            page = await context.newPage()
            # Do stuff
            await page.goto('https://example.com')
            ...
        zTarget.createBrowserContextNbrowserContextId)r"   sendr7   r:   )r(   objrG   contextr)   r)   r*   rE   [   s
    

z%Browser.createIncognitoBrowserContextc                 C   s   | j gdd | j D  S )zReturn a list of all open browser contexts.

        In a newly created browser, this will return a single instance of
        ``[BrowserContext]``
        c                 S   s   g | ]}|qS r)   r)   ).0rJ   r)   r)   r*   
<listcomp>x   r/   z+Browser.browserContexts.<locals>.<listcomp>)r8   r:   valuesr'   r)   r)   r*   browserContextsq   s    zBrowser.browserContexts)r@   r   c                    s*   | j dd|iI d H  | j|d  d S )NzTarget.disposeBrowserContextrG   )r"   rH   r:   pop)r(   r@   r)   r)   r*   _disposeContextz   s    zBrowser._disposeContext)r   r   r   appModer   r   r   r   c                    s,   t | |||||}| dddiI dH  |S )zCreate browser object.zTarget.setDiscoverTargetsZdiscoverTN)r   rH   )r   r   r   rQ   r   r   r   browserr)   r)   r*   create   s
    
zBrowser.create)eventr   c                    s   |d  d}|r,| jv r, j| }n j}t| fdd j j j jj}d  j	v rpt
d| j	d < |jI d H r tjj| |tjj| d S )N
targetInforG   c                      s    j S r!   )r"   ZcreateSessionr)   r(   rU   r)   r*   r.      r/   z(Browser._targetCreated.<locals>.<lambda>targetIdz&target should not exist before create.)getr:   r8   r   r2   r3   r5   r"   r#   r;   r   _initializedPromiser,   r   r-   r   r7   )r(   rT   rG   rJ   targetr)   rV   r*   r=      s(    
	zBrowser._targetCreatedc                    s^   | j |d  }| j |d = |  |jI d H rP| tjj| |jtjj| |	d d S )NrW   F)
r;   Z_closedCallbackrY   r,   r   r-   r   browserContextr7   Z_initializedCallback)r(   rT   rZ   r)   r)   r*   r>      s    zBrowser._targetDestroyedc                    sn   | j |d d }|s td|j}|j}||d  |rj||jkrj| tjj	| |j
tjj	| d S )NrU   rW   z,target should exist before targetInfoChanged)r;   rX   r   url_isInitializedr?   r,   r   r-   r   r[   r7   )r(   rT   rZ   ZpreviousURLZwasInitializedr)   r)   r*   r?      s    zBrowser._targetInfoChangedc                 C   s   | j jS )zReturn websocket end point url.)r"   r\   r'   r)   r)   r*   
wsEndpoint   s    zBrowser.wsEndpointc                    s   | j  I dH S )z4Make new page on this browser and return its object.N)r8   newPager'   r)   r)   r*   r_      s    zBrowser.newPagec                    s   ddi}|r||d< | j d|I d H d}| j|}|d u rJtd|jI d H s^td| I d H }|d u r|td|S )Nr\   zabout:blankrG   zTarget.createTargetrW   z!Failed to create target for page.zFailed to create page.)r"   rH   rX   r;   r   rY   page)r(   r@   optionsrW   rZ   r`   r)   r)   r*   _createPageInContext   s"    
zBrowser._createPageInContextc                 C   s   dd | j  D S )zGet a list of all active targets inside the browser.

        In case of multiple browser contexts, the method will return a list
        with all the targets in all browser contexts.
        c                 S   s   g | ]}|j r|qS r)   )r]   )rK   rZ   r)   r)   r*   rL      s   z#Browser.targets.<locals>.<listcomp>)r;   rM   r'   r)   r)   r*   targets   s    zBrowser.targetsc                    s<   g }|   D ]*}|jdkr| I dH }|r|| q|S )zGet all pages of this browser.

        Non visible pages, such as ``"background_page"``, will not be listed
        here. You can find then using :meth:`pyppeteer.target.Target.page`.
        r`   N)rc   typer`   append)r(   pagesrZ   r`   r)   r)   r*   rf      s    
zBrowser.pagesc                    s   |   I dH }|d S )zGet version of the browser.Nproduct)_getVersionr(   versionr)   r)   r*   rj      s    zBrowser.versionc                    s   |   I dH }|ddS )zReturn browser's original user agent.

        .. note::
            Pages can override browser user agent with
            :meth:`pyppeteer.page.Page.setUserAgent`.
        N	userAgent )rh   rX   ri   r)   r)   r*   rk      s    zBrowser.userAgentc                    s   |   I dH  dS )z0Close connections and terminate browser process.N)r6   r'   r)   r)   r*   close   s    zBrowser.closec                    s   | j  I dH  dS )zDisconnect browser.N)r"   Zdisposer'   r)   r)   r*   
disconnect   s    zBrowser.disconnectc                 C   s   | j dS )NzBrowser.getVersion)r"   rH   r'   r)   r)   r*   rh     s    zBrowser._getVersion)NN)NN))__name__
__module____qualname____doc__r   r-   r   r   strboolr	   r   r   r   r   r1   propertyr   rF   rE   rN   rP   staticmethodrS   r   r=   r>   r?   r^   r   r_   rb   r   rc   rf   rj   rk   rm   rn   rh   __classcell__r)   r)   rA   r*   r      sZ   	  
#  
		
r   c                       s   e Zd ZdZeddddZeee dd fdd	Z	e
e d
ddZed
ddZed
ddZed
ddZeed
ddZdd
ddZ  ZS )r7   a  BrowserContext provides multiple independent browser sessions.

    When a browser is launched, it has a single BrowserContext used by default.
    The method `browser.newPage()` creates a page in the default browser
    context.

    If a page opens another page, e.g. with a ``window.open`` call, the popup
    will belong to the parent page's browser context.

    Pyppeteer allows creation of "incognito" browser context with
    ``browser.createIncognitoBrowserContext()`` method.
    "incognito" browser contexts don't write any browser data to disk.

    .. code::

        # Create new incognito browser context
        context = await browser.createIncognitoBrowserContext()
        # Create a new page inside context
        page = await context.newPage()
        # ... do stuff with page ...
        await page.goto('https://example.com')
        # Dispose context once it's no longer needed
        await context.close()
    r   r   r   )r   r   r   N)rR   r@   r   c                    s   t    || _|| _d S r!   )r0   r1   _browser_id)r(   rR   r@   rA   r)   r*   r1   %  s    
zBrowserContext.__init__r    c                 C   s,   g }| j  D ]}|j| kr|| q|S )z?Return a list of all active targets inside the browser context.)rx   rc   r[   re   )r(   rc   rZ   r)   r)   r*   rc   *  s
    
zBrowserContext.targetsc                 C   s   t d |  S )z[[Deprecated] Miss spelled method.

        Use :meth:`isIncognito` method instead.
        z3isIncognite is deprecated. Use isIncognito instead.)rC   rD   isIncognitor'   r)   r)   r*   isIncognite2  s    zBrowserContext.isIncognitec                 C   s
   t | jS )zReturn whether BrowserContext is incognito.

        The default browser context is the only non-incognito browser context.

        .. note::
            The default browser context cannot be closed.
        )rt   ry   r'   r)   r)   r*   rz   =  s    zBrowserContext.isIncognitoc                    s   | j | jI dH S )z)Create a new page in the browser context.N)rx   rb   ry   r'   r)   r)   r*   r_   G  s    zBrowserContext.newPagec                 C   s   | j S )z3Return the browser this browser context belongs to.)rx   r'   r)   r)   r*   rR   K  s    zBrowserContext.browserc                    s*   | j du rtd| j| j I dH  dS )zClose the browser context.

        All the targets that belongs to the browser context will be closed.

        .. note::
            Only incognito browser context can be closed.
        Nz&Non-incognito profile cannot be closed)ry   r   rx   rP   r'   r)   r)   r*   rm   P  s    
zBrowserContext.close)ro   rp   rq   rr   r   r-   r   r	   rs   r1   r   r   rc   rt   r{   rz   r   r_   ru   rR   rm   rw   r)   r)   rA   r*   r7     s   
r7   )rr   logging
subprocessr   typesr   typingr   r   r   r   r   r	   Zpyeer
   Zpyppeteer.connectionr   Zpyppeteer.errorsr   Zpyppeteer.pager   Zpyppeteer.targetr   	getLoggerro   rC   r   r7   r)   r)   r)   r*   <module>   s    
 q