
    /_ib                     N    d dl Z d dlZd dlmZ d dlmZ d dlmZ  G d de      Zy)    N)BinaryIO)DesiredCapabilities)
ArgOptionsc                       e Zd ZdZd fdZedefd       Zej                  deddfd       Zededz  fd       Z	e	j                  deddfd	       Z	ede
e   fd
       ZdeddfdZdeddfdZedefd       Zdedeez  ez  e
e   z  ddfdZedefd       Zej                  deddfd       ZdefdZedefd       Z xZS )ChromiumOptionszgoog:chromeOptionsreturnNc                 v    t         |           d| _        g | _        g | _        i | _        d| _        d| _        y)z1Initialize ChromiumOptions with default settings. NF)super__init___binary_location_extension_files_extensions_experimental_options_debugger_address_enable_webextensions)self	__class__s    b/var/www/html/land_sniper/venv/lib/python3.12/site-packages/selenium/webdriver/chromium/options.pyr   zChromiumOptions.__init__   s>    %'+-&(NP"-1+0"    c                     | j                   S )z>Returns the location of the binary, otherwise an empty string.)r   r   s    r   binary_locationzChromiumOptions.binary_location'   s     $$$r   valuec                 \    t        |t              st        | j                        || _        y)zzAllows you to set where the chromium binary lives.

        Args:
            value: Path to the Chromium binary.
        N)
isinstancestr	TypeErrorBINARY_LOCATION_ERRORr   r   r   s     r   r   zChromiumOptions.binary_location,   s'     %%D6677 %r   c                     | j                   S )z4Returns the address of the remote devtools instance.)r   r   s    r   debugger_addressz ChromiumOptions.debugger_address7   s     %%%r   c                 H    t        |t              st        d      || _        y)zSet the address of the remote devtools instance for active wait connection.

        Args:
            value: Address of remote devtools instance if any (hostname[:port]).
        z!Debugger Address must be a stringN)r   r   r   r   r    s     r   r"   z ChromiumOptions.debugger_address<   s"     %%?@@!&r   c                     dt         dt        fd}g }| j                  D ].  }t        |d      5 }|j	                   ||             ddd       0 || j
                  z   S # 1 sw Y   IxY w)z9Returns a list of encoded extensions that will be loaded.	file_datar   c                 f    t        j                  | j                               j                  d      S )Nzutf-8)base64	b64encodereaddecode)r%   s    r   _decodez+ChromiumOptions.extensions.<locals>._decodeK   s'     ##INN$45<<WEEr   rbN)r   r   r   openappendr   )r   r+   encoded_extensions	extensionfs        r   
extensionszChromiumOptions.extensionsG   s    	Fx 	FC 	F  .. 	6Ii& 6!"))'!*56 6	6 "D$4$4446 6s   AA(	r0   c                     |rt         j                  j                  t         j                  j                  |            }t         j                  j	                  |      r| j
                  j                  |       yt        d      t        d      )zAdd the path to an extension to be extracted to ChromeDriver.

        Args:
            extension: Path to the *.crx file.
        z#Path to the extension doesn't existargument can not be nullN)	ospathabspath
expanduserexistsr   r.   OSError
ValueError)r   r0   extension_to_adds      r   add_extensionzChromiumOptions.add_extensionX   sg     !wwrww/A/A)/LMww~~./%%,,-=>CDD788r   c                 T    |r| j                   j                  |       yt        d      )zAdd Base64-encoded string with extension data to be extracted to ChromeDriver.

        Args:
            extension: Base64 encoded string with extension data.
        r4   N)r   r.   r;   )r   r0   s     r   add_encoded_extensionz%ChromiumOptions.add_encoded_extensiong   s'     ##I.788r   c                     | j                   S )z:Returns a dictionary of experimental options for chromium.r   r   s    r   experimental_optionsz$ChromiumOptions.experimental_optionsr        )))r   namec                 "    || j                   |<   y)zAdds an experimental option which is passed to chromium.

        Args:
            name: The experimental option name.
            value: The option value.
        NrA   )r   rD   r   s      r   add_experimental_optionz'ChromiumOptions.add_experimental_optionw   s     ,1""4(r   c                     | j                   S )zKReturn whether webextension support is enabled for Chromium-based browsers.)r   r   s    r   enable_webextensionsz$ChromiumOptions.enable_webextensions   rC   r   c                     || _         |r,ddg}|D ]"  }|| j                  vs| j                  |       $ yddg}|D ],  }|| j                  v s| j                  j                  |       . y)a  Enables or disables webextension support for Chromium-based browsers.

        Args:
            value: True to enable webextension support, False to disable.

        Notes:
            - When enabled, this automatically adds the required Chromium flags:
                - --enable-unsafe-extension-debugging
                - --remote-debugging-pipe
            - When disabled, this removes BOTH flags listed above, even if they were manually added via add_argument()
              before enabling webextensions.
            - Enabling --remote-debugging-pipe makes the connection b/w chromedriver
              and the browser use a pipe instead of a port, disabling many CDP functionalities
              like devtools
        z#--enable-unsafe-extension-debuggingz--remote-debugging-pipeN)r   
_argumentsadd_argumentremove)r   r   required_flagsflagflags_to_removes        r   rH   z$ChromiumOptions.enable_webextensions   s~    " &+"CE^_N& ,t.%%d+,
  EF_`O' 14??*OO**401r   c                 f   | j                   }| j                  j                         }| j                  r|j	                  | j                         | j
                  |d<   | j                  r| j                  |d<   | j                  |d<   | j                  r| j                  |d<   ||| j                  <   |S )zCreates a capabilities with all the options that have been set.

        Returns:
            A dictionary with all set options.
        r2   binaryargsdebuggerAddress)
_capsrB   copymobile_optionsupdater2   r   rJ   r"   KEY)r   capschrome_optionss      r   to_capabilitieszChromiumOptions.to_capabilities   s     zz22779!!$"5"56'+|$'+';';N8$!%v  040E0EN,-'TXXr   c                 >    t         j                  j                         S )N)r   CHROMErU   r   s    r   default_capabilitiesz$ChromiumOptions.default_capabilities   s    "))..00r   )r   N)__name__
__module____qualname__rX   r   propertyr   r   setterr"   listr2   r=   r?   dictrB   intrF   boolrH   r[   r^   __classcell__)r   s   @r   r   r      s   
C1 % % % &S &T & & &#* & & 'c 'd ' ' 5DI 5 5 9s 9t 9	9s 	9t 	9 *d * *1C 1c	D8H4PS98T 1Y] 1 *d * *   1$ 14 1 !1< * 1d 1 1r   r   )	r'   r5   typingr   .selenium.webdriver.common.desired_capabilitiesr   !selenium.webdriver.common.optionsr   r    r   r   <module>rm      s$   $  	  N 8a1j a1r   