§
    šŠtjö*  ã                   ó  — d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ erddlmZ ddlmZ dd	lmZ dd
lmZmZmZ  ej        e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        ZdS )zQLoader that uses Playwright to load a page, then uses unstructured to parse html.é    N)ÚABCÚabstractmethod)ÚTYPE_CHECKINGÚAsyncIteratorÚDictÚIteratorÚListÚOptionalÚUnion)ÚDocument)Ú
BaseLoader)ÚBrowser)ÚPage)ÚResponse)r   r   r   c            	       ób   — e Zd ZdZedddddddefd	„¦   «         Zedd
dddddefd„¦   «         ZdS )ÚPlaywrightEvaluatorzÁAbstract base class for all evaluators.

    Each evaluator should take a page, a browser instance, and a response
    object, process the page as necessary, and return the resulting text.
    Úpager   Úbrowserr   Úresponser   Úreturnc                 ó   — dS )a  Synchronously process the page and return the resulting text.

        Args:
            page: The page to process.
            browser: The browser instance.
            response: The response from page.goto().

        Returns:
            text: The text content of the page.
        N© ©Úselfr   r   r   s       úq/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/document_loaders/url_playwright.pyÚevaluatezPlaywrightEvaluator.evaluate   s	   € ð 	ˆó    Ú	AsyncPageÚAsyncBrowserÚAsyncResponsec              ƒ   ó
   K  — dS )a  Asynchronously process the page and return the resulting text.

        Args:
            page: The page to process.
            browser: The browser instance.
            response: The response from page.goto().

        Returns:
            text: The text content of the page.
        Nr   r   s       r   Úevaluate_asyncz"PlaywrightEvaluator.evaluate_async+   s   è è € ð 	ˆr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   r"   r   r   r   r   r      s›   € € € € € ðð ð ð˜Vð ¨ið À:ð ÐRUð ð ð ñ „^ðð ðØðØ*8ðØDSðà	ðð ð ñ „^ðð ð r   r   c                   óh   — e Zd ZdZddeee                  fd„Zddddd	d
defd„Zddddd	ddefd„Z	dS )ÚUnstructuredHtmlEvaluatorz@Evaluate the page HTML content using the `unstructured` library.NÚremove_selectorsc                 óZ   — 	 ddl }n# t          $ r t          d¦  «        ‚w xY w|| _        dS )z%Initialize UnstructuredHtmlEvaluator.r   NzQunstructured package not found, please install it with `pip install unstructured`)ÚunstructuredÚImportErrorr*   )r   r*   r,   s      r   Ú__init__z"UnstructuredHtmlEvaluator.__init__?   sX   € ð	ØÐÐÐÐøÝð 	ð 	ð 	Ýð-ñô ð ð	øøøð !1ˆÔÐÐó   ‚ ‡!r   r   r   r   r   r   r   c                 óN  — ddl m} | j        pg D ]W}|                     |¦  «                             ¦   «         }|D ]+}|                     ¦   «         r|                     d¦  «         Œ,ŒX|                     ¦   «         } ||¬¦  «        }d                     d„ |D ¦   «         ¦  «        S )z3Synchronously process the HTML content of the page.r   ©Úpartition_htmlúelement => element.remove()©Útextú

c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   ©r'   ©Ú.0Úels     r   ú
<listcomp>z6UnstructuredHtmlEvaluator.evaluate.<locals>.<listcomp>W   ó   € Ð7Ð7Ð7¨�C ™GœGÐ7Ð7Ð7r   ©	Úunstructured.partition.htmlr2   r*   ÚlocatorÚallÚ
is_visibler   ÚcontentÚjoin©	r   r   r   r   r2   ÚselectorÚelementsÚelementÚpage_sources	            r   r   z"UnstructuredHtmlEvaluator.evaluateK   sÎ   € à>Ð>Ð>Ð>Ð>Ð>àÔ-Ð3°ð 	Dð 	DˆHØ—|’| HÑ-Ô-×1Ò1Ñ3Ô3ˆHØ#ð Dð D�Ø×%Ò%Ñ'Ô'ð DØ×$Ò$Ð%BÑCÔCÐCøðDð —l’l‘n”nˆØ!�> {Ð3Ñ3Ô3ˆØ�{Š{Ð7Ð7¨hÐ7Ñ7Ô7Ñ8Ô8Ð8r   r   r   r    c              ƒ   ó‚  K  — ddl m} | j        pg D ]i}|                     |¦  «                             ¦   «         ƒ d{V —†}|D ]7}|                     ¦   «         ƒ d{V —†r|                     d¦  «        ƒ d{V —† Œ8Œj|                     ¦   «         ƒ d{V —†} ||¬¦  «        }d                     d„ |D ¦   «         ¦  «        S )z4Asynchronously process the HTML content of the page.r   r1   Nr3   r4   r6   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   r8   r9   s     r   r<   z<UnstructuredHtmlEvaluator.evaluate_async.<locals>.<listcomp>g   r=   r   r>   rE   s	            r   r"   z(UnstructuredHtmlEvaluator.evaluate_asyncY   s  è è € ð 	?Ð>Ð>Ð>Ð>Ð>àÔ-Ð3°ð 	Jð 	JˆHØ!Ÿ\š\¨(Ñ3Ô3×7Ò7Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9ˆHØ#ð Jð J�Ø ×+Ò+Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-ð JØ!×*Ò*Ð+HÑIÔIÐIÐIÐIÐIÐIÐIÐIøðJð !ŸLšL™NœNÐ*Ð*Ð*Ð*Ð*Ð*ˆØ!�> {Ð3Ñ3Ô3ˆØ�{Š{Ð7Ð7¨hÐ7Ñ7Ô7Ñ8Ô8Ð8r   ©N)
r#   r$   r%   r&   r
   r	   r'   r.   r   r"   r   r   r   r)   r)   <   s¨   € € € € € ØJÐJð
1ð 
1¨°$°s´)Ô)<ð 
1ð 
1ð 
1ð 
1ð9˜Vð 9¨ið 9À:ð 9ÐRUð 9ð 9ð 9ð 9ð9Øð9Ø*8ð9ØDSð9à	ð9ð 9ð 9ð 9ð 9ð 9r   r)   c                   ó.  — e Zd ZdZ	 	 	 	 	 	 	 	 ddee         deded	eee                  d
ee         dee	eef                  dee
eej        e         f                  dee         dee         fd„Zdee         fd„Zdee         fd„Zdee         fd„ZdS )ÚPlaywrightURLLoadera
  Load `HTML` pages with `Playwright` and parse with `Unstructured`.

    This is useful for loading pages that require javascript to render.

    Attributes:
        urls (List[str]): List of URLs to load.
        continue_on_failure (bool): If True, continue loading other URLs on failure.
        headless (bool): If True, the browser will run in headless mode.
        proxy (Optional[Dict[str, str]]): If set, the browser will access URLs
            through the specified proxy.
        browser_session (Optional[Union[str, os.PathLike[str]]]): Path to a file with
            browser session data that can be used to restore the browser session.
        timeout (Optional[int]): Timeout in milliseconds for page navigation.
        wait_until (Optional[str]): When to consider navigation succeeded.

            Can be one of:

            - "load": wait for the "load" event to fire
            - "domcontentloaded": wait for the "DOMContentLoaded" event to fire
            - "networkidle": wait until there are no network connections for at least
                500ms
            - "commit": wait for the first network request to be sent

    Example:
        .. code-block:: python

            from langchain_community.document_loaders import PlaywrightURLLoader

            urls = ["https://api.ipify.org/?format=json",]
            proxy={
                "server": "https://xx.xx.xx:15818", # https://<host>:<port>
                "username": "username",
                "password": "password"
            }
            loader = PlaywrightURLLoader(
                urls=urls,
                proxy=proxy,
                timeout=60000,  # 60 second timeout
                wait_until="domcontentloaded"  # Wait for DOM content to load
            )
            data = loader.load()
    TNé0u  ÚloadÚurlsÚcontinue_on_failureÚheadlessr*   Ú	evaluatorÚproxyÚbrowser_sessionÚtimeoutÚ
wait_untilc
                 ó   — 	 ddl }
n# t          $ r t          d¦  «        ‚w xY w|| _        || _        || _        || _        || _        || _        |	| _        |r|rt          d¦  «        ‚|pt          |¦  «        | _        dS )z%Load a list of URLs using Playwright.r   NzMplaywright package not found, please install it with `pip install playwright`z:`remove_selectors` and `evaluator` cannot be both not None)Ú
playwrightr-   rQ   rR   rS   rU   rV   rW   rX   Ú
ValueErrorr)   rT   )r   rQ   rR   rS   r*   rT   rU   rV   rW   rX   rZ   s              r   r.   zPlaywrightURLLoader.__init__–   s½   € ð	ØÐÐÐÐøÝð 	ð 	ð 	Ýð+ñô ð ð	øøøð ˆŒ	Ø#6ˆÔ Ø ˆŒØˆŒ
Ø.ˆÔØˆŒØ$ˆŒàð 	 	ð 	ÝØLñô ð ð
 #ÐQÕ&?Ð@PÑ&QÔ&QˆŒˆˆr/   r   c           	   #   óÎ  K  — ddl m}  |¦   «         5 }|j                             | j        | j        ¬¦  «        }d}| j        rbt          j         	                    | j        ¦  «        r| 
                    | j        ¬¦  «        }n"t                               d| j        › �¦  «         |€| 
                    ¦   «         }| j        D ]ö}	 |                     ¦   «         }|                     || j        | j        ¬¦  «        }|€t%          d|› �¦  «        ‚|                     | j        | j        ¬	¦  «         | j                             |||¦  «        }|                     ¦   «          d
|i}	t/          ||	¬¦  «        V — Œ¶# t0          $ r4}
| j        r!t                               d|› d|
› �¦  «         n|
‚Y d}
~
Œïd}
~
ww xY w|                     ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )z Load the specified URLs using Playwright and create Document instances.

        Returns:
            A list of Document instances with loaded content.
        r   )Úsync_playwright©rS   rU   N©Ústorage_stateúSession file not found: ©rW   rX   ú"page.goto() returned None for url ©rW   Úsource©Úpage_contentÚmetadataúError fetching or processing ú, exception: )Úplaywright.sync_apir]   ÚchromiumÚlaunchrS   rU   rV   ÚosÚpathÚexistsÚnew_contextÚloggerÚwarningrQ   Únew_pageÚgotorW   rX   r[   Úwait_for_load_staterT   r   Úcloser   Ú	ExceptionrR   Úerror)r   r]   Úpr   ÚcontextÚurlr   r   r5   rh   Úes              r   Ú	lazy_loadzPlaywrightURLLoader.lazy_load»   sz  è è € ð 	8Ð7Ð7Ð7Ð7Ð7àˆ_ÑÔð #	 !Ø”j×'Ò'°´ÀdÄjÐ'ÑQÔQˆGØˆGàÔ#ð VÝ”7—>’> $Ô"6Ñ7Ô7ð VØ%×1Ò1ÀÔ@TÐ1ÑUÔU�G�Gå—N’NÐ#T¸dÔ>RÐ#TÐ#TÑUÔUÐUàˆØ!×-Ò-Ñ/Ô/�à”yð  ð  �ð Ø"×+Ò+Ñ-Ô-�DØ#ŸyšyØ T¤\¸d¼oð  )ñ  ô  �Hð  Ð'Ý(Ð)SÈcÐ)SÐ)SÑTÔTÐTà×,Ò,¨T¬_ÀdÄlÐ,ÑSÔSÐSàœ>×2Ò2°4¸À(ÑKÔK�DØ—J’J‘L”L�LØ (¨#˜�HÝ"°¸xÐHÑHÔHÐHÐHÐHÐHøÝ ð  ð  ð  ØÔ/ð  ÝŸšØQ¸CÐQÐQÈaÐQÐQñô ð ð ð  ˜ð	ð ð ð ð øøøøð øøøð �MŠM‰OŒOˆOðG#	ð #	ð #	ñ #	ô #	ð #	ð #	ð #	ð #	ð #	ð #	ð #	øøøð #	ð #	ð #	ð #	ð #	ð #	s=   “B1GÃB2E8Å7GÅ8
F6Æ*F1Æ,GÆ1F6Æ6GÇGÇ!Gc              ƒ   óN   K  — d„ |                       ¦   «         2 ¦   «         ƒ d{V —†S )úçLoad the specified URLs with Playwright and create Documents asynchronously.
        Use this function when in a jupyter notebook environment.

        Returns:
            A list of Document instances with loaded content.
        c              “   ó"   K  — g | 3 d {V —†}|‘Œ
6 S rL   r   )r:   Údocs     r   r<   z-PlaywrightURLLoader.aload.<locals>.<listcomp>ï   s.   è è € Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7˜c�Ð7Ð7Ð7Ð7s   …N)Ú
alazy_load)r   s    r   ÚaloadzPlaywrightURLLoader.aloadè   s8   è è € ð 8Ð7 T§_¢_Ñ%6Ô%6Ð7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7r   c           	     ód  K  — ddl m}  |¦   «         4 ƒd{V —†}|j                             | j        | j        ¬¦  «        ƒ d{V —†}d}| j        rht          j         	                    | j        ¦  «        r"| 
                    | j        ¬¦  «        ƒ d{V —†}n"t                               d| j        › �¦  «         |€| 
                    ¦   «         ƒ d{V —†}| j        D �]}	 |                     ¦   «         ƒ d{V —†}|                     || j        | j        ¬¦  «        ƒ d{V —†}|€t%          d|› �¦  «        ‚|                     | j        | j        ¬	¦  «        ƒ d{V —† | j                             |||¦  «        ƒ d{V —†}|                     ¦   «         ƒ d{V —† d
|i}	t/          ||	¬¦  «        W V — ŒÖ# t0          $ r5}
| j        r!t                               d|› d|
› �¦  «         n|
‚Y d}
~
�Œd}
~
ww xY w|                     ¦   «         ƒ d{V —† ddd¦  «        ƒd{V —† dS # 1 ƒd{V —†swxY w Y   dS )r€   r   )Úasync_playwrightNr^   r_   ra   rb   rc   rd   re   rf   ri   rj   )Úplaywright.async_apir†   rl   rm   rS   rU   rV   rn   ro   rp   rq   rr   rs   rQ   rt   ru   rW   rX   r[   rv   rT   r"   rw   r   rx   rR   ry   )r   r†   rz   r   r{   r|   r   r   r5   rh   r}   s              r   rƒ   zPlaywrightURLLoader.alazy_loadñ   s´  è è € ð 	:Ð9Ð9Ð9Ð9Ð9à#Ð#Ñ%Ô%ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"¨ØœJ×-Ò-°t´}ÈDÌJÐ-ÑWÔWÐWÐWÐWÐWÐWÐWˆGØˆGàÔ#ð VÝ”7—>’> $Ô"6Ñ7Ô7ð VØ$+×$7Ò$7Ø&*Ô&:ð %8ñ %ô %ð ð ð ð ð ð �G�Gõ —N’NÐ#T¸dÔ>RÐ#TÐ#TÑUÔUÐUàˆØ '× 3Ò 3Ñ 5Ô 5Ð5Ð5Ð5Ð5Ð5Ð5�à”yð  ñ  �ð Ø!(×!1Ò!1Ñ!3Ô!3Ð3Ð3Ð3Ð3Ð3Ð3�DØ%)§Y¢YØ T¤\¸d¼oð &/ñ &ô &ð  ð  ð  ð  ð  ð  �Hð  Ð'Ý(Ð)SÈcÐ)SÐ)SÑTÔTÐTà×2Ò2Øœ°´ð 3ñ ô ð ð ð ð ð ð ð ð "&¤×!>Ò!>¸tÀWÈhÑ!WÔ!WÐWÐWÐWÐWÐWÐW�DØŸ*š*™,œ,Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø (¨#˜�HÝ"°¸xÐHÑHÔHÐHÐHÐHÐHÐHøÝ ð  ð  ð  ØÔ/ð  ÝŸšØQ¸CÐQÐQÈaÐQÐQñô ð ð ð  ˜ð	ð ð ð ñ øøøøð øøøð —-’-‘/”/Ð!Ð!Ð!Ð!Ð!Ð!Ð!ðO'	"ð '	"ð '	"ñ '	"ô '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"ð '	"øøøð '	"ð '	"ð '	"ð '	"ð '	"ð '	"s=   ™CHÃCF0Æ/HÆ0
G/Æ:*G*Ç$HÇ*G/Ç/HÈ
H)È,H))TTNNNNrO   rP   )r#   r$   r%   r&   r	   r'   Úboolr
   r   r   r   rn   ÚPathLikeÚintr.   r   r   r~   r„   r   rƒ   r   r   r   rN   rN   j   sW  € € € € € ð)ð )ð\ %)ØØ04Ø37Ø*.ØBFØ!&Ø$*ð#Rð #Rà�3Œið#Rð "ð#Rð ð	#Rð
 # 4¨¤9Ô-ð#Rð Ð/Ô0ð#Rð ˜˜S #˜XœÔ'ð#Rð " %¨¨R¬[¸Ô-=Ð(=Ô">Ô?ð#Rð ˜#”ð#Rð ˜S”Mð#Rð #Rð #Rð #RðJ+˜8 HÔ-ð +ð +ð +ð +ðZ8˜T (œ^ð 8ð 8ð 8ð 8ð0" -°Ô"9ð 0"ð 0"ð 0"ð 0"ð 0"ð 0"r   rN   ) r&   Úloggingrn   Úabcr   r   Útypingr   r   r   r   r	   r
   r   Úlangchain_core.documentsr   Ú)langchain_community.document_loaders.baser   r‡   r   r   r   r   r   r    rk   Ú	getLoggerr#   rr   r   r)   rN   r   r   r   ú<module>r‘      s”  ðØ WÐ Wà €€€Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ Và -Ð -Ð -Ð -Ð -Ð -à @Ð @Ð @Ð @Ð @Ð @àð <Ø<Ð<Ð<Ð<Ð<Ð<Ø6Ð6Ð6Ð6Ð6Ð6Ø>Ð>Ð>Ð>Ð>Ð>Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð 
ˆÔ	˜8Ñ	$Ô	$€ð#ð #ð #ð #ð #˜#ñ #ô #ð #ðL+9ð +9ð +9ð +9ð +9Ð 3ñ +9ô +9ð +9ð\w"ð w"ð w"ð w"ð w"˜*ñ w"ô w"ð w"ð w"ð w"r   