o
    ѷ6i!                     @   s\   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 G dd deZd	S )
    )ChromiumOptions)ChromiumRemoteConnection)ChromiumService)DriverFinder)Command)	WebDriverc                       s>  e Zd ZdZ					d5dedB dedB dedB dedB ded	df fd
dZdd Z	dd Z
d6ddZd6ddZdeded	dfddZdedef fddZd	efddZdd Zed d! Zd"d# Zd$ed	efd%d&Zd$ed	efd'd(Zd$ed	efd)d*Zd$ed	efd+d,Zd6 fd-d.Zd/d0 Zd1d2 Zd3d4 Z  ZS )7ChromiumDriverzGControl the WebDriver instance of ChromiumDriver and drive the browser.NTbrowser_namevendor_prefixoptionsservice
keep_alivereturnc                    s   |r|nt  | _|r|nt }t| j|}| r!| |_d|_| j p)| | j_	| j
  t| jj||||jd}z
t j||d W n tyS   |    w d| _dS )a$  Create a new WebDriver instance, start the service, and create new ChromiumDriver instance.

        Args:
            browser_name: Browser name used when matching capabilities.
            vendor_prefix: Company prefix to apply to vendor-specific WebDriver extension commands.
            options: This takes an instance of ChromiumOptions.
            service: Service object for handling the browser driver if you need to pass extra details.
            keep_alive: Whether to configure ChromiumRemoteConnection to use HTTP keep-alive.
        N)remote_server_addrr	   r
   r   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   r   r   finderexecutor	__class__ j/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.pyr      s,   


zChromiumDriver.__init__c                 C      |  dd|iS )ztLaunches Chromium app specified by id.

        Args:
            id: The id of the Chromium app to launch.
        	launchAppidexecute)r    r)   r%   r%   r&   
launch_appJ      zChromiumDriver.launch_appc                 C      |  dd S )zGets Chromium network emulation settings.

        Returns:
            A dict. For example: {'latency': 4, 'download_throughput': 2, 'upload_throughput': 2}
        getNetworkConditionsvaluer*   r    r%   r%   r&   get_network_conditionsR   s   z%ChromiumDriver.get_network_conditionsc                 K   s   |  dd|i dS )a  Sets Chromium network emulation settings.

        Args:
            **network_conditions: A dict with conditions specification.

        Example:
            driver.set_network_conditions(
                offline=False,
                latency=5,  # additional latency (ms)
                download_throughput=500 * 1024,  # maximal throughput
                upload_throughput=500 * 1024,
            )  # maximal throughput

            Note: `throughput` can be used to set both (for download and upload).
        setNetworkConditionsnetwork_conditionsNr*   )r    r4   r%   r%   r&   set_network_conditionsZ   s   z%ChromiumDriver.set_network_conditionsc                 C   s   |  d dS )z+Resets Chromium network emulation settings.deleteNetworkConditionsNr*   r1   r%   r%   r&   delete_network_conditionsl      z(ChromiumDriver.delete_network_conditionsnamer0   c                 C   s   |  dd|i|d dS )zSets Applicable Permission.

        Args:
            name: The item to set the permission on.
            value: The value to set on the item

        Example:
            driver.set_permissions("clipboard-read", "denied")
        setPermissionsr9   )
descriptorstateNr*   )r    r9   r0   r%   r%   r&   set_permissionsp   s   
zChromiumDriver.set_permissionscmdcmd_argsc                    s   t  ||S )a  Execute Chrome Devtools Protocol command and get returned result.

        The command and command args should follow chrome devtools protocol domains/commands

        See:
          - https://chromedevtools.github.io/devtools-protocol/

        Args:
            cmd: A str, command name
            cmd_args: A dict, command args. empty dict {} if there is no command args

        Example:
            `driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': requestId})`

        Returns:
            A dict, empty dict {} if there is no result to return.
            For example to getResponseBody:
            {'base64Encoded': False, 'body': 'response body string'}
        )r   execute_cdp_cmd)r    r>   r?   r#   r%   r&   r@   |   s   zChromiumDriver.execute_cdp_cmdc                 C   r.   )z'Get a list of sinks available for Cast.getSinksr0   r*   r1   r%   r%   r&   	get_sinks   r8   zChromiumDriver.get_sinksc                 C   r.   )zCReturns an error message when there is any issue in a Cast session.getIssueMessager0   r*   r1   r%   r%   r&   get_issue_message   r8   z ChromiumDriver.get_issue_messagec                 C   s   |  tjd S )zpGets a list of the available log types.

        Example:
        --------
        >>> driver.log_types
        r0   )r+   r   GET_AVAILABLE_LOG_TYPESr1   r%   r%   r&   	log_types   s   zChromiumDriver.log_typesc                 C   s   |  tjd|id S )a/  Gets the log for a given log type.

        Args:
            log_type: Type of log that which will be returned

        Example:
            >>> driver.get_log("browser")
            >>> driver.get_log("driver")
            >>> driver.get_log("client")
            >>> driver.get_log("server")
        typer0   )r+   r   GET_LOG)r    log_typer%   r%   r&   get_log   s   zChromiumDriver.get_log	sink_namec                 C   r'   )zSet a specific sink as a Cast session receiver target.

        Args:
            sink_name: Name of the sink to use as the target.
        setSinkToUsesinkNamer*   r    rK   r%   r%   r&   set_sink_to_use   r-   zChromiumDriver.set_sink_to_usec                 C   r'   )zStarts a desktop mirroring session on a specific receiver target.

        Args:
            sink_name: Name of the sink to use as the target.
        startDesktopMirroringrM   r*   rN   r%   r%   r&   start_desktop_mirroring   r-   z&ChromiumDriver.start_desktop_mirroringc                 C   r'   )zStarts a tab mirroring session on a specific receiver target.

        Args:
            sink_name: Name of the sink to use as the target.
        startTabMirroringrM   r*   rN   r%   r%   r&   start_tab_mirroring   r-   z"ChromiumDriver.start_tab_mirroringc                 C   r'   )zStops the existing Cast session on a specific receiver target.

        Args:
            sink_name: Name of the sink to stop the Cast session.
        stopCastingrM   r*   rN   r%   r%   r&   stop_casting   r-   zChromiumDriver.stop_castingc                    sP   z!zt    W n	 ty   Y n	w W | j  dS W | j  dS | j  w )z@Closes the browser and shuts down the ChromiumDriver executable.N)r   r   r   r   stopr1   r#   r%   r&   r      s   zChromiumDriver.quitc                 O      t )zCDownload file functionality is not implemented for Chromium driver.NotImplementedErrorr    argskwargsr%   r%   r&   download_file      zChromiumDriver.download_filec                 O   rW   )zLGet downloadable files functionality is not implemented for Chromium driver.rX   rZ   r%   r%   r&   get_downloadable_files   r^   z%ChromiumDriver.get_downloadable_filesc                 O   rW   )zODelete downloadable files functionality is not implemented for Chromium driver.rX   rZ   r%   r%   r&   delete_downloadable_files   r^   z(ChromiumDriver.delete_downloadable_files)NNNNT)r   N)__name__
__module____qualname____doc__strr   r   boolr   r,   r2   r5   r7   r=   dictr@   listrB   rD   propertyrF   rJ   rO   rQ   rS   rU   r   r]   r_   r`   __classcell__r%   r%   r#   r&   r      sN    ,


	
r   N)#selenium.webdriver.chromium.optionsr   -selenium.webdriver.chromium.remote_connectionr   #selenium.webdriver.chromium.servicer   'selenium.webdriver.common.driver_finderr   !selenium.webdriver.remote.commandr   #selenium.webdriver.remote.webdriverr   RemoteWebDriverr   r%   r%   r%   r&   <module>   s   