
    $)f                         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j(                  e      Z G d
 de      Zy)    N)contextmanager)BytesIO)DriverFinder)	WebDriver   )Options)FirefoxRemoteConnection)Servicec            	            e Zd ZdZdZdZ	 	 	 ddedededdf fd	Z	d fd
Z
ddZed        ZddefdZddZdefdZdefdZdefdZdefdZ xZS )r   z=Controls the GeckoDriver and allows you to drive the browser.chromecontentNoptionsservice
keep_alivereturnc                    |r|n	t               | _        |r|n	t               }t        j                  | j                  |      | j                  _        | j                  j                          t        | j                  j                  ||j                        }	 t        | -  ||       d| _        y# t        $ r | j                           w xY w)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__s        a/var/www/html/flask-app/venv/lib/python3.12/site-packages/selenium/webdriver/firefox/webdriver.pyr   zWebDriver.__init__)   s     #*wwy$'')(11$,,H*#||77! 44
	GhH
  	  	IIK	s   B2 2Cc                     	 t         |           | j                  j	                          y# t        $ r Y &w xY w# | j                  j	                          w xY w)z=Closes the browser and shuts down the GeckoDriver executable.N)r   r   r   r   stop)r    r"   s    r#   r   zWebDriver.quitL   sJ    	 GLN
 LL	  		 LLs   , 	8; 8; Ac                 ,    | j                  dd|i       y )NSET_CONTEXTcontextexecute)r    r(   s     r#   set_contextzWebDriver.set_contextV   s    ]Y$89    c              #      K   | j                  d      j                  d      }| j                  |       	 d | j                  |       y# | j                  |       w xY w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_contexts      r#   r(   zWebDriver.contextY   sS      ,,}599'B!	._-D_-s   2A!A A!AA!c           	         t         j                  j                  |      rt               }t         j                  j	                  |      }t        |      dz   }t        j                  |dt        j                        5 }t        j                  |      D ]B  \  }}}|D ]7  }	t         j                  j                  ||	      }
|j                  |
|
|d        9 D 	 ddd       t        j                  |j                               j                  d      }nGt!        |d      5 }t        j                  |j#                               j                  d      }ddd       |d}| j%                  d|      d   S # 1 sw Y   xY w# 1 sw Y   /xY w)	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   normpathlenzipfileZipFileZIP_DEFLATEDwalkjoinwritebase64	b64encodegetvaluedecodeopenreadr*   )r    r   r6   fp	path_rootzippedbase_filesfylefilenamer5   filepayloads                 r#   install_addonzWebDriver.install_addono   sQ    77==B77##D)DD	AIS'*>*>? E6&(ggdm END!U % E#%77<<d#;Xx	
/CDEEE
 $$R[[]3::7CEdD! FT((5<<WEF "	:||OW5g>>E EF Fs   <AE43F 4E= F	c                 ,    | j                  dd|i       y)zUninstalls Firefox addon using its identifier.

        :Usage:
            ::

                driver.uninstall_addon('addon@foo.com')
        UNINSTALL_ADDONidNr)   )r    
identifiers     r#   uninstall_addonzWebDriver.uninstall_addon   s     	&z(:;r,   c                 *   |j                         j                  d      st        j                  dt               | j                         }	 t        |d      5 }|j                  |       ddd       ~y# 1 sw Y   xY w# t        $ r Y ~yw xY w# ~w xY 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_pngrF   rA   OSError)r    rO   pngfs       r#    get_full_page_screenshot_as_filez*WebDriver.get_full_page_screenshot_as_file   s     ~~((0MMp 224	h% 
   		 s<   A? A3)A? 3A<8A? ?	BB BB Bc                 $    | j                  |      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')
        )rc   )r    rO   s     r#   save_full_page_screenshotz#WebDriver.save_full_page_screenshot   s     44X>>r,   c                 f    t        j                  | j                         j                  d            S )zGets the full document screenshot of the current window as a binary
        data.

        :Usage:
            ::

                driver.get_full_page_screenshot_as_png()
        ascii)rB   	b64decode"get_full_page_screenshot_as_base64encoder    s    r#   r_   z)WebDriver.get_full_page_screenshot_as_png   s*      G G I P PQX YZZr,   c                 *    | j                  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)   rk   s    r#   ri   z,WebDriver.get_full_page_screenshot_as_base64   s     ||23G<<r,   )NNT)r   N)F)__name__
__module____qualname____doc__CONTEXT_CHROMECONTEXT_CONTENTr   r
   boolr   r   r+   r   r(   strrR   rW   rc   re   bytesr_   ri   __classcell__)r"   s   @r#   r   r   #   s    GNO  	! !  !  	! 
 
! F : . .* ?c  ?D<D :?T ? 	[ 	[	=C 	=r,   r   )rB   loggingr8   r\   r<   
contextlibr   ior   'selenium.webdriver.common.driver_finderr   #selenium.webdriver.remote.webdriverr   RemoteWebDriverr   r   remote_connectionr	   r   r
   	getLoggerrn   logger r,   r#   <module>r      sK   "   	   %  @ L  6 			8	$y= y=r,   