o
    衡i                     @   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)LocalWebDriver)Commandc                       s  e Zd ZdZ			d-dedededB dedB ded	df fd
dZdd Z	dd Z
d.ddZd.d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  ZS )/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| j}| r%| | j_d| j_| j p-|	 | j_
| j  t| jj|||| jjd}zt j|| jd W dS  tyZ   |    w )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: 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   )r   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)selfr	   r
   r   r   r   finderexecutor	__class__ v/var/www/html/asbeauty/laura_geller_scraping/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_appG      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_conditionsO   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   r3   r$   r$   r%   set_network_conditionsW   s   z%ChromiumDriver.set_network_conditionsc                 C   s   |  d dS )z+Resets Chromium network emulation settings.deleteNetworkConditionsNr)   r0   r$   r$   r%   delete_network_conditionsi      z(ChromiumDriver.delete_network_conditionsnamer/   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")
        setPermissionsr8   )
descriptorstateNr)   )r   r8   r/   r$   r$   r%   set_permissionsm   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?   y   s   zChromiumDriver.execute_cdp_cmdc                 C   r-   )z'Get a list of sinks available for Cast.getSinksr/   r)   r0   r$   r$   r%   	get_sinks   r7   zChromiumDriver.get_sinksc                 C   r-   )zCReturns an error message when there is any issue in a Cast session.getIssueMessager/   r)   r0   r$   r$   r%   get_issue_message   r7   z ChromiumDriver.get_issue_messagec                 C   s   |  tjd S )zpGets a list of the available log types.

        Example:
        --------
        >>> driver.log_types
        r/   )r*   r   GET_AVAILABLE_LOG_TYPESr0   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")
        typer/   )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   rJ   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.
        startDesktopMirroringrL   r)   rM   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.
        startTabMirroringrL   r)   rM   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.
        stopCastingrL   r)   rM   r$   r$   r%   stop_casting   r,   zChromiumDriver.stop_casting)NNT)r   N)__name__
__module____qualname____doc__strr   r   boolr   r+   r1   r4   r6   r<   dictr?   listrA   rC   propertyrE   rI   rN   rP   rR   rT   __classcell__r$   r$   r"   r%   r      sB    *


	r   N)#selenium.webdriver.chromium.optionsr   -selenium.webdriver.chromium.remote_connectionr   #selenium.webdriver.chromium.servicer   'selenium.webdriver.common.driver_finderr   #selenium.webdriver.common.webdriverr   !selenium.webdriver.remote.commandr   r   r$   r$   r$   r%   <module>   s   