
    vKgy                         S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
Jr  SSKJr  SSKJr  SS	KJr   " S
 S\5      rg)    N)contextmanager)BytesIO)DriverFinder)	WebDriver   )Options)FirefoxRemoteConnection)Servicec            	          ^  \ rS rSrSrSrSr   SS\S\S\	S	S4U 4S
 jjjr
SU 4S jjrSS jr\S 5       rSS	\4S jjrSS jrS	\	4S jrS	\	4S jrS	\4S jrS	\4S jrSrU =r$ )r       z=Controls the GeckoDriver and allows you to drive the browser.chromecontentNoptionsservice
keep_alivereturnc                 X  > U(       a  UO	[        5       U l        U(       a  UO	[        5       n[        U R                  U5      nUR	                  5       (       a  UR	                  5       Ul        SUl        U R                  R                  5       =(       d    UR                  5       U R                  l	        U R                  R                  5         [        U R                  R                  UUR                  S9n [        TU ]=  XQS9  SU l        g! [          a    U R#                  5         e f = f)ag  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__s         d/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/selenium/webdriver/firefox/webdriver.pyr!   WebDriver.__init__&   s     #*wwy$'')dllG4""$$&,&=&=&?G#&*G# LL113Ov7M7M7O*#||77! 44
	GhH
  	  	IIK	s   8D D)c                    >  [         TU ]  5         U R                  R	                  5         g! [         a     N'f = f! U R                  R	                  5         f = f)z=Closes the browser and shuts down the GeckoDriver executable.N)r    r#   r"   r   stop)r%   r(   s    r)   r#   WebDriver.quitN   sJ    	 GLN
 LL	  		 LLs   , 
9< 9< Ac                 ,    U R                  SSU05        g )NSET_CONTEXTcontextexecute)r%   r0   s     r)   set_contextWebDriver.set_contextX   s    ]Y$89    c              #      #    U R                  S5      R                  S5      nU R                  U5         Sv   U R                  U5        g! U R                  U5        f = f7f)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)r2   popr3   )r%   r0   initial_contexts      r)   r0   WebDriver.context[   sR      ,,}599'B!	._-D_-s   2A!A A!AA!c           	      >   [         R                  R                  U5      (       a  [        5       n[         R                  R	                  U5      n[        U5      S-   n[        R                  " US[        R                  5       n[         R                  " U5       HB  u  pgnU H6  n	[         R                  R                  Xi5      n
UR                  XUS 5        M8     MD     SSS5        [        R                  " UR                  5       5      R                  S5      nOH[!        US5       n[        R                  " UR#                  5       5      R                  S5      nSSS5        WUS.nU R%                  SU5      S   $ ! , (       d  f       N= f! , (       d  f       N9= f)	aR  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_ADDONr8   )osr   isdirr   normpathlenzipfileZipFileZIP_DEFLATEDwalkjoinwritebase64	b64encodegetvaluedecodeopenreadr2   )r%   r   r@   fp	path_rootzippedbase_filesfylefilenamer?   filepayloads                 r)   install_addonWebDriver.install_addonq   s,    77==B77##D)DD	AIS'*>*>?6&(ggdmNDU %#%77<<#;X	
/CD !& '4 @
 $$R[[]3::7CEdD!T((5<<WE " "	:||OW5g>> @? "!s   AE='4F=
F
Fc                 ,    U R                  SSU05        g)zpUninstalls Firefox addon using its identifier.

:Usage:
    ::

        driver.uninstall_addon('addon@foo.com')
UNINSTALL_ADDONidNr1   )r%   
identifiers     r)   uninstall_addonWebDriver.uninstall_addon   s     	&z(:;r5   c                 B   UR                  5       R                  S5      (       d  [        R                  " S[        5        U R                  5       n [        US5       nUR                  U5        SSS5        Ag! , (       d  f       N= f! [         a     Agf = f! Af = f)at  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_pngrP   rK   OSError)r%   rY   pngfs       r)    get_full_page_screenshot_as_file*WebDriver.get_full_page_screenshot_as_file   s     ~~((00MMp 224	h% &
  &% 		 sH   B
 A9/B
 9
BB
 B B
 

BB BB Bc                 $    U R                  U5      $ )am  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')
)ro   )r%   rY   s     r)   save_full_page_screenshot#WebDriver.save_full_page_screenshot   s     44X>>r5   c                 h    [         R                  " U R                  5       R                  S5      5      $ )zGets the full document screenshot of the current window as a binary
data.

:Usage:
    ::

        driver.get_full_page_screenshot_as_png()
ascii)rL   	b64decode"get_full_page_screenshot_as_base64encoder%   s    r)   rk   )WebDriver.get_full_page_screenshot_as_png   s*      G G I P PQX YZZr5   c                 *    U R                  S5      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_SCREENSHOTr8   r1   ry   s    r)   rw   ,WebDriver.get_full_page_screenshot_as_base64   s     ||23G<<r5   )r$   r   )NNT)r   N)F)__name__
__module____qualname____firstlineno____doc__CONTEXT_CHROMECONTEXT_CONTENTr   r
   boolr!   r#   r3   r   r0   strr\   rb   ro   rr   bytesrk   rw   __static_attributes____classcell__)r(   s   @r)   r   r       s    GNO  	& &  &  	& 
 
&  & P : . .* ?c  ?D<D :?T ? 	[ 	[	=C 	= 	=r5   r   )rL   rB   rh   rF   
contextlibr   ior   'selenium.webdriver.common.driver_finderr   #selenium.webdriver.remote.webdriverr   RemoteWebDriverr   r   remote_connectionr	   r   r
    r5   r)   <module>r      s6   "  	   %  @ L  6 ~= ~=r5   