a
    7ñ»jnD  ã                   @   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	 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mZmZ g d¢Ze e¡Zej d	¡Zeeejf ZdZe  ¡ Z!e "¡ Z#e $¡ Z%ej& 'ej& (ej)¡¡Z*G d
d„ dƒZ+dd„ Z,ddd„Z-ddd„Z.ddd„Z/dS )é    N)Úsuppress)Úsettings)Úchromium_drivers)Ú	constants)Úshared_utils)ÚUnionÚListÚOptional)ÚConfigÚfind_chrome_executableÚtemp_profile_dirÚis_rootÚis_posixÚPathLike)ÚdarwinÚcygwinÚlinuxZlinux2c                       sò   e Zd ZdZedddeeddeeeddfee ee ee ee ee eee	  ee ee	 e	e
eee	 ee	 edœ‡ fdd„Zed	d
„ ƒZedd„ ƒZejedœdd„ƒZeedœdd„ƒZedœdd„Zdd„ Ze	dœdd„Zdd„ Z‡  ZS )r
   zConfig objectFTzen-USN)Úuser_data_dirÚheadlessÚ	incognitoÚguestÚbrowser_executable_pathÚbrowser_argsÚsandboxÚlangÚhostÚportÚexpertÚproxyÚextension_dirÚkwargsc              $      s|  |sg }|s(t |d�| _| j| _d| _n¦|| _tj | jd¡}tj |d¡}t|d�}tj |¡s”t	t
ƒ� t |¡ W d  ƒ n1 sŠ0    Y  t|ddd��}t ||¡ W d  ƒ n1 sÄ0    Y  d}|sàtƒ }�n‚|d	k�rbd
dlm} d}t�rd}nt�rd}n
t�rd}tj t|¡}|tjjƒ}|�„ t	t
ƒ� t tjj¡ W d  ƒ n1 �sj0    Y  tj |¡�s°d
dlm} tj}| d¡ |j dd� |t_W d  ƒ n1 �sÆ0    Y  | !d¡d  !d¡d }|dv �rd}|d7 }|d7 }n.|dk�r d}|d7 }n|dv �r6d}|d7 }tj |¡�rNd}|}nt"|› d �ƒ tƒ }|| _#|| _$|| _%|| _&|| _'|| _(|	| _)|
| _*|| _+|| _,|| _-g | _.t/�rÎt0ƒ �rÎ|�rÎt1 2d!¡ d| _(d| _3|| _4| j5 6|¡ t7ƒ  8¡  t9j:}t9j;}t9j<}t9j=}d"||f d#||f d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEg$| _>|�rx| j> ?dF¡ dS )Gaé  
        Creates a config object.
        Can be called without any arguments to generate a best-practice config,
        which is recommended.
        Calling the object, eg: myconfig(), returns the list of arguments which
        are provided to the browser.
        Additional args can be added using the :py:obj:`~add_argument method`.
        Instances of this class are usually not instantiated by end users.
        :param user_data_dir: the data directory to use
        :param headless: set to True for headless mode
        :param browser_executable_path:
         Specify browser executable, instead of using autodetect.
        :param browser_args: Forwarded to browser executable.
         Eg: ["--some-chromeparam=somevalue", "some-other-param=someval"]
        :param sandbox: disables sandbox
        :param autodiscover_targets: use autodiscovery of targets
        :param lang:
         Language string to use other than the default "en-US,en;q=0.9"
        :param expert: When set to True, "expert" mode is enabled.
         This adds: --disable-web-security --disable-site-isolation-trials,
         as well as some scripts and patching useful for debugging.
         (For example, ensuring shadow-root is always in "open" mode.)
        :param kwargs:
        :type user_data_dir: PathLike
        :type headless: bool
        :type browser_executable_path: PathLike
        :type browser_args: list[str]
        :type sandbox: bool
        :type lang: str
        :type kwargs: dict
        ©r   FÚDefaultÚPreferencesNÚwúutf-8©ÚencodingZ
_chromium_r   )ÚFileLockú
chrome-maczchrome-linuxú
chrome-win)Ú
sb_installz&
Warning: Chromium binary not found...Úchromium)Úoverrideú/éÿÿÿÿú\)r)   ZChromiumz/Chromium.appz/Contents/MacOS/ChromiumÚchromez/chrome)r*   ú
chrome.exez\chrome.exeTz) not found. Defaulting to regular Chrome!z1Detected root usage, auto-disabling sandbox mode.z--window-size=%s,%sz--window-position=%s,%sz--no-first-runz--no-service-autorunz--disable-auto-reloadz--no-default-browser-checkz--homepage=about:blankz
--no-pingsz#--enable-unsafe-extension-debuggingz--wm-window-animations-disabledz--animation-duration-scale=0z!--enable-privacy-sandbox-ads-apisz*--safebrowsing-disable-download-protectionz9--simulate-outdated-no-au="Tue, 31 Dec 2099 23:59:59 GMT"z--test-typez--ash-no-nudgesz--password-store=basicz--deny-permission-promptsz--disable-breakpadz--disable-setuid-sandboxz--disable-prompt-on-repostz--disable-application-cachez--disable-password-generationz--disable-save-password-bubblez--disable-single-click-autofillz!--disable-ipc-flooding-protectionz%--disable-background-timer-throttlingz%--disable-search-engine-choice-screenz(--disable-backgrounding-occluded-windowsz(--disable-client-side-phishing-detectionz(--disable-device-discovery-notificationsz--disable-top-sitesz--disable-translatez--dns-prefetch-disablez --disable-renderer-backgroundingz--disable-dev-shm-usagez--use-mock-keychain)@r   r   Ú_user_data_dirÚ_custom_data_dirÚosÚpathÚjoinÚget_default_preferencesÚexistsr   Ú	ExceptionÚmakedirsÚopenÚjsonÚdumpr   Úfilelockr(   ÚIS_MACÚIS_LINUXÚ
IS_WINDOWSÚCHROMIUM_DIRr   ZMultiBrowserZDRIVER_FIXING_LOCKr   Zmake_writableZseleniumbase.console_scriptsr+   ÚsysÚargvZlog_dÚmainÚsplitÚprintÚ_browser_argsr   r   r   r   r   r   r   r   r   r   Ú_extensionsr   r   ÚloggerÚinfoZautodiscover_targetsr   Ú__dict__ÚupdateÚsuperÚ__init__r   ZCHROME_START_WIDTHZCHROME_START_HEIGHTZWINDOW_START_XZWINDOW_START_YÚ_default_browser_argsÚappend)Úselfr   r   r   r   r   r   r   r   r   r   r   r   r   r    ÚprofileÚpreferences_fileÚpreferencesÚfZmock_keychainr(   Zbinary_folderZbinary_locationZgui_lockr+   Zsys_argsZbinary_nameZstart_widthZstart_heightZstart_xZstart_y©Ú	__class__© úOE:\soccer\ml_env\Lib\site-packages\seleniumbase/undetected/cdp_driver/config.pyrP   )   sð    0

(*


ÿ$
&




ÿ



Ü&zConfig.__init__c                 C   s   t | j| j ƒS ©N)ÚsortedrQ   rI   ©rS   rZ   rZ   r[   r   Ù   s    zConfig.browser_argsc                 C   s   | j S r\   )r3   r^   rZ   rZ   r[   r   Ý   s    zConfig.user_data_dir)r6   c                 C   s   t |ƒ| _d| _d S )NT)Ústrr3   r4   )rS   r6   rZ   rZ   r[   r   á   s    
)Úreturnc                 C   s   | j S r\   )r4   r^   rZ   rZ   r[   Úuses_custom_data_diræ   s    zConfig.uses_custom_data_dir)Úextension_pathc                 C   s°   t  |¡}| ¡ s"tdt|ƒ ƒ‚| ¡ r‚tjdt 	d¡d�}t
 |d¡�&}| |¡ | j |¡ W d  ƒ q¬1 sv0    Y  n*| ¡ r¬| d¡D ]
}|j}q”| j |¡ dS )z¹
        Adds an extension to load. You can set the extension_path to a
        folder (containing the manifest), or an extension zip file (.crx)
        :param extension_path:
        z Could not find anything here: %sZ
extension_é   )ÚprefixÚsuffixÚrNz
manifest.*)ÚpathlibÚPathr9   ÚFileNotFoundErrorr_   Úis_fileÚtempfileÚmkdtempÚsecretsZ	token_hexÚzipfileÚZipFileÚ
extractallrJ   rR   Úis_dirÚrglobÚparent)rS   rb   r6   ÚtfÚzÚitemrZ   rZ   r[   Úadd_extensionê   s     

ÿ
ÿ
,zConfig.add_extensionc                    s  | j  ¡ ‰ ˆ d| j g7 ‰ ˆ dg7 ‰ | jr6ˆ ddg7 ‰ | jrjˆ  d| j d¡d  ¡ ˆ  d¡ ˆ  d	¡ | jr€ˆ  d
| j ¡ | jr ˆ  	‡ fdd„| jD ƒ¡ | j
r°ˆ  d¡ | jrÀˆ  d¡ | jrÐˆ  d¡ | jsàˆ  d¡ | jröˆ  d| j ¡ | j�rˆ  d| j ¡ ˆ S )Nz--user-data-dir=%saª  --disable-features=IsolateOrigins,site-per-process,Translate,InsecureDownloadWarnings,DownloadBubble,DownloadBubbleV2,OptimizationTargetPrediction,OptimizationGuideModelDownloading,SidePanelPinning,UserAgentClientHint,PrivacySandboxSettings4,OptimizationHintsFetching,InterestFeedContentSuggestions,Bluetooth,WebBluetooth,UnifiedWebBluetooth,ComponentUpdater,DisableLoadExtensionCommandLineSwitch,WebAuthentication,PasskeyAuthz--disable-web-securityz--disable-site-isolation-trialsz--proxy-server=%sú@r/   z--ignore-certificate-errorsz--ignore-ssl-errors=yesz--load-extension=%sc                    s   g | ]}|ˆ vr|‘qS rZ   rZ   )Ú.0Úarg©ÚargsrZ   r[   Ú
<listcomp>  ó    z#Config.__call__.<locals>.<listcomp>z--headless=newz--incognitoz--guestz--no-sandboxz--remote-debugging-host=%sz--remote-debugging-port=%s)rQ   Úcopyr   r   r   rR   rG   r   rI   Úextendr   r   r   r   r   r   r^   rZ   r{   r[   Ú__call__  s>    
ÿ
þ





zConfig.__call__©rz   c                    s2   t ‡ fdd„dD ƒƒr"tdˆ  ƒ‚| j ˆ ¡ d S )Nc                 3   s   | ]}|ˆ   ¡ v V  qd S r\   )Úlower)ry   Úxr‚   rZ   r[   Ú	<genexpr>,  s   ÿz&Config.add_argument.<locals>.<genexpr>)r   zdata-dirÚdata_dirz
no-sandboxZ
no_sandboxr   zU"%s" is not allowed. Please use one of the attributes of the Config object to set it.)ÚanyÚ
ValueErrorrI   rR   )rS   rz   rZ   r‚   r[   Úadd_argument+  s    þþÿzConfig.add_argumentc                 C   st   | j j› }i | j¥| j j¥ ¡ D ]N\}}|d dkr6q |s<q t|tƒrPt| |ƒ}t|ƒrZq |d|› d|› �7 }q |S )Nr   Ú_z
	z = )rY   Ú__name__rM   ÚitemsÚ
isinstanceÚpropertyÚgetattrÚcallable)rS   ÚsÚkÚvrZ   rZ   r[   Ú__repr__>  s    


zConfig.__repr__)r‹   Ú
__module__Ú__qualname__Ú__doc__ÚAUTOr	   r   Úboolr   r_   ÚintÚdictrP   rŽ   r   r   Úsetterra   rw   r�   r‰   r”   Ú__classcell__rZ   rZ   rX   r[   r
   &   sV   ò
ñ 1

*r
   c                  C   sF   ddl } ddl}z| ¡ dkW S  ty@   | jj ¡ dk Y S 0 dS )z�
    Helper function to determine if the user is trying to launch chrome
    under linux as root, which needs some alternative handling.
    r   N)Úctypesr5   ÚgetuidÚAttributeErrorÚwindllÚshell32ZIsUserAnAdmin)rž   r5   rZ   rZ   r[   r   M  s    r   c                 C   s@   dddœddddddddidddœdœ	}| r<ddddœ|d	< |S )
NF)Zpassword_manager_leak_detectionZpassword_manager_enabledr   Znotifications_enabled)Zprofile_enabledZcredit_card_enabled)	rT   Zcredentials_enable_servicez omnibox-max-zero-suggest-matchesz omnibox-zero-suggest-prefetchingz'omnibox-zero-suggest-prefetching-on-srpz'omnibox-zero-suggest-prefetching-on-webz&omnibox-zero-suggest-in-memory-cachingZlocal_discoveryZautofillZdisable_non_proxied_udp)Zip_handling_policyZmultiple_routes_enabledZnonproxied_udp_enabledZwebrtcrZ   )r   ZprefsrZ   rZ   r[   r8   [  s*    þÿþòý
r8   c                 C   s¶   t j tjdd�¡}t j |d¡}t j |d¡}t| d�}t j |¡sxtt	ƒ� t  
|¡ W d  ƒ n1 sn0    Y  t|ddd	��}t ||¡ W d  ƒ n1 s¨0    Y  |S )
zGenerate a temp dir (path)Zuc_)rd   r"   r#   r!   Nr$   r%   r&   )r5   r6   Únormpathrk   rl   r7   r8   r9   r   r:   r;   r<   r=   r>   )r   r6   rT   rU   rV   rW   rZ   rZ   r[   r   x  s    

(*r   Fc              	   C   sd  g }t rZtj d¡ tj¡D ]$}dD ]}| tj ||f¡¡ q$qdt	j
v r˜|ddg7 }n>ttjjdƒD ].}|durhdD ]}| tj ||d	f¡¡ qxqhg }|D ]T}tj |¡ræt |tj¡ræt |tj¡ræt d
| ¡ | |¡ q t d| ¡ q d}| �r
|�r
|S |�r0t|ƒdk�r0t|dd„ d�}nt|ƒdk�rF|d }|�rXtj |¡S tdƒ‚dS )z\
    Finds the chrome, beta, canary, chromium executable
    and returns the disk path.
    ÚPATH)zgoogle-chromezgoogle-chrome-stablezgoogle-chrome-betazgoogle-chrome-devzgoogle-chrome-unstabler1   r,   zchromium-browserr   z</Applications/Google Chrome.app/Contents/MacOS/Google Chromez2/Applications/Chromium.app/Contents/MacOS/Chromium)ZPROGRAMFILESzPROGRAMFILES(X86)ÚLOCALAPPDATAZPROGRAMW6432N)zGoogle/Chrome/ApplicationzGoogle/Chrome Beta/Applicationz Google/Chrome Canary/Applicationr2   z%s is a valid candidate... zL%s is not a valid candidate because it doesn't exist or isn't an executable.é   c                 S   s   t | ƒS r\   )Úlen)r„   rZ   rZ   r[   Ú<lambda>Å  r~   z(find_chrome_executable.<locals>.<lambda>)Úkeyr   z¡Could not find a valid chrome browser binary. Please make sure Chrome is installed. Or use the keyword argument: 'browser_executable_path=/path/to/your/browser'.)r   r5   ÚenvironÚgetrG   ÚpathseprR   Úsepr7   rD   ÚplatformÚmapr6   r9   ÚaccessÚR_OKÚX_OKrK   Údebugr§   Úminr£   ri   )Z
return_allÚ
candidatesrv   ÚsubitemÚrvÚ	candidateÚwinnerrZ   rZ   r[   r   †  s\    

þþ	ÿ
ÿþýþÿÿr   )N)N)F)0r=   Úloggingr5   rg   rm   rD   rk   rn   Ú
contextlibr   Zseleniumbase.configr   Zseleniumbase.driversr   Zseleniumbase.fixturesr   r   Útypingr   r   r	   Ú__all__Ú	getLoggerr‹   rK   r®   Ú
startswithr   r_   rh   r   r˜   Zis_macr@   Zis_linuxrA   Z
is_windowsrB   r6   ÚdirnameÚrealpathÚ__file__rC   r
   r   r8   r   r   rZ   rZ   rZ   r[   Ú<module>   s>   	
ÿ  )

