
    "+2j
                     b    d Z ddlZddlZddlZddlZdZd Zd ZddZ	ddZ
 G d d	      Zd
 Zy)zUMinimal CDP driver over websocket-client for a single page target. (agent, port 9223)    Nzhttp://localhost:9223c                     t         j                  j                  t        | z   d      5 }t	        j
                  |j                         j                               cd d d        S # 1 sw Y   y xY w)N
   timeout)urllibrequesturlopenCDP_HTTPjsonloadsreaddecode)pathrs     /tmp/amdwork/cdp.pyhttp_getr      sM    			4		< -zz!&&(//+,- - -s   1A$$A-c                  h    t        d      D  cg c]  } | j                  d      dk(  s|  c} S c c} w )Nz/jsontypepage)r   get)ts    r   
list_pagesr      s*    (D!AEE&MV,CADDDs   //c                     t               }| r"|D ]  }| |j                  d      xs dv s|c S  |r"|D ]  }|j                  d      xs ddv s|c S  |r|d   S d S )Nurl )about:blankr   r   )r   r   )url_sub
want_blankpagesps       r   find_targetr!      sw    LE 	A155<-2.	  	Ae"'::	 58&$&    c                     t        d| z         S )Nz
/json/new?)r   )r   s    r   
new_targetr$      s    L3&''r"   c                   :    e Zd Zd Zd	dZd Zd Zd
dZd Zd Z	y)Pagec                 L    t        j                  |dd       | _        d| _        y )N   )r   max_sizer   )	websocketcreate_connectionws_id)selfws_urls     r   __init__zPage.__init__   s    --fb4Pr"   Nc                    | xj                   dz  c_         | j                   }| j                  j                  t        j                  |||xs i d             t        j
                         |z   }t        j
                         |k  r| j                  j                  |t        j
                         z
         	 t        j                  | j                  j                               }|j                  d      |k(  r*d|v rt        d|d|d         |j                  di       S t        j
                         |k  rt        d	|z        # t        $ r}t        d|z        d }~ww xY w)
N   )idmethodparamszrecv failed: %sr3   errorz
CDP error z: resultztimeout waiting for %s)r-   r,   sendr   dumpstime
settimeoutr   recv	ExceptionRuntimeErrorr   )r.   r4   r5   r   middeadlinemsges           r   r8   z	Page.send!   s   AhhTZZsfRT UVW99;(iikH$GGx$))+56:jj0 wwt}#c>&VS\'RSSwwx,, iikH$ 3f<==  :"#4q#899:s   7-E 	E$EE$c                 j    | j                  d       | j                  d       | j                  d       y )NzPage.enablezRuntime.enablez
DOM.enabler8   r.   s    r   enablezPage.enable1   s'    		- 		"#		,r"   c                 *    | j                  dd|i      S )NzPage.navigater   rD   )r.   r   s     r   navigatezPage.navigate5   s    yy5#,77r"   c                     | j                  d|d|d|      }d|v r't        dt        j                  |d         d d z         |j	                  di       j	                  d	      S )
NzRuntime.evaluateT)
expressionreturnByValueawaitPromiser   exceptionDetailszJS exception: i  r7   value)r8   r>   r   r9   r   )r.   exprawait_promiser   r   s        r   evalz	Page.eval7   sz    II(!)+
 	  
 "/$**Q?Q=R2STXUX2YYZZuuXr"&&w//r"   c                     | j                  dddid      }dd l}t        |d      5 }|j                  |j	                  |d                d d d        |S # 1 sw Y   |S xY w)	NzPage.captureScreenshotformatpngr(   r   r   wbdata)r8   base64openwrite	b64decode)r.   r   r   rW   fs        r   
screenshotzPage.screenshot@   s`    II.50A2IN$ 	1GGF$$QvY/0	1	1s   $AAc                 V    | j                   j                          y # t        $ r Y y w xY w)N)r,   closer=   rE   s    r   r^   z
Page.closeF   s    WW]]_$s    	(()Nr(   )Fr(   )
__name__
__module____qualname__r0   r8   rF   rH   rQ   r\   r^    r"   r   r&   r&      s%    >  80r"   r&   c                     t        | d         S )NwebSocketDebuggerUrl)r&   )targets    r   attachrf   J   s    -.//r"   )NF)r   )__doc__r   r:   urllib.requestr   r*   r
   r   r   r!   r$   r&   rf   rb   r"   r   <module>ri      s;    [ ! ! "-E
'(+ +Z0r"   