
    &th                     >   d Z ddlZddlm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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 ddlmZmZ ddlmZmZmZ ddl m!Z!  ej"        e#          Z$ G d de          Z% G d de&          Z' G d de&          Z(dZ)dS )zFrame Manager module.    N)OrderedDict)SimpleNamespace)Any	AwaitableDict	GeneratorListOptionalSetUnion)EventEmitter)helper)
CDPSession)ElementHandle)NetworkError)ExecutionContextJSHandle)ElementHandleError	PageErrorTimeoutError)
merge_dictc                       e Zd ZdZ eddddd          Zded	ed
eddf 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d         fd            Zded         fdZdeded         fdZdededdfdZdeddfdZde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d*d"Zd#edefd$Z	 d+d%ed&edefd'Zd,d)Z  xZ!S )-FrameManagerzFrameManager class.frameattachedframenavigatedframedetachedlifecycleeventframenavigatedwithindocument)FrameAttachedFrameNavigatedFrameDetachedLifecycleEventFrameNavigatedWithinDocumentclient	frameTreepagereturnNc                     t                                                       | _        | _        t	                       _        d _        t                       _        |	                    d fd           |	                    d fd           |	                    d fd           |	                    d fd	           |	                    d
 fd           |	                    d fd           |	                    d fd           |	                    d fd           |	                    d fd            
                    |           dS )zMake new frame manager.NzPage.frameAttachedc                                          |                     dd          |                     dd                    S )NframeId parentFrameId)_onFrameAttachedgeteventselfs    k/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/pyppeteer/frame_manager.py<lambda>z'FrameManager.__init__.<locals>.<lambda>.   s:     5 5ii	2..		/20N0N!P !P     zPage.frameNavigatedc                 T                         |                     d                    S )Nframe)_onFrameNavigatedr.   r/   s    r2   r3   z'FrameManager.__init__.<locals>.<lambda>2   s!     6 6uyy7I7I J J r4   zPage.navigatedWithinDocumentc                 |                         |                     d          |                     d                    S )Nr*   url)_onFrameNavigatedWithinDocumentr.   r/   s    r2   r3   z'FrameManager.__init__.<locals>.<lambda>4   s4     D Dii	**EIIe,<,<! ! r4   zPage.frameDetachedc                 T                         |                     d                    S Nr*   )_onFrameDetachedr.   r/   s    r2   r3   z'FrameManager.__init__.<locals>.<lambda>8   s!     5 5eii	6J6J K K r4   zPage.frameStoppedLoadingc                 T                         |                     d                    S r<   )_onFrameStoppedLoadingr.   r/   s    r2   r3   z'FrameManager.__init__.<locals>.<lambda>:   s&     ; ;ii	**! ! r4   zRuntime.executionContextCreatedc                 T                         |                     d                    S )Ncontext)_onExecutionContextCreatedr.   r/   s    r2   r3   z'FrameManager.__init__.<locals>.<lambda>>   s&     ? ?ii	**!, !, r4   z!Runtime.executionContextDestroyedc                 T                         |                     d                    S )NexecutionContextId)_onExecutionContextDestroyedr.   r/   s    r2   r3   z'FrameManager.__init__.<locals>.<lambda>A   s'     A Aii 455!7 !7 r4   z Runtime.executionContextsClearedc                 ,                                     S N)_onExecutionContextsClearedr/   s    r2   r3   z'FrameManager.__init__.<locals>.<lambda>D   s     @ @ B B r4   zPage.lifecycleEventc                 .                         |           S rG   )_onLifecycleEventr/   s    r2   r3   z'FrameManager.__init__.<locals>.<lambda>F   s     6 6u = = r4   )super__init___client_pager   _frames
_mainFramedict_contextIdToContexton_handleFrameTree)r1   r$   r%   r&   	__class__s   `   r2   rL   zFrameManager.__init__$   s   
0;+/@D 		&P P P P	 	 	 			'JJJJ	L 	L 	L		0   	 	 	 			&KKKK	M 	M 	M		,   	 	 	 			3, , , ,	- 	- 	- 			57 7 7 7	8 	8 	8 			4BBBB	D 	D 	D		'====	? 	? 	? 	i(((((r4   r0   c                     | j                             |d                   }|sd S |                    |d         |d                    |                     t          j        j        |           d S )Nr*   loaderIdname)rO   r.   rJ   emitr   Eventsr"   )r1   r0   r6   s      r2   rJ   zFrameManager._onLifecycleEventJ   sh      y!122 	Fj 15=AAA		,%4e<<<<<r4   r*   c                     | j                             |          }|sd S |                                 |                     t          j        j        |           d S rG   )rO   r.   _onLoadingStoppedrY   r   rZ   r"   r1   r*   r6   s      r2   r?   z#FrameManager._onFrameStoppedLoadingQ   sV      )) 	F!!!		,%4e<<<<<r4   c                     |d         }d|v r"|                      |d         |d                    |                     |           d|vrd S |d         D ]}|                     |           d S )Nr6   parentIdidchildFrames)r-   r7   rT   )r1   r%   r6   childs       r2   rT   zFrameManager._handleFrameTreeX   s    '"!!dj!   	u%%%	))F}- 	) 	)E!!%((((	) 	)r4   Framec                     | j         S )zReturn main frame.)rP   r1   s    r2   	mainFramezFrameManager.mainFramee   s     r4   c                 N    t          | j                                                  S )zReturn all frames.)listrO   valuesre   s    r2   frameszFrameManager.framesj   s    DL''))***r4   c                 6    | j                             |          S )z%Return :class:`Frame` of ``frameId``.)rO   r.   )r1   r*   s     r2   r6   zFrameManager.framen   s    |(((r4   r,   c                     || j         v rd S | j                             |          }t          | j        ||          }|| j         |<   |                     t
          j        j        |           d S rG   )rO   r.   rc   rM   rY   r   rZ   r   )r1   r*   r,   parentFramer6   s        r2   r-   zFrameManager._onFrameAttachedr   sh    dl""Fl&&}55dlK99 %W		,%3U;;;;;r4   framePayloadc                 P   |                     d           }|r| j        }n.| j                             |                     dd                    }|s|st          d          |r|j        D ]}|                     |           |                     dd          }|rQ|r(| j                            |j        d            ||_        nt          | j	        d |          }|| j        |<   || _        |
                    |           |                     t          j        j        |           d S )Nr_   r`   r+   zGWe either navigate top level or have old version of the navigated frame)r.   rP   rO   r   ra   _removeFramesRecursivelypop_idrc   rM   
_navigatedrY   r   rZ   r    )r1   rn   isMainFramer6   rb   rr   s         r2   r7   zFrameManager._onFrameNavigatedz   sP   &**:666 	AOEEL$$\%5%5dB%?%?@@E 	6u 	6 5 6 6 6  	5* 5 5--e4444 tR(( 		$ 7  D111		 dlD#66 %DL#DO 	&&&		,%4e<<<<<r4   r9   c                     | j                             |          }|sd S |                    |           |                     t          j        j        |           |                     t          j        j        |           d S rG   )rO   r.   _navigatedWithinDocumentrY   r   rZ   r#   r    )r1   r*   r9   r6   s       r2   r:   z,FrameManager._onFrameNavigatedWithinDocument   sr      )) 	F&&s+++		,%BEJJJ		,%4e<<<<<r4   c                 l    | j                             |          }|r|                     |           d S d S rG   )rO   r.   rp   r]   s      r2   r=   zFrameManager._onFrameDetached   sC      )) 	1))%00000	1 	1r4   contextPayloadc                 j                         d          r*d                              d          rd         d         }nd } j                             |          }dt          dt          f fd}t	           j        ||          }| j        d         <   |r|                    |           d S d S )NauxDatar*   objr'   c                 f                         d                   }                    ||           S )Nr`   )executionContextByIdcreateJSHandle)r{   rA   rx   r1   s     r2   _createJSHandlez@FrameManager._onExecutionContextCreated.<locals>._createJSHandle   s1    //t0DEEG&&w444r4   r`   )r.   rO   r   r   r   rM   rR   _addExecutionContext)r1   rx   r*   r6   r   rA   s   ``    r2   rB   z'FrameManager._onExecutionContextCreated   s    y)) 	y)--i88	$Y/	:GGG  ))	5 	5( 	5 	5 	5 	5 	5 	5 	5 #L	
 
 :A !56 	0&&w/////	0 	0r4   rD   c                     | j                             |          }|sd S | j         |= |j        }|r|                    |           d S d S rG   )rR   r.   r6   _removeExecutionContext)r1   rD   rA   r6   s       r2   rE   z)FrameManager._onExecutionContextDestroyed   se    *../ABB 	F$%78 	3))'22222	3 	3r4   c                     | j                                         D ] }|j        }|r|                    |           !| j                                          d S rG   )rR   ri   r6   r   clear)r1   rA   r6   s      r2   rH   z(FrameManager._onExecutionContextsCleared   s_    /6688 	7 	7GME 7--g666 &&(((((r4   	contextIdc                 b    | j                             |          }|st          d|           |S )z*Get stored ``ExecutionContext`` by ``id``.z*INTERNAL ERROR: missing context with id = )rR   r.   r   )r1   r   rA   s      r2   r}   z!FrameManager.executionContextById   sD    *..y99 	$HYHH   r4   rA   remoteObjectc                     |t                      }|                    d          dk    rt          || j        || j        |           S t          || j        |          S )z@Create JS handle associated to the context id and remote object.Nsubtypenode)rQ   r.   r   rM   rN   r   )r1   rA   r   s      r2   r~   zFrameManager.createJSHandle   sa     66LI&&&00 $,!%T3 3 3|<<<r4   r6   c                     |j         D ]}|                     |           |                                 | j                            |j        d            |                     t          j        j	        |           d S rG   )
ra   rp   _detachrO   rq   rr   rY   r   rZ   r!   )r1   r6   rb   s      r2   rp   z%FrameManager._removeFramesRecursively   sr    & 	1 	1E))%0000D)))		,%3U;;;;;r4   r'   NrG   )r6   rc   r'   N)"__name__
__module____qualname____doc__r   rZ   r   r   r   rL   rJ   strr?   rT   propertyr
   rf   r	   rj   r6   r-   rQ   r7   r:   r=   rB   rE   rH   r   r}   r   r~   rp   __classcell__)rU   s   @r2   r   r      s       _%'%'%C  F$)z $)d $)# $)$ $) $) $) $) $) $)L=t = = = = ==c =d = = = =)$ )4 ) ) ) ) 8G,    X+W + + + +)S )Xg%6 ) ) ) )< <C <D < < < <=d =t = = = =@=s = = = = = =1 1 1 1 1 1
0 0$ 0 0 0 003s 3t 3 3 3 3) ) ) )c 6F     -1= =&6 =%)=5== = = =< < < < < < < <r4   r   c                      e Zd ZdZdeded          deddfdZdeddfd	Z	deddfd
Z
dee         ddfdZdee         fdZdededefdZdddedededefdZdedee         fdZdefdZdedee         fdZdedededefdZdedededee         fdZdedee         fdZeZeZeZeZeZdefdZ deddfdZ!e"defd            Z#e"defd             Z$e"ded          fd!            Z%e"ded          fd"            Z&defd#Z'd$edefd%Z(d&edefd'Z)d&edefd(Z*dFded&e+d)eddfd*Z,deddfd+Z-deddfd,Z.ded-edee         fd.Z/deddfd/Z0dFded0ed&e+d)eddf
d1Z1	 dFd2e2ee3e4f         d&e+ded)ede2e5d3f         f
d4Z6dFded&e+d)edd3fd5Z7dFd6ed&e+d)edd3fd7Z8dFded&e+ded)edd3f
d8Z9	 dFd9ed:ed&e+d)edd3f
d;Z:defd<Z;d=e+ddfd>Z<d?eddfd@Z=dAedBeddfdCZ>dGdDZ?dGdEZ@dS )Hrc   z_Frame class.

    Frame objects can be obtained via :attr:`pyppeteer.page.Page.mainFrame`.
    r$   rm   r*   r'   Nc                 d   || _         || _        d| _        d| _        || _        d | _        d | _        |                     d            t                      | _	        d| _
        t                      | _        t                      | _        | j        r!| j        j                            |            d S d S )Nr+   Fc                     d S rG    _s    r2   r3   z Frame.__init__.<locals>.<lambda>   s     r4   )rM   _parentFrame_url	_detachedrr   _documentPromise_contextResolveCallback_setDefaultContextset
_waitTasks	_loaderId_lifecycleEvents_childFramesadd)r1   r$   rm   r*   s       r2   rL   zFrame.__init__   s    '	9='5~$%%%),*-%%(+ 	5*..t44444	5 	5r4   rA   c                 B    |j         r|                     |           d S d S rG   
_isDefaultr   r1   rA   s     r2   r   zFrame._addExecutionContext  s1     	-##G,,,,,	- 	-r4   c                 B    |j         r|                     d            d S d S rG   r   r   s     r2   r   zFrame._removeExecutionContext  s1     	*##D)))))	* 	*r4   c                 (    |Z                      |           d  _          j        D ]3} j        j                            |                                           4d S d  _         j        j                                         _         fd _         d S )Nc                     d S rG   r   r   s    r2   r3   z*Frame._setDefaultContext.<locals>.<lambda>  s    T r4   c                 8    j                             |           S rG   )_contextPromise
set_result)_contextr1   s    r2   r3   z*Frame._setDefaultContext.<locals>.<lambda>  s    !5!@!@!J!J r4   )	r   r   rM   _loopcreate_taskrerunr   create_futurer   )r1   rA   waitTasks   `  r2   r   zFrame._setDefaultContext  s    ((111+9>D( O A A"..x~~/?/?@@@@A A %)D!#'<#5#C#C#E#ED JJJJ (((r4   c                     K   | j          d{V S )zReturn execution context of this frame.

        Return :class:`~pyppeteer.execution_context.ExecutionContext`
        associated to this frame.
        N)r   re   s    r2   executionContextzFrame.executionContext  s#       ))))))))r4   pageFunctionargsc                    K   |                                   d{V }|t          d           |j        |g|R   d{V S )ziExecute function on this frame.

        Details see :meth:`pyppeteer.page.Page.evaluateHandle`.
        Nzthis frame has no context.)r   r   evaluateHandle)r1   r   r   rA   s       r2   r   zFrame.evaluateHandle!  sl      
 --////////?8999+W+L@4@@@@@@@@@@r4   F)
force_exprr   c                   K   |                                   d{V }|t          d           |j        |g|R d|i d{V S )zhEvaluate pageFunction on this frame.

        Details see :meth:`pyppeteer.page.Page.evaluate`.
        NExecutionContext is None.r   )r   r   evaluate)r1   r   r   r   rA   s        r2   r   zFrame.evaluate+  s       --////////?$%@AAA%W%88 8 8,68 8 8 8 8 8 8 8 	8r4   selectorc                 t   K   |                                   d{V }|                    |           d{V }|S )zuGet element which matches `selector` string.

        Details see :meth:`pyppeteer.page.Page.querySelector`.
        N)	_documentquerySelectorr1   r   documentvalues       r2   r   zFrame.querySelector7  sS      
 )))))))),,X66666666r4   c                   K   | j         r| j         S |                                  d {V }|t          d          |                    d           d {V                                 }|| _         |t          d          |S )NzNo context exists.r   zCould not find `document`.)r   r   r   r   	asElement)r1   rA   r   s      r2   r   zFrame._document@  s        	)((--////////?0111!00<<<<<<<<GGII (8999r4   
expressionc                 t   K   |                                   d{V }|                    |           d{V }|S )zEvaluate the XPath expression.

        If there are no such elements in this frame, return an empty list.

        :arg str expression: XPath string to be evaluated.
        N)r   xpath)r1   r   r   r   s       r2   r   zFrame.xpathL  sQ       ))))))))nnZ00000000r4   c                 d   K   |                                   d{V } |j        ||g|R   d{V S )zExecute function on element which matches selector.

        Details see :meth:`pyppeteer.page.Page.querySelectorEval`.
        N)r   querySelectorEval)r1   r   r   r   r   s        r2   r   zFrame.querySelectorEvalW  sX       ))))))))/X/,NNNNNNNNNNNr4   c                 h   K   |                                   d{V } |j        ||g|R   d{V }|S )zExecute function on all elements which matches selector.

        Details see :meth:`pyppeteer.page.Page.querySelectorAllEval`.
        N)r   JJeval)r1   r   r   r   r   r   s         r2   querySelectorAllEvalzFrame.querySelectorAllEval`  s[       ))))))))%hohDtDDDDDDDDDr4   c                 t   K   |                                   d{V }|                    |           d{V }|S )zvGet all elements which matches `selector`.

        Details see :meth:`pyppeteer.page.Page.querySelectorAll`.
        N)r   querySelectorAllr   s       r2   r   zFrame.querySelectorAllj  sS      
 ))))))))//99999999r4   c                 `   K   |                      d                                           d{V S )z(Get the whole HTML contents of the page.z
() => {
  let retVal = '';
  if (document.doctype)
    retVal = new XMLSerializer().serializeToString(document.doctype);
  if (document.documentElement)
    retVal += document.documentElement.outerHTML;
  return retVal;
}
        N)r   stripre   s    r2   contentzFrame.content~  sJ      ]] 	$ EGG	 	 	 	 	 	 	 	 		r4   htmlc                 F   K   d}|                      ||           d{V  dS )zSet content to this page.zS
function(html) {
  document.open();
  document.write(html);
  document.close();
}
Nr   )r1   r   funcs      r2   
setContentzFrame.setContent  s;       mmD$'''''''''''r4   c                 8    | j                             dd          S )zGet frame name._namer+   )__dict__r.   re   s    r2   rX   z
Frame.name  s     }  "---r4   c                     | j         S )zGet url of the frame.r   re   s    r2   r9   z	Frame.url  s     yr4   c                     | j         S )zcGet parent frame.

        If this frame is main frame or detached frame, return ``None``.
        )r   re   s    r2   rm   zFrame.parentFrame  s       r4   c                 *    t          | j                  S )zGet child frames.)rh   r   re   s    r2   ra   zFrame.childFrames  s     D%&&&r4   c                     | j         S )zXReturn ``True`` if this frame is detached.

        Otherwise return ``False``.
        )r   re   s    r2   
isDetachedzFrame.isDetached  s    
 ~r4   filePathc                 >  K   t                               d           t          |          5 }|                                }ddd           n# 1 swxY w Y   |d                    |                    dd                    z  }|                     |           d{V S )z&[Deprecated] Inject file to the frame.zE`injectFile` method is deprecated. Use `addScriptTag` method instead.Nz/* # sourceURL= {} */
r+   )loggerwarningopenreadformatreplacer   )r1   r   fcontentss       r2   
injectFilezFrame.injectFile  s       = 	> 	> 	>(^^ 	 qvvxxH	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 +2283C3CD"3M3MNNN]]8,,,,,,,,,s   AAAoptionsc                 `  K   |                                   d{V }|t          d          d}d}t          |                    d          t                    rt|d         }||g}d|v r|                    |d                    	  |j        |  d{V                                 S # t          $ r}t          d| d          |d}~ww xY wt          |                    d	          t                    rt          |d	                   5 }|
                                }	ddd           n# 1 swxY w Y   |	d
                    |d	                             dd                    z   }	||	g}d|v r|                    |d                     |j        |  d{V                                 S t          |                    d          t                    rK||d         g}d|v r|                    |d                     |j        |  d{V                                 S t          d          )zeAdd script tag to this frame.

        Details see :meth:`pyppeteer.page.Page.addScriptTag`.
        Nr   a  
        async function addScriptUrl(url, type) {
            const script = document.createElement('script');
            script.src = url;
            if (type)
                script.type = type;
            const promise = new Promise((res, rej) => {
                script.onload = res;
                script.onerror = rej;
            });
            document.head.appendChild(script);
            await promise;
            return script;
        }a  
        function addScriptContent(content, type = 'text/javascript') {
            const script = document.createElement('script');
            script.type = type;
            script.text = content;
            let error = null;
            script.onerror = e => error = e;
            document.head.appendChild(script);
            if (error)
                throw error;
            return script;
        }r9   typezLoading script from  failedpathz//# sourceURL={}r   r+   r   <Provide an object with a `url`, `path` or `content` property)r   r   
isinstancer.   r   appendr   r   r   r   r   r   r   
ValueError)
r1   r   rA   addScriptUrladdScriptContentr9   r   er   r   s
             r2   addScriptTagzFrame.addScriptTag  s     
 --////////?$%@AAA gkk%((#.. 		L%.C #&D  GFO,,,L4g4d;;;;;;;#)++&% L L L Cs C C CDD!KL gkk&))3// 		"gfo&& $!6688$ $ $ $ $ $ $ $ $ $ $ $ $ $ $"4";";''b11#3 #3 3H$h/D  GFO,,,0'0$7777777ikk" gkk),,c22 	"$gi&89D  GFO,,,0'0$7777777ikk" JL L 	Ls*   !B( (
C2CCD,,D03D0c                   K   |                                   d{V }|t          d          d}d}t          |                    d          t                    r]|d         }	 |                    ||           d{V                                 S # t          $ r}t          d| d          |d}~ww xY wt          |                    d          t                    rt          |d                   5 }|	                                }ddd           n# 1 swxY w Y   |d	
                    |d                             d
d                    z   }|                    ||           d{V                                 S t          |                    d          t                    r4|                    ||d                    d{V                                 S t          d          )zcAdd style tag to this frame.

        Details see :meth:`pyppeteer.page.Page.addStyleTag`.
        Nr   a  
        async function (url) {
            const link = document.createElement('link');
            link.rel = 'stylesheet';
            link.href = url;
            const promise = new Promise((res, rej) => {
                link.onload = res;
                link.onerror = rej;
            });
            document.head.appendChild(link);
            await promise;
            return link;
        }a  
        async function (content) {
            const style = document.createElement('style');
            style.type = 'text/css';
            style.appendChild(document.createTextNode(content));
            const promise = new Promise((res, rej) => {
                style.onload = res;
                style.onerror = rej;
            });
            document.head.appendChild(style);
            await promise;
            return style;
        }r9   zLoading style from r   r   z/*# sourceURL={}*/r   r+   r   r   )r   r   r   r.   r   r   r   r   r   r   r   r   r   )	r1   r   rA   addStyleUrladdStyleContentr9   r   r   r   s	            r2   addStyleTagzFrame.addStyleTag  s     
 --////////?$%@AAA gkk%((#.. 	K%.CK%44& & & & & & & &'0y{{3% K K K Bc B B BCCJK gkk&))3// 	8gfo&& $!6688$ $ $ $ $ $ $ $ $ $ $ $ $ $ $"6"="=''b11#3 #3 3H!00+ + + + + + + +,5IKK8 gkk),,c22 	B!00!35 5 5 5 5 5 5 56?ikkB JL L 	Ls*   #-B 
B4B//B44DDDkwargsc                    K   t          ||          }|                     |           d{V }|st          d|z             |                    |           d{V  |                                 d{V  dS )zjClick element which matches ``selector``.

        Details see :meth:`pyppeteer.page.Page.click`.
        NNo node found for selector: )r   Jr   clickdispose)r1   r   r   r  handles        r2   r  zFrame.click>  s       Wf--vvh'''''''' 	G:XEFFFll7#########nnr4   c                    K   |                      |           d{V }|st          d|z             |                     d|           d{V  |                                 d{V  dS )zjFocus element which matches ``selector``.

        Details see :meth:`pyppeteer.page.Page.focus`.
        Nr  zelement => element.focus())r  r   r   r  r1   r   r  s      r2   focuszFrame.focusK  s      
 vvh'''''''' 	G:XEFFFmm8&AAAAAAAAAnnr4   c                    K   |                      |           d{V }|st          d|z             |                                 d{V  |                                 d{V  dS )ztMouse hover the element which matches ``selector``.

        Details see :meth:`pyppeteer.page.Page.hover`.
        Nr  )r  r   hoverr  r
  s      r2   r  zFrame.hoverV  s      
 vvh'''''''' 	G:XEFFFllnnnnr4   ri   c           	         K   |D ]9}t          |t                    s"t          d| dt          |                     :|                     |d|           d{V S )zlSelect options and return selected values.

        Details see :meth:`pyppeteer.page.Page.select`.
        zValues must be string. Found z	 of type al  
(element, values) => {
    if (element.nodeName.toLowerCase() !== 'select')
        throw new Error('Element is not a <select> element.');

    const options = Array.from(element.options);
    element.value = undefined;
    for (const option of options) {
        option.selected = values.includes(option.value);
        if (option.selected && !element.multiple)
            break;
    }

    element.dispatchEvent(new Event('input', { 'bubbles': true }));
    element.dispatchEvent(new Event('change', { 'bubbles': true }));
    return options.filter(option => option.selected).map(options => options.value)
}
        N)r   r   	TypeErrorr   r   )r1   r   ri   r   s       r2   selectzFrame.selecta  s      
  	 	EeS)) ;"; ;-1%[[; ;  
 ++ " %        	r4   c                    K   |                      |           d{V }|st          d|z             |                                 d{V  |                                 d{V  dS )znTap the element which matches the ``selector``.

        Details see :meth:`pyppeteer.page.Page.tap`.
        Nr  )r  r   tapr  r
  s      r2   r  z	Frame.tap  s      
 vvh'''''''' 	G:XEFFFjjllnnr4   textc                   K   t          ||          }|                     |           d{V }|"t          d                    |                    |                    ||           d{V  |                                 d{V  dS )zxType ``text`` on the element which matches ``selector``.

        Details see :meth:`pyppeteer.page.Page.type`.
        NzCannot find {} on this page)r   r   r   r   r   r  )r1   r   r  r   r  r  s         r2   r   z
Frame.type  s       Wf--))(33333333>9@@JJKKKkk$(((((((((nnr4   selectorOrFunctionOrTimeoutWaitTaskc           
      z   t          ||          }t          |t          t          f          r6| j        j                            t          j        |dz                      }|S t          |t                    s_| j        j        
                                }|                    t          dt          t          |                    z                        |S |st          j        |          r | j        ||g|R  S |                    d          r|                     ||          S |                     ||          S )zlWait until `selectorOrFunctionOrTimeout`.

        Details see :meth:`pyppeteer.page.Page.waitFor`.
          zUnsupported target type: z//)r   r   intfloatrM   r   r   asynciosleepr   r   set_exceptionr  r   r   	is_jsfuncwaitForFunction
startswithwaitForXPathwaitForSelector)r1   r  r   r   r  futs         r2   waitForzFrame.waitFor  sW    Wf--1C<@@ 	#'<#5#A#A9D@AA$C $CCJ5s;; 	,$2244Ci+D455667     J 	=6#$?@@ 	='4'+W=7;= = = =&11$77 	K$$%@'JJJ##$?IIIr4   c                 P    t          ||          }|                     |d|          S )zWait until element which matches ``selector`` appears on page.

        Details see :meth:`pyppeteer.page.Page.waitForSelector`.
        Fr   _waitForSelectorOrXPath)r1   r   r   r  s       r2   r"  zFrame.waitForSelector  s+     Wf--++HeWEEEr4   r   c                 P    t          ||          }|                     |d|          S )zWait until element which matches ``xpath`` appears on page.

        Details see :meth:`pyppeteer.page.Page.waitForXPath`.
        Tr&  )r1   r   r   r  s       r2   r!  zFrame.waitForXPath  s+     Wf--++E4AAAr4   c                     t          ||          }|                    dd          }|                    dd          }t          | |d||| j        j        g|R  S )zmWait until the function completes.

        Details see :meth:`pyppeteer.page.Page.waitForFunction`.
        timeout0u  pollingraffunction)r   r.   r  rM   r   )r1   r   r   r   r  r*  r,  s          r2   r  zFrame.waitForFunction  sj     Wf--++i%00++i//lJ*3-13 3 3 	3r4   selectorOrXPathisXPathc                 l   t          ||          }|                    dd          }t          |                    d                    }t          |                    d                    }|s|rdnd}d                    |rdnd	||rd
nd          }	d}
t	          | |
|	||| j        j        ||||
  
        S )Nr*  r+  visiblehiddenr-  mutationz	{} "{}"{}XPathr   z to be hiddenr+   a  
(selectorOrXPath, isXPath, waitForVisible, waitForHidden) => {
    const node = isXPath
        ? document.evaluate(selectorOrXPath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue
        : document.querySelector(selectorOrXPath);
    if (!node)
        return waitForHidden;
    if (!waitForVisible && !waitForHidden)
        return node;
    const element = /** @type {Element} */ (node.nodeType === Node.TEXT_NODE ? node.parentElement : node);

    const style = window.getComputedStyle(element);
    const isVisible = style && style.visibility !== 'hidden' && hasVisibleBoundingBox();
    const success = (waitForVisible === isVisible || waitForHidden === !isVisible)
    return success ? node : null

    function hasVisibleBoundingBox() {
        const rect = element.getBoundingClientRect();
        return !!(rect.top || rect.bottom || rect.width || rect.height);
    }
}
        )r   r.   boolr   r  rM   r   )r1   r/  r0  r   r  r*  waitForVisiblewaitForHiddenr,  title	predicates              r2   r'  zFrame._waitForSelectorOrXPath  s     Wf--++i//gkk)4455W[[2233(JNJ%%
"".GGJ,4OO"
 
	. L
 
 	
r4   c                 <   K   |                      d           d{V S )zGet title of the frame.z() => document.titleNr   re   s    r2   r9  zFrame.title  s+      ]]#9:::::::::r4   rn   c                     |                     dd          | _        |                     dd          | _        |                     dd          | _        d S )NrX   r+   r9   )r.   r   _navigationURLr   )r1   rn   s     r2   rs   zFrame._navigated  sL    !%%fb11
*..ub99 $$UB//			r4   r9   c                     || _         d S rG   r   )r1   r9   s     r2   rv   zFrame._navigatedWithinDocument  s    			r4   rW   rX   c                     |dk    r"|| _         | j                                         d S | j                            |           d S )Ninit)r   r   r   r   )r1   rW   rX   s      r2   rJ   zFrame._onLifecycleEvent  sJ    6>>%DN!'')))))!%%d+++++r4   c                 n    | j                             d           | j                             d           d S )NDOMContentLoadedload)r   r   re   s    r2   r\   zFrame._onLoadingStopped  s7    !!"4555!!&)))))r4   c                     | j         D ]$}|                    t          d                     %d| _        | j        r| j        j                            |            d | _        d S )Nz+waitForFunction failed: frame got detached.T)r   	terminater   r   r   r   remove)r1   r   s     r2   r   zFrame._detach  s|     	J 	JHGHHJ J J J 	8*11$777 r4   rG   r   )Ar   r   r   r   r   r
   r   rL   r   r   r   r   r   r   r   r   r6  r   r   r   r   r	   r   r   r   r   r   r  JxJevalJJr   r   r   r   rX   r9   rm   ra   r   r   r   r  rQ   r  r  r  r  r  r   r   r  r  r   r$  r"  r!  r  r'  r9  rs   rv   rJ   r\   r   r   r4   r2   rc   rc      s        
5z 58I 55"&5 5 5 5&-,< - - - - -*/? *D * * * *(3C*D     *1A(B * * * *A AS AX A A A A +0
8 
8 
83 
8s 
8#'
847
8 
8 
8 
8C H]4K    
 
 
 
 
	c 	d=.A 	 	 	 	O O3 O'*O/2O O O O3 c *-2:4.   s tM7J     	A	BE	B!Fs    	(S 	(T 	( 	( 	( 	( .c . . . X. S    X !Xg. ! ! ! X! 'T'] ' ' ' X'D    - - - - - -CL$ CL= CL CL CL CLJ:L :L- :L :L :L :Lx C $     	C 	D 	 	 	 		C 	D 	 	 	 	S 3 49    >	# 	$ 	 	 	 	 3 c D  %)    !%J J5c53I JJ-0J<?J9j01J J J J6F F Fd F"%F*4F F F FB B# B B"B'1B B B B
3 
3C 
3$ 
3"
3.1
36@
3 
3 
3 
3 150
 0
s 0
T 0
)-0
@C0
%/0
 0
 0
 0
d;S ; ; ; ;0t 0 0 0 0 0
C D    ,# ,S ,T , , , ,* * * *! ! ! ! ! !r4   rc   c                       e Zd ZdZdedededeeef         dede	j
        ded	d
fdZd	efdZded	d
fdZddZddZd
S )r  z>WaitTask class.

    Instance of this class is awaitable.
    r6   predicateBodyr9  r,  r*  loopr   r'   Nc                 ,    t          |t                    r|dvrt          d|           nGt          |t          t          f          r|dk    rt          d|           nt          d|           | _        | _        | _        | _        |st          j
        |          rd| d _        n
d|  _        | _        d _        d	 _        d	 _        |j                                         j                                         _        d
t(          t          t          f         dd f fd}|r- j                             | j                             _         j                                                                        _        d S )N)r-  r4  zUnknown polling: r   z(Cannot poll with non-positive interval: zUnknown polling option: zreturn (z
)(...args)zreturn Fr*  r'   c           	         K   t          j        | dz             d {V  d_                            t	          d d|  d                     d S )Nr  TzWaiting for z failed: timeout zms exceeds.)r  r  _timeoutErrorrE  r   )r*  r1   r9  s    r2   timerz WaitTask.__init__.<locals>.timerH  sw      -$/////////!%DNN<KuKKwKKK      r4   )r   r   r   r  r  _frame_polling_timeoutr   r   r  _predicateBody_args	_runCount_terminatedrO  r   r   r   promiser   r   _timeoutTimerr   _runningTask)	r1   r6   rK  r9  r,  r*  rL  r   rP  s	   `  `     r2   rL   zWaitTask.__init__*  s    gs## 		C111 !>W!>!>??? 2#u.. 	C!|| HwHH   
 AAABBB
 	<6#M22 	<"F]"F"F"FD";M";";D
 "T"""z//11	sEz!2 	t 	 	 	 	 	 	 	  	N!%!7!7dm8L8L!M!MD J224::<<@@r4   c              #   R   K   | j         E d{V }t          |t                    r||S )zMake this class **awaitable**.N)rX  r   	Exception)r1   results     r2   	__await__zWaitTask.__await__S  s;       L((((((fi(( 	Lr4   errorc                     d| _         | j                                        s| j                            |           |                                  dS )zTerminate this task.TN)rW  rX  doner   _cleanup)r1   r_  s     r2   rE  zWaitTask.terminateZ  sG    |  "" 	+L##E***r4   c                   K   | j         dz   x}| _         d}d}	 | j                                         d{V }|t          d           |j        t
          | j        | j        | j        g| j	        R   d{V }n# t          $ r}|}Y d}~nd}~ww xY w| j                                        rdS | j        s|| j         k    r|r|                                 d{V  dS 	 |s?|r=| j                            d|           d{V r|                                 d{V  dS n-# t           $ r  ||                                 d{V  Y dS w xY wt#          |t                     rd|j        d         v rdS t#          |t                     rd|j        d         v rdS |r| j                            |           n| j                            |           |                                  dS )zStart polling.   NzNo execution context.zs => !szExecution context was destroyedr   z%Cannot find context with specified id)rV  rQ  r   r   r   waitForPredicatePageFunctionrT  rR  rS  rU  r\  rX  ra  rW  r  r   r   r   r   r  r   rb  )r1   runCountsuccessr_  rA   r   s         r2   r   zWaitTask.reruna  s     $(NQ$664>&*	 K88::::::::G 78882G2,#	
         GG  	 	 	EEEEEE	 < 	F 	x4>99 (oo'''''''''F	 W +..y'BBBBBBBBoo''''''''' 	 	 	"oo'''''''''FF	 ul++ 	1UZ]BBF ul++ 	75:a=HHF 	-L&&u----L##G,,,s*   A A: :
BBB?D! !&E
Ec                     | j         r | j        s| j                                         | j        j                            |            d S rG   )rS  rO  rY  cancelrQ  r   rF  re   s    r2   rb  zWaitTask._cleanup  sJ    = 	(!3 	(%%'''%%d+++++r4   r   )r   r   r   r   rc   r   r   r  r  r  AbstractEventLoopr   rL   r   r^  r\  rE  r   rb  r   r4   r2   r  r  $  s         
'Ae 'AC 'A'A&+CHo'A@E'A0'A9<'AAE'A 'A 'A 'AR9    y T    7 7 7 7r, , , , , ,r4   r  a  
async function waitForPredicatePageFunction(predicateBody, polling, timeout, ...args) {
  const predicate = new Function('...args', predicateBody);
  let timedOut = false;
  if (timeout)
    setTimeout(() => timedOut = true, timeout);
  if (polling === 'raf')
    return await pollRaf();
  if (polling === 'mutation')
    return await pollMutation();
  if (typeof polling === 'number')
    return await pollInterval(polling);

  /**
   * @return {!Promise<*>}
   */
  function pollMutation() {
    const success = predicate.apply(null, args);
    if (success)
      return Promise.resolve(success);

    let fulfill;
    const result = new Promise(x => fulfill = x);
    const observer = new MutationObserver(mutations => {
      if (timedOut) {
        observer.disconnect();
        fulfill();
      }
      const success = predicate.apply(null, args);
      if (success) {
        observer.disconnect();
        fulfill(success);
      }
    });
    observer.observe(document, {
      childList: true,
      subtree: true,
      attributes: true
    });
    return result;
  }

  /**
   * @return {!Promise<*>}
   */
  function pollRaf() {
    let fulfill;
    const result = new Promise(x => fulfill = x);
    onRaf();
    return result;

    function onRaf() {
      if (timedOut) {
        fulfill();
        return;
      }
      const success = predicate.apply(null, args);
      if (success)
        fulfill(success);
      else
        requestAnimationFrame(onRaf);
    }
  }

  /**
   * @param {number} pollInterval
   * @return {!Promise<*>}
   */
  function pollInterval(pollInterval) {
    let fulfill;
    const result = new Promise(x => fulfill = x);
    onTimeout();
    return result;

    function onTimeout() {
      if (timedOut) {
        fulfill();
        return;
      }
      const success = predicate.apply(null, args);
      if (success)
        fulfill(success);
      else
        setTimeout(onTimeout, pollInterval);
    }
  }
}
)*r   r  collectionsr   loggingtypesr   typingr   r   r   r   r	   r
   r   r   pyeer   	pyppeteerr   pyppeteer.connectionr   pyppeteer.element_handler   pyppeteer.errorsr   pyppeteer.execution_contextr   r   r   r   r   pyppeteer.utilr   	getLoggerr   r   r   objectrc   r  re  r   r4   r2   <module>rx     s      # # # # # #  ! ! ! ! ! ! N N N N N N N N N N N N N N N N N N N N             + + + + + + 2 2 2 2 2 2 ) ) ) ) ) ) B B B B B B B B H H H H H H H H H H % % % % % %		8	$	$O< O< O< O< O<< O< O< O<dv! v! v! v! v!F v! v! v!ry, y, y, y, y,v y, y, y,xW    r4   