
    ,h                     d    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Zd dlZd dlm	Z	  G d d      Z
y)    N)SeleniumManagerc                   h     e Zd ZdZddZd Zd Z fdZ fdZd Z	d Z
dd	Zdd
Zd Zd Z xZS )Servera  Manage a Selenium Grid (Remote) Server in standalone mode.

    This class contains functionality for downloading the server and starting/stopping it.

    For more information on Selenium Grid, see:
        - https://www.selenium.dev/documentation/grid/getting_started/

    Parameters:
    -----------
    host : str
        Hostname or IP address to bind to (determined automatically if not specified)
    port : int or str
        Port to listen on (4444 if not specified)
    path : str
        Path/filename of existing server .jar file (Selenium Manager is used if not specified)
    version : str
        Version of server to download (latest version if not specified)
    log_level : str
        Logging level to control logging output ("INFO" if not specified)
        Available levels: "SEVERE", "WARNING", "INFO", "CONFIG", "FINE", "FINER", "FINEST"
    env: collections.abc.Mapping
        Mapping that defines the environment variables for the server process
    c                 D   |r|rt        d      || _        | j                  |      | _        | j	                  |      | _        | j                  |      | _        | j                  |      | _	        | j                  |      | _        d | _        | j                         | _        y )NzCNot allowed to specify a version when using an existing server path)	TypeErrorhost_validate_portport_validate_pathpath_validate_versionversion_validate_log_level	log_level_validate_envenvprocess_get_status_url
status_url)selfr   r
   r   r   r   r   s          b/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/selenium/webdriver/remote/server.py__init__zServer.__init__7   s    Gabb	''-	''-	--g611)<%%c*..0    c                 \    | j                   | j                   nd}d| d| j                   dS )N	localhostzhttp://:z/status)r   r
   )r   r   s     r   r   zServer._get_status_urlE   s/     II1tyy{a		{'22r   c                 d    |r-t         j                  j                  |      st        d|       |S )Nz"Can't find server .jar located at )osr   existsOSError)r   r   s     r   r   zServer._validate_pathI   s,    t,>tfEFFr   c                     	 t        |      }d|cxk  rdk  st        d       t        d      |S # t        $ r t        j                   d| d      w xY w)Nz".__init__() got an invalid port: ''r   i  zport must be 0-65535)int
ValueErrorr   __name__)r   r
   	__class__s     r   r	   zServer._validate_portN   sy    	^t9D T"U"344 #344	  	^y1122TUYTZZ[\]]	^s	   2 %Ac                     |r:t        j                  dt        |            st        j                   d| d      |S )Nz^\d+\.\d+\.\d+$z%.__init__() got an invalid version: 'r"   )rematchstrr   r%   )r   r   r&   s     r   r   zServer._validate_versionW   sA    88.G=9#5#5"66[\c[dde fggr   c                 L    d}||vrt        ddj                  |             |S )N)SEVEREWARNINGINFOCONFIGFINEFINERFINESTzlog_level must be one of: z, )r   join)r   r   levelss      r   r   zServer._validate_log_level]   s2    SF"869J8KLMMr   c                 h    |/t        |t        j                  j                        st	        d      |S )Nz.env must be a mapping of environment variables)
isinstancecollectionsabcMappingr   )r   r   s     r   r   zServer._validate_envc   s+    ?:c;??3J3J#KLMM
r   c                 ^   t        j                          }t        j                          |z
  |k  r+	 t        j                  j                  | j                         yy# t        j
                  j                  $ r t        j                  d       Y nw xY wt        j                          |z
  |k  rU)NTg?F)timeurllibrequesturlopenr   errorURLErrorsleep)r   timeoutstarts      r   _wait_for_serverzServer._wait_for_serverh   s    		iikE!G+ &&t7  <<((  

3 	 iikE!G+s   )A 2BBc                 f    dg}||j                  |       t               j                  |      d   S )zqDownload the server if it doesn't already exist.

        Latest version is downloaded unless specified.
        z--griddriver_path)appendr   binary_paths)r   r   argss      r   download_if_neededzServer.download_if_neededr   s6    
 zKK  --d3MBBr   c                    | j                   | j                  | j                        n| j                   }t        j                  d      }|t        d      |d|ddt        | j                        d| j                  dd	d
d	g}| j                  |j                  d| j                  g       | j                  | j                  nd}	 t        j                  t        j                  t        j                        5 }|j                  || j                  f       ddd       t        d| j                         # 1 sw Y   !xY w# t         $ r t#        d       t%        j&                  || j(                        | _        t#        d| j*                  j,                          | j/                         st1        d| j2                         t#        d       Y | j*                  S w xY w)zStart the server.

        Selenium Manager will detect the server location and download it if necessary,
        unless an existing server path was specified.
        NjavazJCan't find java on system PATH. JRE is required to run the Selenium serverz-jar
standalonez--portz--log-levelz--selenium-managertruez--enable-managed-downloadsz--hostr   zDSelenium server is already running, or something else is using port zStarting Selenium server...)r   z$Selenium server running as process: z)Timed out waiting for Selenium server at zSelenium server is ready)r   rJ   r   shutilwhichr    r*   r
   r   r   extendsocketAF_INETSOCK_STREAMconnectConnectionErrorConnectionRefusedErrorprint
subprocessPopenr   r   pidrD   TimeoutErrorr   )r   r   	java_pathcommandr   socks         r   rC   zServer.start|   s    9=		8It&&t||4tyyLL(	fgg 		NNN (
 99 NNHdii01 II1tyy{
	.v~~v/A/AB 0ddDII./0!$himirirhs"tuu0 0 & 	./0%++GBDL89I9I8JKL((*"%NtN_#`aa,-||	.s+   2E 7D5 E 5D>:E BGGc                     | j                   t        d      | j                   j                         4| j                   j                          | j                   j	                          d| _         t        d       y)zStop the server.NzSelenium server isn't runningz#Selenium server has been terminated)r   RuntimeErrorpoll	terminatewaitrX   )r   s    r   stopzServer.stop   s[    <<>??||  "*&&(!!#DL78r   )Ni\  NNr.   N)
   )N)r%   
__module____qualname____doc__r   r   r   r	   r   r   r   rD   rJ   rC   re   __classcell__)r&   s   @r   r   r      sA    013

C*X	9r   r   )r7   r   r(   rO   rR   rY   r;   r<   *selenium.webdriver.common.selenium_managerr   r    r   r   <module>rm      s.   $  	 	      FS9 S9r   