
    $)f                      V    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e
      Zy)	    )ChromiumRemoteConnection)DriverFinder)
ArgOptions)Service)	WebDriverc                        e Zd ZdZdd e       ddfdededededed	df fd
Zd Z	d Z
ddZddZdeded	dfdZdedefdZd	efdZd Zded	efdZded	efdZded	efdZded	efdZd fdZ xZS )ChromiumDriverzZControls the WebDriver instance of ChromiumDriver and allows you to
    drive the browser.NTbrowser_namevendor_prefixoptionsservice
keep_alivereturnc                 p   || _         t        j                  | j                   |      | j                   _        | j                   j	                          t        | j                   j                  ||||j                        }	 t        | %  ||       d| _        y# t        $ r | j                           w xY w)aU  Creates a new WebDriver instance of the ChromiumDriver. Starts the
        service and then creates new WebDriver instance of ChromiumDriver.

        :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.
        )remote_server_addrr
   r   r   ignore_proxy)command_executorr   FN)r   r   get_pathpathstartr   service_url_ignore_local_proxysuper__init__	Exceptionquit
_is_remote)selfr
   r   r   r   r   executor	__class__s          b/var/www/html/flask-app/venv/lib/python3.12/site-packages/selenium/webdriver/chromium/webdriver.pyr   zChromiumDriver.__init__   s    $ (11$,,H+#||77%'! 44
	GhH
  	  	IIK	s   B B5c                 *    | j                  dd|i      S )z&Launches Chromium app specified by id.	launchAppidexecute)r   r$   s     r!   
launch_appzChromiumDriver.launch_appD   s    ||K$44    c                 *    | j                  d      d   S )zGets Chromium network emulation settings.

        :Returns:     A dict. For example:     {'latency': 4,
        'download_throughput': 2, 'upload_throughput': 2,     'offline':
        False}
        getNetworkConditionsvaluer%   r   s    r!   get_network_conditionsz%ChromiumDriver.get_network_conditionsH   s     ||23G<<r(   c                 ,    | j                  dd|i       y)a  Sets Chromium network emulation settings.

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

        :Usage:
            ::

                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   r0   s     r!   set_network_conditionsz%ChromiumDriver.set_network_conditionsQ   s    " 	+.BDV-WXr(   c                 &    | j                  d       y)z+Resets Chromium network emulation settings.deleteNetworkConditionsNr%   r,   s    r!   delete_network_conditionsz(ChromiumDriver.delete_network_conditionsd   s    ./r(   namer+   c                 2    | j                  dd|i|d       y)zSets Applicable Permission.

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

        :Usage:
            ::

                driver.set_permissions('clipboard-read', 'denied')
        setPermissionsr5   )
descriptorstateNr%   )r   r5   r+   s      r!   set_permissionszChromiumDriver.set_permissionsh   s     	%vtnu'UVr(   cmdcmd_argsc                 2    | j                  d||d      d   S )a  Execute Chrome Devtools Protocol command and get returned result The
        command and command args should follow chrome devtools protocol
        domains/commands, refer to link
        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
        :Usage:
            ::

                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'}
        executeCdpCommand)r;   paramsr+   r%   )r   r;   r<   s      r!   execute_cdp_cmdzChromiumDriver.execute_cdp_cmdv   s!    $ ||/1QRSZ[[r(   c                 *    | j                  d      d   S )z-:Returns: A list of sinks available for Cast.getSinksr+   r%   r,   s    r!   	get_sinkszChromiumDriver.get_sinks   s    ||J'00r(   c                 *    | j                  d      d   S )zM:Returns: An error message when there is any issue in a Cast
        session.getIssueMessager+   r%   r,   s    r!   get_issue_messagez ChromiumDriver.get_issue_message   s     ||-.w77r(   	sink_namec                 *    | j                  dd|i      S )zSets a specific sink, using its name, as a Cast session receiver
        target.

        :Args:
         - sink_name: Name of the sink to use as the target.
        setSinkToUsesinkNamer%   r   rG   s     r!   set_sink_to_usezChromiumDriver.set_sink_to_use   s     ||NZ,CDDr(   c                 *    | j                  dd|i      S )zStarts a desktop mirroring session on a specific receiver target.

        :Args:
         - sink_name: Name of the sink to use as the target.
        startDesktopMirroringrJ   r%   rK   s     r!   start_desktop_mirroringz&ChromiumDriver.start_desktop_mirroring   s     ||3j)5LMMr(   c                 *    | j                  dd|i      S )zStarts a tab mirroring session on a specific receiver target.

        :Args:
         - sink_name: Name of the sink to use as the target.
        startTabMirroringrJ   r%   rK   s     r!   start_tab_mirroringz"ChromiumDriver.start_tab_mirroring   s     ||/*i1HIIr(   c                 *    | j                  dd|i      S )zStops the existing Cast session on a specific receiver target.

        :Args:
         - sink_name: Name of the sink to stop the Cast session.
        stopCastingrJ   r%   rK   s     r!   stop_castingzChromiumDriver.stop_casting   s     ||MJ	+BCCr(   c                     	 t         |           | j                  j	                          y# t        $ r Y &w xY w# | j                  j	                          w xY w)z@Closes the browser and shuts down the ChromiumDriver executable.N)r   r   r   r   stop)r   r    s    r!   r   zChromiumDriver.quit   sJ    	 GLN
 LL	  		 LLs   , 	8; 8; A)r   N)__name__
__module____qualname____doc__r   strr   boolr   r'   r-   r1   r4   r:   dictr@   listrC   rF   rL   rO   rR   rU   r   __classcell__)r    s   @r!   r	   r	      s   
 !!(l% %  %  	% 
 %  %  
% N5=Y&0WC W W W\3 \$ \(14 18
E E EN N NJS JT JDc Dd D   r(   r	   N)-selenium.webdriver.chromium.remote_connectionr   'selenium.webdriver.common.driver_finderr   !selenium.webdriver.common.optionsr   !selenium.webdriver.common.servicer   #selenium.webdriver.remote.webdriverr   RemoteWebDriverr	    r(   r!   <module>rh      s%   $ S @ 8 5 Lc _ c r(   