
    &th5                         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j        e          Z G d de          Z G d de          ZdS )zBrowser module.    N)Popen)SimpleNamespace)Any	AwaitableCallableDictListOptional)EventEmitter)
Connection)BrowserError)Page)Targetc                   n    e Zd ZdZ edddd          Z	 	 d'ded	ee         d
e	de
e         de
e         deg ed         f         deddf fdZede
e         fd            Zd(dZd(dZeded         fd            ZdeddfdZe	 	 d'ded	ee         d
e	de
e         de
e         deg ed         f         dedd fd            ZdeddfdZdeddfdZdeddfdZedefd            ZdefdZde
e         defdZdee          fd Z!dee         fd!Z"defd"Z#defd#Z$d)d$Z%d)d%Z&defd&Z' xZ(S )*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defaultViewportprocesscloseCallbackkwargsreturnc                    
 t                                                       | _        | _        | _        g  _        | _         j        j        
dt          d          f
fd}|r| _	        n| _	        t           d            _        t                       _        |D ]}	t           |	           j        |	<   t                       _         j                             fd            j                            d
 fd            j                            d
 fd            j                            d
 fd	           d S )
Nr!   c                  Z                                     } |                     d            | S N)create_future
set_result)futloops    e/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/pyppeteer/browser.py_dummy_callbackz)Browser.__init__.<locals>._dummy_callback1   s+    $$&&CNN4   J    c                  L                          t          j        j                  S r$   )emitr   Eventsr   selfs   r)   <lambda>z"Browser.__init__.<locals>.<lambda>B   s    DIIgn9:: r+   zTarget.targetCreatedc                 T                                             |                     S r$   )create_task_targetCreatedeventr(   r0   s    r)   r1   z"Browser.__init__.<locals>.<lambda>F   s#    $**4+>+>u+E+EFF r+   zTarget.targetDestroyedc                 T                                             |                     S r$   )r3   _targetDestroyedr5   s    r)   r1   z"Browser.__init__.<locals>.<lambda>J   s#    $**4+@+@+G+GHH r+   zTarget.targetInfoChangedc                 T                                             |                     S r$   )r3   _targetInfoChangedr5   s    r)   r1   z"Browser.__init__.<locals>.<lambda>N   s#    $**4+B+B5+I+IJJ r+   )super__init___ignoreHTTPSErrors_defaultViewport_process_screenshotTaskQueue_connection_loopr   _closeCallbackBrowserContext_defaultContextdict	_contexts_targetssetClosedCallbackon)r0   r   r   r   r   r   r   r    r*   	contextIdr(   	__class__s   `         @r)   r<   zBrowser.__init__$   s   
 	"3 /*,!%%	4 	 	 	 	 	 	
  	2"/D"1D-dD9948FF# 	H 	HI(6tY(G(GDN9%%+/66**::::	
 	
 	
 	"FFFFF	
 	
 	
 	$HHHHH	
 	
 	
 	&JJJJJ	
 	
 	
 	
 	
r+   c                     | j         S )zReturn process of this browser.

        If browser instance is created by :func:`pyppeteer.launcher.connect`,
        return ``None``.
        )r?   r/   s    r)   r   zBrowser.processQ   s     }r+   rD   c                 n   K   t                               d           |                                  d{V S )zm[Deprecated] Miss spelled method.

        Use :meth:`createIncognitoBrowserContext` method instead.
        zWcreateIncogniteBrowserContext is deprecated. Use createIncognitoBrowserContext instead.N)loggerwarningcreateIncognitoBrowserContextr/   s    r)   createIncogniteBrowserContextz%Browser.createIncogniteBrowserContextZ   sI      
 	9	
 	
 	
 77999999999r+   c                    K   | j                             d           d{V }|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)rA   sendrD   rG   )r0   objrT   contexts       r)   rQ   z%Browser.createIncognitoBrowserContexte   s_        $))*GHHHHHHHH12 '788+2'(r+   c                 Z    | j         gd | j                                        D             z   S )zReturn a list of all open browser contexts.

        In a newly created browser, this will return a single instance of
        ``[BrowserContext]``
        c                     g | ]}|S  rZ   ).0rW   s     r)   
<listcomp>z+Browser.browserContexts.<locals>.<listcomp>   s    (X(X(XW(X(X(Xr+   )rE   rG   valuesr/   s    r)   browserContextszBrowser.browserContexts{   s2     $%(X(X@U@U@W@W(X(X(XXXr+   rK   c                    K   | j                             dd|i           d {V  | j                            |d            d S )NzTarget.disposeBrowserContextrT   )rA   rU   rG   pop)r0   rK   s     r)   _disposeContextzBrowser._disposeContext   sm      ##$B	E
   	 	 	 	 	 	 	 	9d+++++r+   c                 n   K   t          | |||||          }|                     dddi           d{V  |S )zCreate browser object.zTarget.setDiscoverTargetsdiscoverTN)r   rU   )r   r   r   r   r   r   r    browsers           r)   createzBrowser.create   sX       *j2C)7MC Coo9J;MNNNNNNNNNr+   r6   c           	         K   |d                              d          }|r| j        v r j        |         }n j        }t          | fd j         j         j         j        j                  }d          j	        v rt          d          | j	        d         <   |j         d {V rL                     t          j        j        |           |                    t           j        j        |           d S d S )N
targetInforT   c                  8     j                                       S r$   )rA   createSession)r0   rg   s   r)   r1   z(Browser._targetCreated.<locals>.<lambda>   s    D$22:>> r+   targetIdz&target should not exist before create.)getrG   rE   r   r=   r>   r@   rA   rB   rH   r   _initializedPromiser-   r   r.   r   rD   )r0   r6   rT   rW   targetrg   s   `    @r)   r4   zBrowser._targetCreated   s'     <(
%>>*<== 	+ 0DN B Bn%56GG*G>>>>>#!%"
 
 j!T]22GHHH06j,-+++++++ 	FIIgn2F;;;LL.<fEEEEE	F 	Fr+   c                 V  K   | j         |d                  }| j         |d         = |                                 |j         d {V rO|                     t          j        j        |           |j                            t          j        j        |           |	                    d           d S )Nrj   F)
rH   _closedCallbackrl   r-   r   r.   r   browserContextrD   _initializedCallback)r0   r6   rm   s      r)   r8   zBrowser._targetDestroyed   s      uZ01M%
+,   +++++++ 	VIIgn4f===!&&~'<'LfUUU##E*****r+   c                   K   | j                             |d         d                   }|st          d          |j        }|j        }|                    |d                    |r\||j        k    rS|                     t          j        j	        |           |j
                            t          j        j	        |           d S d S d S )Nrg   rj   z,target should exist before targetInfoChanged)rH   rk   r   url_isInitializedr:   r-   r   r.   r   rp   rD   )r0   r6   rm   previousURLwasInitializeds        r)   r:   zBrowser._targetInfoChanged   s      ""5#6z#BCC 	OMNNNj.!!%"5666 	TkVZ77IIgn2F;;;!&&~'<'JFSSSSS	T 	T77r+   c                     | j         j        S )zReturn websocket end point url.)rA   rs   r/   s    r)   
wsEndpointzBrowser.wsEndpoint   s     ##r+   c                 D   K   | j                                          d{V S )z4Make new page on this browser and return its object.N)rE   newPager/   s    r)   rz   zBrowser.newPage   s-      )11333333333r+   c                 l  K   ddi}|r||d<   | j                             d|           d {V                     d          }| j                            |          }|t	          d          |j         d {V st	          d          |                                 d {V }|t	          d          |S )Nrs   zabout:blankrT   zTarget.createTargetrj   z!Failed to create target for page.zFailed to create page.)rA   rU   rk   rH   r   rl   page)r0   rK   optionsrj   rm   r|   s         r)   _createPageInContextzBrowser._createPageInContext   s      -( 	4*3G&'*//!7, , , , , , , ,-0S__ 	""8,,>BCCC/////// 	DBCCC[[]]""""""<7888r+   c                 H    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                      g | ]}|j         	|S rZ   )rt   )r[   rm   s     r)   r\   z#Browser.targets.<locals>.<listcomp>   s/     * * *6(* * * *r+   )rH   r]   r/   s    r)   targetszBrowser.targets   s0    * *T]%9%9%;%; * * * 	*r+   c                    K   t                      }| j        D ]/}|                    |                                 d{V            0|S )aC  Get 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`.

        In case of multiple browser contexts, this method will return a list
        with all the pages in all browser contexts.
        N)listr^   extendpages)r0   r   rW   s      r)   r   zBrowser.pages   sW       !FF+ 	0 	0GLLw}}......////r+   c                 J   K   |                                   d{V }|d         S )zGet version of the browser.Nproduct)_getVersionr0   versions     r)   r   zBrowser.version   s4      ((********y!!r+   c                 f   K   |                                   d{V }|                    dd          S )zReturn browser's original user agent.

        .. note::
            Pages can override browser user agent with
            :meth:`pyppeteer.page.Page.setUserAgent`.
        N	userAgent )r   rk   r   s     r)   r   zBrowser.userAgent   s?       ((********{{;+++r+   c                 >   K   |                                   d{V  dS )z0Close connections and terminate browser process.N)rC   r/   s    r)   closezBrowser.close  s0      !!###########r+   c                    K   | j                                          d{V  | j                                        D ]}|j        s|                    d           dS )zDisconnect browser.NF)rA   disposerH   r]   rt   rq   )r0   rm   s     r)   
disconnectzBrowser.disconnect  st      &&(((((((((m**,, 	3 	3F( 3++E222	3 	3r+   c                 6    | j                             d          S )NzBrowser.getVersion)rA   rU   r/   s    r)   r   zBrowser._getVersion  s    $$%9:::r+   )NN)r!   rD   r!   N))__name__
__module____qualname____doc__r   r.   r   r	   strboolr
   r   r   r   r   r   r<   propertyr   rR   rQ   r^   ra   staticmethodre   r4   r8   r:   rx   r   rz   r~   r   r   r   r   r   r   r   r   __classcell__rL   s   @r)   r   r      s         _%)%#	  F -1@D+
 +
: +
49 +
$(+
;CD>+
"5/+
 !)Yt_)< =+
 	+
 $(	+
 +
 +
 +
 +
 +
Z %    X	: 	: 	: 	:   , Y&6!7 Y Y Y XY,s ,t , , , ,  15DH	 	 	c 	(,	?G~	&uo	 %-R4-@$A	  #		 (1		 	 	 \	F$ F4 F F F F2+D +T + + + +	Td 	Tt 	T 	T 	T 	T $C $ $ $ X$4t 4 4 4 4HSM d    "*f * * * *T$Z    "s " " " "
, , , , ,$ $ $ $3 3 3 3;Y ; ; ; ; ; ; ; ;r+   r   c                        e Zd ZdZ eddd          Zdedee         dd	f fd
Z	de
e         fdZde
e         fdZdefdZdefdZdefdZedefd            ZddZ xZS )rD   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   rd   rK   r!   Nc                 d    t                                                       || _        || _        d S r$   )r;   r<   _browser_id)r0   rd   rK   rL   s      r)   r<   zBrowserContext.__init__3  s+    r+   c                     g }| j                                         D ]"}|j        | k    r|                    |           #|S )z?Return a list of all active targets inside the browser context.)r   r   rp   append)r0   r   rm   s      r)   r   zBrowserContext.targets8  sJ    m++-- 	' 	'F$,,v&&&r+   c                    K   g }|                                  D ]>}|j        dk    r1|                                 d{V }|r|                    |           ?|S )zReturn list of all open pages.

        Non-visible pages, such as ``"background_page"``, will not be listed
        here. You can find them using :meth:`pyppeteer.target.Target.page`.
        r|   N)r   typer|   r   )r0   r   rm   r|   s       r)   r   zBrowserContext.pages@  sp       llnn 	' 	'F{f$$#[[]]****** 'LL&&&r+   c                 ^    t                               d           |                                 S )z[[Deprecated] Miss spelled method.

        Use :meth:`isIncognito` method instead.
        z3isIncognite is deprecated. Use isIncognito instead.)rO   rP   isIncognitor/   s    r)   isIncognitezBrowserContext.isIncogniteO  s3    
 	'	
 	
 	
 !!!r+   c                 *    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.
        )r   r   r/   s    r)   r   zBrowserContext.isIncognitoZ  s     DH~~r+   c                 P   K   | j                             | j                   d{V S )z)Create a new page in the browser context.N)r   r~   r   r/   s    r)   rz   zBrowserContext.newPaged  s0      ]77AAAAAAAAAr+   c                     | j         S )z3Return the browser this browser context belongs to.)r   r/   s    r)   rd   zBrowserContext.browserh  s     }r+   c                    K   | j         t          d          | j                            | j                    d{V  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)r   r   r   ra   r/   s    r)   r   zBrowserContext.closem  sO       8GHHHm++DH55555555555r+   r   )r   r   r   r   r   r.   r   r
   r   r<   r	   r   r   r   r   r   r   r   rz   r   rd   r   r   r   s   @r)   rD   rD     sP        2 _%)%  F HSM d      
f    T$Z    	"T 	" 	" 	" 	"T    Bt B B B B     X
6 
6 
6 
6 
6 
6 
6 
6r+   rD   )r   logging
subprocessr   typesr   typingr   r   r   r   r	   r
   pyeer   pyppeteer.connectionr   pyppeteer.errorsr   pyppeteer.pager   pyppeteer.targetr   	getLoggerr   rO   r   rD   rZ   r+   r)   <module>r      sG            ! ! ! ! ! ! A A A A A A A A A A A A A A A A       + + + + + + ) ) ) ) ) )       # # # # # #		8	$	${; {; {; {; {;l {; {; {;|d6 d6 d6 d6 d6\ d6 d6 d6 d6 d6r+   