
    $)f                         d dl Z 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  ej                  e      Z G d d      Zy)    N)Path)List)WebDriverException)BaseOptionsc                   V    e Zd ZdZedefd       ZdedefdZ	ede
e   defd       Zy)	SeleniumManagerzWrapper for getting information from the Selenium Manager binaries.

    This implementation is still in beta, and may change.
    returnc                  h   t        j                  d      x} t        |       S ddddddd}t        j                  dv rt	        j
                         nd}|j                  t        j                  |f      }|t        dt        j                   d	|       t        j                  d
v r$t        j                  dt        j                         |dk(  rdnd}t        t              j                  j                  ||      } | j                         st        d|        t        j                  d|        | S )zDetermines the path of the correct Selenium Manager binary.

        :Returns: The Selenium Manager executable location

        :Raises: WebDriverException if the platform is unsupported
        SE_MANAGER_PATHmacoswindowslinux))darwinany)win32r   )cygwinr   )r   x86_64)freebsdr   )openbsdr   )r   r   r   r   z/Unsupported platform/architecture combination: /)r   r   zFSelenium Manager binary may not be compatible with %s; verify settingszselenium-manager.exezselenium-managerz2Unable to obtain working Selenium Manager binary; z$Selenium Manager binary found at: %s)osgetenvr   sysplatformmachinegetr   loggerwarning__file__parentjoinpathis_filedebug)pathdirsarch	directoryfiles        g/var/www/html/flask-app/venv/lib/python3.12/site-packages/selenium/webdriver/common/selenium_manager.py
get_binaryzSeleniumManager.get_binary&   s    II/00D=:  ''(!(#*#*
 &)\\5T%Tx!Z_HHcllD12	$'VWZWcWcVddefjek%lmm<<11NNceheqeqr)2i)?%EWH~$$--i>||~$'YZ^Y_%`aa;TB    optionsc                    |j                   d   }t        | j                               d|g}|j                  r5|j	                  d       |j	                  t        |j                               t        |dd      }|r+|j	                  d       |j	                  t        |             |j                  }|r^|j                  s|j                  rF|j	                  d       |j                  r|j                  n|j                  }|j	                  |       | j                  |      }|d   }|d	   }	t        j                  d
|	       t        |j                  d      r|r||_        d|_        |	S )zDetermines the path of the correct driver.

        :Args:
         - browser: which browser to get the driver path for.
        :Returns: The driver path to use
        browserNamez	--browserz--browser-versionbinary_locationNz--browser-pathz--proxybrowser_pathdriver_pathzUsing driver at: %s)capabilitiesstrr*   browser_versionappendgetattrproxy
http_proxy	ssl_proxyrunr   r#   hasattr	__class__r/   )
selfr,   browserargsr/   r7   valueoutputr0   r1   s
             r)   driver_locationzSeleniumManager.driver_locationO   s+    &&}5DOO%&W=""KK+,KKG3345!'+<dCKK()KKO,-e&&%//KK	"',EOOE<L<LEKK$n-]+*K87$$&78\&2G#&*G#r+   r?   c                    t         j                         t        j                  k(  r| j	                  d       | j	                  d       | j	                  d       | j	                  d       | j	                  d       dj                  |       }t         j                  d|       	 t        j                  dk(  r't        j                  | d	t        j                  
      }nt        j                  | d	      }|j                  j                  d      j                  d      }|j                  j                  d      j                  d      }t!        j"                  |      }|d   }|d   D ]K  }|d   dk(  rt         j)                  |d          |d   dk(  s	|d   dk(  s4t         j                  |d          M |j*                  rt'        d| d| |       |S # t$        $ r}t'        d|       |d}~ww xY w)zExecutes the Selenium Manager Binary.

        :Args:
         - args: the components of the command being executed.
        :Returns: The log string containing the driver location.
        z--debugz--language-bindingpythonz--outputjson zExecuting process: %sr   T)capture_outputcreationflags)rG   zutf-8
resultzUnsuccessful command executed: NlogslevelWARNmessageDEBUGINFOz.
)r   getEffectiveLevelloggingrO   r5   joinr#   r   r   
subprocessr:   CREATE_NO_WINDOWstdoutdecoderstripstderrrE   loads	Exceptionr   r   
returncode)	r?   commandcompleted_procrV   rY   rA   rJ   erritems	            r)   r:   zSeleniumManager.runv   s    ##%6KK	"()HJF((4.,g6
	[||w&!+TYcYtYt!u!+T!J#**11':AA$GF#**11':AA$GFZZ'FH%F 6N 	.DG}&tI/G}'4=F+BT)_-		. $$$'FwisSYRZ[aZb%cdd  	[$'Fwi%PQWZZ	[s   #B?G 	G3G..G3N)__name__
__module____qualname____doc__staticmethodr   r*   r   r3   rB   r   dictr:    r+   r)   r   r       s]    
 & & &P%{ %s %N $$s) $ $ $r+   r   )rE   rR   r   r   rT   r   pathlibr   typingr   selenium.commonr   !selenium.webdriver.common.optionsr   	getLoggerra   r   r   rg   r+   r)   <module>rm      sC   "   	   
   . 9			8	${ {r+   