a
    &hm                     @   s   d dl Z d dlZd dlZd dl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 G dd deZdS )    N)contextmanager)BytesIO)Optional)DriverFinder)	WebDriver   )Options)FirefoxRemoteConnection)Servicec                       s   e Zd ZdZdZdZd!ee ee e	dd fddZ
dd	 fd
dZdd	ddZedd Zd"ed	ddZdd	ddZe	d	ddZe	d	ddZed	ddZed	ddZdd Zdd  Z  ZS )#r   z=Controls the GeckoDriver and allows you to drive the browser.chromecontentNT)optionsservice
keep_alivereturnc                    s   |r|nt  | _|r|nt }t| j|}| rB| |_d|_| j pR| | j_	| j
  t| jj||jd}zt j||d W n ty   |    Y n0 d| _dS )a  Creates a new instance of the Firefox driver. Starts the service and
        then creates new instance of Firefox driver.

        :Args:
         - options - Instance of ``options.Options``.
         - service - (Optional) service instance for managing the starting and stopping of the driver.
         - keep_alive - Whether to configure remote_connection.RemoteConnection to use HTTP keep-alive.
        N)remote_server_addrr   ignore_proxy)command_executorr   F)r
   r   r   r   get_browser_pathbinary_locationbrowser_versionenv_pathget_driver_pathpathstartr	   service_url_ignore_local_proxysuper__init__	Exceptionquit
_is_remote)selfr   r   r   finderexecutor	__class__ i/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/selenium/webdriver/firefox/webdriver.pyr   '   s&    

zWebDriver.__init__)r   c                    sB   z0zt    W n ty"   Y n0 W | j  n| j  0 dS )z=Closes the browser and shuts down the GeckoDriver executable.N)r   r    r   r   stopr"   r%   r'   r(   r    O   s
    zWebDriver.quitc                 C   s   |  dd|i d S )NZSET_CONTEXTcontextexecute)r"   r+   r'   r'   r(   set_contextY   s    zWebDriver.set_contextc              	   c   s@   |  dd}| | zdV  W | | n| | 0 dS )a  Sets the context that Selenium commands are running in using a
        `with` statement. The state of the context on the server is saved
        before entering the block, and restored upon exiting it.

        :param context: Context, may be one of the class properties
            `CONTEXT_CHROME` or `CONTEXT_CONTENT`.

        Usage example::

            with selenium.context(selenium.CONTEXT_CHROME):
                # chrome scope
                ... do stuff ...
        ZGET_CONTEXTvalueN)r-   popr.   )r"   r+   Zinitial_contextr'   r'   r(   r+   \   s
    
zWebDriver.contextFc              	   C   s  t j|rt }t j|}t|d }tj|dtjddR}t 	|D ]6\}}}|D ]&}	t j
||	}
||
|
|d  qXqJW d   n1 s0    Y  t| d}n>t|d$}t| d}W d   n1 s0    Y  ||d}| d	|d
 S )a  Installs Firefox addon.

        Returns identifier of installed addon. This identifier can later
        be used to uninstall addon.

        :param temporary: allows you to load browser extensions temporarily during a session
        :param path: Absolute path to the addon that will be installed.

        :Usage:
            ::

                driver.install_addon("/path/to/firebug.xpi")
        r   wF)strict_timestampsNzUTF-8rb)addon	temporaryZINSTALL_ADDONr/   )osr   isdirr   normpathlenzipfileZipFileZIP_DEFLATEDwalkjoinwritebase64	b64encodegetvaluedecodeopenreadr-   )r"   r   r5   fp	path_rootzippedbase_filesfylefilenamer4   filepayloadr'   r'   r(   install_addonr   s    62
zWebDriver.install_addonc                 C   s   |  dd|i dS )zUninstalls Firefox addon using its identifier.

        :Usage:
            ::

                driver.uninstall_addon("addon@foo.com")
        ZUNINSTALL_ADDONidNr,   )r"   Z
identifierr'   r'   r(   uninstall_addon   s    zWebDriver.uninstall_addonc                 C   s   |  dstdt |  }zXz8t|d}|| W d   n1 sP0    Y  W n tyt   Y W ~dS 0 W ~n~0 dS )a  Saves a full document screenshot of the current window to a PNG
        image file. Returns False if there is any IOError, else returns True.
        Use full paths in your filename.

        :Args:
         - filename: The full path you wish to save your screenshot to. This
           should end with a `.png` extension.

        :Usage:
            ::

                driver.get_full_page_screenshot_as_file("/Screenshots/foo.png")
        z.pngz^name used for saved screenshot does not match file type. It should end with a `.png` extensionwbNFT)	lowerendswithwarningswarnUserWarningget_full_page_screenshot_as_pngrD   r?   OSError)r"   rM   pngfr'   r'   r(    get_full_page_screenshot_as_file   s    ,z*WebDriver.get_full_page_screenshot_as_filec                 C   s
   |  |S )a  Saves a full document screenshot of the current window to a PNG
        image file. Returns False if there is any IOError, else returns True.
        Use full paths in your filename.

        :Args:
         - filename: The full path you wish to save your screenshot to. This
           should end with a `.png` extension.

        :Usage:
            ::

                driver.save_full_page_screenshot("/Screenshots/foo.png")
        )r]   )r"   rM   r'   r'   r(   save_full_page_screenshot   s    z#WebDriver.save_full_page_screenshotc                 C   s   t |  dS )zGets the full document screenshot of the current window as a binary
        data.

        :Usage:
            ::

                driver.get_full_page_screenshot_as_png()
        ascii)r@   	b64decode"get_full_page_screenshot_as_base64encoder*   r'   r'   r(   rY      s    	z)WebDriver.get_full_page_screenshot_as_pngc                 C   s   |  dd S )zGets the full document screenshot of the current window as a base64
        encoded string which is useful in embedded images in HTML.

        :Usage:
            ::

                driver.get_full_page_screenshot_as_base64()
        ZFULL_PAGE_SCREENSHOTr/   r,   r*   r'   r'   r(   ra      s    	z,WebDriver.get_full_page_screenshot_as_base64c                 O   s   t d S NNotImplementedErrorr"   argskwargsr'   r'   r(   download_file   s    zWebDriver.download_filec                 O   s   t d S rc   rd   rf   r'   r'   r(   get_downloadable_files   s    z WebDriver.get_downloadable_files)NNT)F)__name__
__module____qualname____doc__ZCONTEXT_CHROMEZCONTEXT_CONTENTr   r   r
   boolr   r    r.   r   r+   strrP   rR   r]   r^   bytesrY   ra   ri   rj   __classcell__r'   r'   r%   r(   r   !   s0      (

"
r   )r@   r6   rV   r:   
contextlibr   ior   typingr   'selenium.webdriver.common.driver_finderr   #selenium.webdriver.remote.webdriverr   RemoteWebDriverr   r   remote_connectionr	   r   r
   r'   r'   r'   r(   <module>   s   