
    Fdu              	      F   d Z ddlmZ ddlZddlmZ ddlmZ ddl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 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% 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l0m1Z1 ddl2m3Z3 ddl4m5Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z>m?Z? ddl@mAZAmBZB ddlCmDZD eez  e!z  e(z  ZE eeF          jG        jG        ZH e:ddddddddddd          eDd3d&                        ZId4d(ZJd5d,ZKd6d.ZLd6d/ZM	 d7d8d2ZNdS )9zSelenium web scraping module.    )annotationsN)Path)platform)OptionalType)BeautifulSoup)WebDriverException)Options)Service)	WebDriver)By)expected_conditions)WebDriverWait)ChromeDriverManager)GeckoDriverManager)EdgeChromiumDriverManager)Agent)command)logger)
MemoryItem
get_memory)extract_hyperlinksformat_hyperlinks)validate_urlbrowse_websitezBrowses a WebsitestringzThe URL to visitT)typedescriptionrequiredz$What you want to find on the website)urlquestionr    strr!   agentr   returnc                p   	 t          | |          \  }}n<# t          $ r/}|j                            d          d         }d| cY d}~S d}~ww xY wt	          |           t          | ||||          }t          ||           }t          |          dk    r
|dd         }t          |           d| d| S )a  Browse a website and return the answer and links to the user

    Args:
        url (str): The url of the website to browse
        question (str): The question asked by the user

    Returns:
        Tuple[str, WebDriver]: The answer and links to the user and the webdriver
    
r   zError: N   zAnswer gathered from website: z	

Links: )	scrape_text_with_seleniumr	   msgsplit
add_headersummarize_memorize_webpagescrape_links_with_seleniumlenclose_browser)	r    r!   r#   drivertexter)   summarylinkss	            QC:\Users\Administrator\Downloads\Auto-GPT-master\autogpt\commands\web_selenium.pyr   r   *   s    .0e<<    ekk$"	 v(dHeVLLG&vs33E 5zzA~~bqb	&GGGGGGGs    
A$A
A
Atuple[WebDriver, str]c                   t          j        d                              t           j                   t          t
          t          t          d} ||j        j	                             }|
                    d           |j        j	        dk    rf|j        j        rd|_        |
                    d           t          t          t                                                                |          }nv|j        j	        dk    r>t#          t%          t'                                                                |          }n(|j        j	        d	k    rt)          |
          }nt*          dk    st*          dk    r*|
                    d           |
                    d           |
                    d           |j        j        r*|
                    d           |
                    d           t-          d          }t/          |                                rt3          t5          |                    n,t3          t7                                                                |          }|                    |            t;          |d                              t?          j         tB          j"        df                     |#                    d          }tI          |d          } |ddg          D ]}|%                                 |&                                }	d |	'                                D             }
d |
D             }d(                    d |D                       }	||	fS )zScrape text from a website using selenium

    Args:
        url (str): The url of the website to scrape

    Returns:
        Tuple[WebDriver, str]: The webdriver and the text scraped from the website
    selenium)chromeedgefirefoxsafariz~user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.49 Safari/537.36r;   Tz--disable-gpu)serviceoptionsr:   r<   )r>   linuxlinux2z--disable-dev-shm-usagez--remote-debugging-port=9222z--no-sandboxz--headless=newz/usr/bin/chromedriver
   bodyzreturn document.body.outerHTML;html.parserscriptstylec              3  >   K   | ]}|                                 V  d S N)strip).0lines     r5   	<genexpr>z,scrape_text_with_selenium.<locals>.<genexpr>   s*      88dTZZ\\888888    c              3  n   K   | ]0}|                     d           D ]}|                                V  1dS )z  N)r*   rH   )rI   rJ   phrases      r5   rK   z,scrape_text_with_selenium.<locals>.<genexpr>   sC      NNTZZ=M=MNN6fllnnNNNNNNNrL   r&   c              3     K   | ]}||V  	d S rG    )rI   chunks     r5   rK   z,scrape_text_with_selenium.<locals>.<genexpr>   s'      88u%8U888888rL   ))logging	getLoggersetLevelCRITICALChromeOptionsEdgeOptionsFirefoxOptionsSafariOptionsconfigselenium_web_browseradd_argumentselenium_headlessheadlessFirefoxDriverGeckoDriverServicer   install
EdgeDriverEdgeDriverServiceEdgeDriverManagerSafariDriverr   r   ChromeDriverexistsChromeDriverServicer"   r   getr   untilECpresence_of_element_locatedr   TAG_NAMEexecute_scriptr   extractget_text
splitlinesjoin)r    r#   options_availabler>   r0   chromium_driver_pathpage_sourcesouprD   r1   lineschunkss               r5   r(   r(   T   sX    j!!**7+;<<<  !	: : S/0QRTTG 	I   |(I55<) 	2#G  111&'9';';'C'C'E'EFFPW
 
 
 
	*f	4	4%&7&9&9&A&A&C&CDDg
 
 
 
	*h	6	6 g...w(h"6"6  !:;;;  !?@@@^,,,<) 	2  !1222  111#$;<<#**,,F',@(A(ABBB$%8%:%:%B%B%D%DEE	
 
 
 JJsOOO&"##
&V'<==  
 ''(IJJKm44D$'*++  ==??D88doo&7&7888ENNNNNF998888888D4<rL   r0   r   	list[str]c                    | j         }t          |d          } |ddg          D ]}|                                 t          ||          }t	          |          S )zScrape links from a website using selenium

    Args:
        driver (WebDriver): The webdriver to use to scrape the links

    Returns:
        List[str]: The links scraped from the website
    rC   rD   rE   )ru   r   ro   r   r   )r0   r    ru   rv   rD   
hyperlinkss         r5   r-   r-      si     $Km44D$'*++  #D#..JZ(((rL   Nonec                .    |                                   dS )zoClose the browser

    Args:
        driver (WebDriver): The webdriver to close

    Returns:
        None
    N)quit)r0   s    r5   r/   r/      s     KKMMMMMrL   c                   	 t          t           dd          5 }|                                }ddd           n# 1 swxY w Y   |                     |           dS # t          $ r}t          d|            Y d}~dS d}~ww xY w)zAdd a header to the website

    Args:
        driver (WebDriver): The webdriver to use to add the header

    Returns:
        None
    z/js/overlay.jsrNzError executing overlay.js: )openFILE_DIRreadrn   	Exceptionprint)r0   overlay_fileoverlay_scriptr2   s       r5   r+   r+      s    2X---s33 	1|)..00N	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1n----- 2 2 20Q001111111112s4   A ;A ?A ?A 
B'A??Br1   Optional[WebDriver]c                    |sdS t          |          }t          j        d| d           t          |j                  }t          j        || |j        |          }|                    |           |j        S )a1  Summarize text using the OpenAI API

    Args:
        url (str): The url of the text
        text (str): The text to summarize
        question (str): The question to ask the model
        driver (WebDriver): The webdriver to use to scroll the page

    Returns:
        str: The summary of the text
    zError: No text to summarizezText length: z characters)r!   )	r.   r   infor   rZ   r   from_webpageaddr3   )r    r1   r!   r#   r0   text_lengthmemory
new_memorys           r5   r,   r,      s~    $  -,,d))K
K8888999%%F(sEL8TTTJ
JJzrL   )r    r"   r!   r"   r#   r   r$   r"   )r    r"   r#   r   r$   r6   )r0   r   r    r"   r$   ry   )r0   r   r$   r|   rG   )r    r"   r1   r"   r!   r"   r#   r   r0   r   r$   r"   )O__doc__
__future__r   rR   pathlibr   sysr   typingr   r   bs4r   selenium.common.exceptionsr	   !selenium.webdriver.chrome.optionsr
   rV   !selenium.webdriver.chrome.servicer   rh   #selenium.webdriver.chrome.webdriverr   rf   selenium.webdriver.common.byr   selenium.webdriver.edge.optionsrW   selenium.webdriver.edge.servicerc   !selenium.webdriver.edge.webdriverrb   "selenium.webdriver.firefox.optionsrX   "selenium.webdriver.firefox.servicer`   $selenium.webdriver.firefox.webdriverr_   #selenium.webdriver.remote.webdriver!selenium.webdriver.safari.optionsrY   #selenium.webdriver.safari.webdriverre   selenium.webdriver.supportr   rk   selenium.webdriver.support.waitr   webdriver_manager.chromer   webdriver_manager.firefoxr   webdriver_manager.microsoftr   rd   autogpt.agent.agentr   autogpt.command_decoratorr   autogpt.logsr   autogpt.memory.vectorr   r   autogpt.processing.htmlr   r   autogpt.url_utils.validatorsr   BrowserOptions__file__parentr   r   r(   r-   r/   r+   r,   rP   rL   r5   <module>r      sW   # # " " " " " "              ! ! ! ! ! ! ! !       9 9 9 9 9 9 F F F F F F L L L L L L I I I I I I + + + + + + B B B B B B H H H H H H E E E E E E H H H H H H L L L L L L K K K K K K 9 9 9 9 9 9 F F F F F F I I I I I I @ @ @ @ @ @ 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 V V V V V V % % % % % % - - - - - -       8 8 8 8 8 8 8 8 I I I I I I I I 5 5 5 5 5 5,~=M4>> ' 	 1CQUVVA
 
   H H H  H:I I I IX) ) ) )(	 	 	 	2 2 2 2, #'      rL   