
    h                        d dl mZ d dlZd dlmZmZmZmZmZ d dl	m
Z
mZ d dlmZmZ d dlmZ d dlmZmZ erd dlmZ d dlmZ  G d	 d
e      Z	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZ G d de      Zy)    )annotationsN)TYPE_CHECKINGListOptionalSequenceType)AsyncCallbackManagerForToolRunCallbackManagerForToolRun)	BaseModelField)BaseBrowserTool)aget_current_pageget_current_page)Pagec                  P    e Zd ZU dZ edd      Zded<    ed d	      Zd
ed<   y)GetElementsToolInputzInput for GetElementsTool..z;CSS selector, such as '*', 'div', 'p', 'a', #id, .classname)descriptionstrselectorc                     dgS )N	innerText r       o/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/tools/playwright/get_elements.py<lambda>zGetElementsToolInput.<lambda>   s     r   z.Set of attributes to retrieve for each element)default_factoryr   z	List[str]
attributesN)__name__
__module____qualname____doc__r   r   __annotations__r   r   r   r   r   r      s5    $QHc  "-DJ	 r   r   c                >  K   | j                  |       d{   }g }|D ]r  }i }|D ]U  }|dk(  r|j                          d{   }n|j                  |       d{   }|=|j                         dk7  sQ|||<   W |sb|j	                  |       t |S 7 7 V7 >w)-Get elements matching the given CSS selector.Nr    query_selector_all
inner_textget_attributestripappend	pager   r   elementsresultselementresult	attributevals	            r   _aget_elementsr4   $   s      ,,X66HG 
## 	(IK'+2+=+=+?%?#11)<<399;"#4$'y!	( NN6"
# N 7 &@<sE   BB*BBBBB$B8	BBBBc                    | j                  |      }g }|D ]b  }i }|D ]E  }|dk(  r|j                         }n|j                  |      }|-|j                         dk7  sA|||<   G |sR|j	                  |       d |S )r$   r   r%   r&   r,   s	            r   _get_elementsr6   8   s     &&x0HG 
## 	(IK'%,%7%7%9++I6399;"#4$'y!	( NN6"
# Nr   c                  x    e Zd ZU dZdZded<   dZded<   eZded<   d	gd
f	 	 	 	 	 	 	 ddZ	d	gd
f	 	 	 	 	 	 	 ddZ
y
)GetElementsToolzJTool for getting elements in the current web page matching a CSS selector.get_elementsr   namezIRetrieve elements in the current web page matching the given CSS selectorr   zType[BaseModel]args_schemar   Nc                    | j                   t        d| j                         t        | j                         }t	        |||      }t        j                  |d      S )Use the tool.z$Synchronous browser not provided to Fensure_ascii)sync_browser
ValueErrorr:   r   r6   jsondumpsselfr   r   run_managerr-   r/   s         r   _runzGetElementsTool._runU   sV     $CDII;OPP 1 12h
;zz'66r   c                   K   | j                   t        d| j                         t        | j                          d{   }t	        |||       d{   }t        j                  |d      S 7 07 w)r=   Nz%Asynchronous browser not provided to Fr>   )async_browserrA   r:   r   r4   rB   rC   rD   s         r   _arunzGetElementsTool._arunc   si      %DTYYKPQQ&t'9'9::&tXzBBzz'66 ;Bs"   =A4A0 A4A2A42A4)r   r   r   Sequence[str]rF   z#Optional[CallbackManagerForToolRun]returnr   )r   r   r   rK   rF   z(Optional[AsyncCallbackManagerForToolRun]rL   r   )r   r   r    r!   r:   r"   r   r   r;   rG   rJ   r   r   r   r8   r8   L   s    TD#S   $8K7
 &1M;?	77 "7 9	7
 
7" &1M@D	77 "7 >	7
 
7r   r8   )r-   	AsyncPager   r   r   rK   rL   
List[dict])r-   SyncPager   r   r   rK   rL   rN   )
__future__r   rB   typingr   r   r   r   r   langchain_core.callbacksr	   r
   pydanticr   r   )langchain_community.tools.playwright.baser   *langchain_community.tools.playwright.utilsr   r   playwright.async_apir   rM   playwright.sync_apirO   r   r4   r6   r8   r   r   r   <module>rX      s    "  @ @ & E
 64
9 

"0=(
!/<(#7o #7r   