a
     h                     @   s^   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 dZ
dS )    N)SeleniumManagerc                       s   e Zd ZdZd!ddZedd Zed	d
 Zejdd
 Zedd Z	e	j fddZ	edd Z
e
j fddZ
edd Zejdd Zedd Zejdd Zd"ddZd#ddZdd Zdd  Z  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
    N\  INFOc                 C   s>   |r|rt d|| _|| _|| _|| _|| _|| _d | _d S )NzCNot allowed to specify a version when using an existing server path)	TypeErrorhostportpathversion	log_levelenvprocess)selfr   r   r	   r
   r   r    r   e/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/selenium/webdriver/remote/server.py__init__7   s    zServer.__init__c                 C   s(   | j d ur| j nd}d| d| j dS )N	localhostzhttp://:z/status)r   r   )r   r   r   r   r   
status_urlC   s    zServer.status_urlc                 C   s   | j S N)_pathr   r   r   r   r	   H   s    zServer.pathc                 C   s(   |rt j|std| || _d S )Nz"Can't find server .jar located at )osr	   existsOSErrorr   )r   r	   r   r   r   r	   L   s    c                 C   s   | j S r   )_portr   r   r   r   r   R   s    zServer.portc                    s^   zt |}W n( ty4   t j d| dY n0 d|  krJdksTn td|| _d S )Nz".__init__() got an invalid port: ''r   i  zport must be 0-65535)int
ValueErrorr   __name__r   )r   r   	__class__r   r   r   V   s    c                 C   s   | j S r   )_versionr   r   r   r   r
   `   s    zServer.versionc                    s4   |r*t dt|s*t j d| d|| _d S )Nz^\d+\.\d+\.\d+$z%.__init__() got an invalid version: 'r   )rematchstrr   r   r"   )r   r
   r    r   r   r
   d   s    c                 C   s   | j S r   )
_log_levelr   r   r   r   r   k   s    zServer.log_levelc                 C   s*   d}||vr t dd| || _d S )N)ZSEVEREWARNINGr   ZCONFIGZFINEZFINERZFINESTzlog_level must be one of: z, )r   joinr&   )r   r   levelsr   r   r   r   o   s    c                 C   s   | j S r   )_envr   r   r   r   r   v   s    z
Server.envc                 C   s(   |d urt |tjjstd|| _d S )Nz.env must be a mapping of environment variables)
isinstancecollectionsabcMappingr   r*   )r   r   r   r   r   r   z   s    
   c                 C   sT   t   }t   | |k rPztj| j W dS  tjjyL   t d Y q0 qdS )NTg?F)timeurllibrequesturlopenr   errorURLErrorsleep)r   timeoutstartr   r   r   _wait_for_server   s    zServer._wait_for_serverc                 C   s(   dg}|dur| | t |d S )zqDownload the server if it doesn't already exist.

        Latest version is downloaded unless specified.
        z--gridNZdriver_path)appendr   Zbinary_paths)r   r
   argsr   r   r   download_if_needed   s    
zServer.download_if_neededc                 C   sF  | j du r| | jn| j }td}|du r6td|d|ddt| jd| jdd	d
d	g}| j	durt|
d| j	g | j	dur| j	nd}zTttjtj }||| jf W d   n1 s0    Y  td| j W nb ty>   td tj|| jd| _td| jj  |  s2td| j td Y n0 | jS )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	   r<   r
   shutilwhichr   r%   r   r   r   extendsocketAF_INETSOCK_STREAMconnectConnectionErrorConnectionRefusedErrorprint
subprocessPopenr   r   pidr9   TimeoutErrorr   )r   r	   Z	java_pathcommandr   sockr   r   r   r8      s@    

.
zServer.startc                 C   sH   | j du rtdn0| j  du r6| j   | j   d| _ td dS )zStop the server.NzSelenium server isn't runningz#Selenium server has been terminated)r   RuntimeErrorpoll	terminatewaitrI   r   r   r   r   stop   s    



zServer.stop)Nr   NNr   N)r/   )N)r   
__module____qualname____doc__r   propertyr   r	   setterr   r
   r   r   r9   r<   r8   rT   __classcell__r   r   r    r   r      s8   




	








,r   )r,   r   r#   r@   rC   rJ   r0   r1   Z*selenium.webdriver.common.selenium_managerr   r   r   r   r   r   <module>   s   