o
    VhU                     @   s   d dl Z 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 eeZG d
d deZdS )    N)contextmanager)BytesIO)DriverFinder)	WebDriver   )Options)FirefoxRemoteConnection)Servicec                	       s   e Zd ZdZdZdZ			ddededed	df fd
dZ	d  fddZ
d ddZedd Zd!d	efddZd ddZd	efddZd	efddZd	efddZd	ef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|| j_| j  t| jj||j	d}z
t
 j||d W n ty=   |    w 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.
        )remote_server_addrr   ignore_proxy)command_executorr   FN)r	   r   r   r   get_pathpathstartr   service_url_ignore_local_proxysuper__init__	Exceptionquit
_is_remote)selfr   r   r   executor	__class__ a/home/air/yokohama/back/venv/lib/python3.10/site-packages/selenium/webdriver/firefox/webdriver.pyr   )   s    

zWebDriver.__init__c                    sP   z!zt    W n	 ty   Y n	w W | j  dS W | j  dS | j  w )z=Closes the browser and shuts down the GeckoDriver executable.N)r   r   r   r   stopr   r   r!   r"   r   L   s   zWebDriver.quitc                 C   s   |  dd|i d S )NSET_CONTEXTcontextexecute)r   r&   r!   r!   r"   set_contextV   s   zWebDriver.set_contextc              	   c   s@    |  dd}| | zdV  W | | dS | | w )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 ...
        GET_CONTEXTvalueN)r(   popr)   )r   r&   initial_contextr!   r!   r"   r&   Y   s   
zWebDriver.contextFc              	   C   s   t j|rSt }t|d }t|dtj)}t |D ]\}}}|D ]}	t j	||	}
|
|
|
|d  q$qW d   n1 sCw   Y  t| d}nt|d}t| d}W d   n1 smw   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   wNzUTF-8rb)addon	temporaryINSTALL_ADDONr+   )osr   isdirr   lenzipfileZipFileZIP_DEFLATEDwalkjoinwritebase64	b64encodegetvaluedecodeopenreadr(   )r   r   r1   fp	path_rootzippedbase_filesfylefilenamer0   filepayloadr!   r!   r"   install_addono   s"   
zWebDriver.install_addonc                 C   s   |  dd|i dS )zUninstalls Firefox addon using its identifier.

        :Usage:
            ::

                driver.uninstall_addon('addon@foo.com')
        UNINSTALL_ADDONidNr'   )r   
identifierr!   r!   r"   uninstall_addon   s   zWebDriver.uninstall_addonc                 C   s   |  dstdt |  }z1z$t|d}|| W d   n1 s(w   Y  W W ~dS W W ~dS  tyB   Y W ~dS w ~w )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_pngr@   r;   OSError)r   rI   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   rI   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"   rW      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()
        FULL_PAGE_SCREENSHOTr+   r'   r$   r!   r!   r"   r_      s   	z,WebDriver.get_full_page_screenshot_as_base64)NNT)r   N)F)__name__
__module____qualname____doc__CONTEXT_CHROMECONTEXT_CONTENTr   r	   boolr   r   r)   r   r&   strrL   rP   r[   r\   bytesrW   r_   __classcell__r!   r!   r   r"   r   #   s4    #




r   )r<   loggingr3   rT   r6   
contextlibr   ior   'selenium.webdriver.common.driver_finderr   #selenium.webdriver.remote.webdriverr   RemoteWebDriverr   r   remote_connectionr   r   r	   	getLoggerrb   loggerr!   r!   r!   r"   <module>   s   
