
    ]*ir-                     R   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKr	S SK
Jr  S SKrSqSqSqSqSqSqSqS\4S jrS\4S jrS\4S jrS\4S jrS\4S jrS	\S\4S
 jrSS	\S\4S jjrS\4S jrS\4S jr S\S\4S jr!S\4S jr"S\4S jr#SS\4S jjr$S r%S r&g)    N)	WebDriverreturnc                  d    [         R                  R                  SS5      R                  5       S:H  $ )NLOG_HTMLfalsetrueosenvirongetlower     /app/utils.pyget_config_log_htmlr      s%    ::>>*g.446&@@r   c                  d    [         R                  R                  SS5      R                  5       S:H  $ )NHEADLESSr   r	   r   r   r   get_config_headlessr      s%    ::>>*f-335??r   c                  d    [         R                  R                  SS5      R                  5       S:H  $ )NDISABLE_MEDIAr   r   r	   r   r   r   get_config_disable_mediar      s%    ::>>/7399;vEEr   c                     [         b  [         $ [        R                  R                  [        R                  R	                  [        R                  R                  [        5      5      [        R                  S5      n [        R                  R                  U 5      (       d^  [        R                  R                  [        R                  R	                  [        R                  R                  [        5      5      S5      n [        U 5       n[        R                  " UR                  5       5      S   q [         sS S S 5        $ ! , (       d  f       g = f)Nzpackage.jsonversion)FLARESOLVERR_VERSIONr
   pathjoindirnameabspath__file__pardirisfileopenjsonloadsread)package_pathfs     r   get_flaresolverr_versionr(   #   s    '##77<<0I JBIIWefL77>>,''ww||BGGOOBGGOOH4M$NP^_	l	q#zz!&&(3I># 
		s   -D??
Ec                  H    [         b  [         $ [        R                  q [         $ N)PLATFORM_VERSIONr
   namer   r   r   get_current_platformr-   /   s    #wwr   proxyc                 >   [         R                  R                  U S   5      nUR                  nUR                  nUR
                  nU S   nU S   nSnSUUUUU4-  n[        R                  " 5       n	[        [        R                  R                  U	S5      S5       n
U
R                  U5        S S S 5        [        [        R                  R                  U	S5      S5       n
U
R                  U5        S S S 5        U	$ ! , (       d  f       NT= f! , (       d  f       U	$ = f)	Nurlusernamepassworda  
    {
        "version": "1.0.0",
        "manifest_version": 3,
        "name": "Chrome Proxy",
        "permissions": [
            "proxy",
            "tabs",
            "storage",
            "webRequest",
            "webRequestAuthProvider"
        ],
        "host_permissions": [
          "<all_urls>"
        ],
        "background": {
          "service_worker": "background.js"
        },
        "minimum_chrome_version": "76.0.0"
    }
    a  
    var config = {
        mode: "fixed_servers",
        rules: {
            singleProxy: {
                scheme: "%s",
                host: "%s",
                port: %d
            },
            bypassList: ["localhost"]
        }
    };

    chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

    function callbackFn(details) {
        return {
            authCredentials: {
                username: "%s",
                password: "%s"
            }
        };
    }

    chrome.webRequest.onAuthRequired.addListener(
        callbackFn,
        { urls: ["<all_urls>"] },
        ['blocking']
    );
    zmanifest.jsonwzbackground.js)urllibparseurlparseschemehostnameporttempfilemkdtempr"   r
   r   r   write)r.   
parsed_urlr7   hostr9   r1   r2   manifest_jsonbackground_jsproxy_extension_dirr'   s              r   create_proxy_extensionrB   7   s
   &&uU|4JFD??DZ HZ HM,< 	;#MJ #**,	bggll.@#	F!	 
G 
bggll.@#	F!	 
G  
G	F 
G	F s   C< D<
D

Dc           	        ^  [         R                  " S5        [        R                  " 5       nUR	                  S5        UR	                  S5        UR	                  S5        UR	                  S5        UR	                  S5        UR	                  S5        [
        R                  " 5       R                  S5      nU(       a  UR	                  S	5        UR	                  S
5        UR	                  S5        [        R                  R                  SS 5      nUb  UR	                  SU-  5        [        b  UR	                  S[        -  5        S nT (       ah  [        U 4S jS 5       5      (       aN  [        T 5      nUR	                  S5        UR	                  S[        R                  R                  U5      -  5        O=T (       a6  ST ;   a0  T S   n[         R                  " SU5        UR	                  SU-  5        Sn[!        5       (       a!  [        R"                  S:X  a  SnO
[%        5         S nS n[        R                  R'                  S5      (       a  SnO[)        5       n[*        b  [*        n[-        5       n	 [        R.                  " XXxU[!        5       S9n
Uc  [        R                  R5                  U
R6                  R8                  U
R6                  R:                  5      q[*        U
R6                  R<                  :w  a/  [>        R@                  " U
R6                  R<                  [*        5        Ub  [>        RB                  " U5        U
$ ! [0         a   n[         R2                  " SU-  5        UeS nAff = f)NzLaunching web browser...z--no-sandboxz--window-size=1920,1080z%--disable-search-engine-choice-screenz--disable-setuid-sandboxz--disable-dev-shm-usagez--no-zygote)armaarchz--disable-gpu-sandboxz--ignore-certificate-errorsz--ignore-ssl-errorsLANGz--accept-lang=%sz--user-agent=%sc              3   ,   >#    U  H	  oT;   v   M     g 7fr*   r   ).0keyr.   s     r   	<genexpr> get_webdriver.<locals>.<genexpr>   s     M-LcE\-Ls   )r0   r1   r2   z8--disable-features=DisableLoadExtensionCommandLineSwitchz--load-extension=%sr0   zUsing webdriver proxy: %sz--proxy-server=%sFntTz/app/chromedriver)optionsbrowser_executable_pathdriver_executable_pathversion_mainwindows_headlessheadlesszError starting Chrome: %s)"loggingdebugucChromeOptionsadd_argumentplatformmachine
startswithr
   r   r   
USER_AGENTallrB   r   r   r   r,   start_xvfb_displayexistsget_chrome_major_versionPATCHED_DRIVER_PATHget_chrome_exe_pathChrome	Exceptionerrorr   patcher	data_pathexe_nameexecutable_pathshutilcopyrmtree)r.   rM   
IS_ARMARCHlanguagerA   	proxy_urlrQ   driver_exe_pathrP   rN   driveres   `           r   get_webdriverrr      s   MM,-  G(23@A3423'!!#../?@J4567./zz~~fd+H/(:; .;<M-LMMM4U;WX2RWW__EX5YYZ	5E>%L	19=09<= 77d?# 
 OL	ww~~)**-/1*1O 2372A,<GZG\^  ggll6>>+C+CV^^E\E\]&.."@"@@KK668KL &)* M/  1A56s   4M 
M0M++M0c                     [         b  [         $ [        R                  R                  [        R                  R	                  [        R                  R                  [        5      5      SS5      n [        R                  R                  U 5      (       aA  [        R                  " U [        R                  5      (       d  [        SU  S35      eU q [         $ [        R                  R                  [        R                  R	                  [        R                  R                  [        5      5      SS5      n [        R                  R                  U 5      (       a  U q [         $ [        R                  " 5       q [         $ )NchromezChrome binary "zN" is not executable. Please, extract the archive with "tar xzf <file.tar.gz>".z
chrome.exe)CHROME_EXE_PATHr
   r   r   r   r   r   r^   accessX_OKrc   rU   find_chrome_executable)chrome_paths    r   ra   ra      s    "'',,rwwrwwx/HI8U]^K	ww~~k""yybgg..ok] ;X Y Z Z%'',,rwwrwwx/HI8UabK	ww~~k""%//1Or   c                     [         b  [         $ [        R                  S:X  a   [        [	        5       5      n OD[	        5       n[        R                  " SU S35      nUR                  5       n UR                  5         U R                  S5      S   R                  S5      S   q [         $ ! [
         a)     [        5       n  NC! [
         a    [        5       n   NZf = ff = f)NrL   "z" --version.r    )CHROME_MAJOR_VERSIONr
   r,   extract_version_nt_executablera   rc   extract_version_nt_registryextract_version_nt_folderpopenr%   closesplit)complete_versionry   processs      r   r_   r_      s    '##	ww$	?<=P=RS *+((Q{m;78 #<<>+11#6q9??DRH  	??#>#@  ?#<#> ?	?s)   B' '
C2
B>>CCCCexe_pathc                     SS K nUR                  U SS9nUR                  UR                  S   /S9  UR                  S   S   R
                  S   R                  S   R                  S5      $ )Nr   T)	fast_loadIMAGE_DIRECTORY_ENTRY_RESOURCE)directoriess   FileVersionzutf-8)pefilePEparse_data_directoriesDIRECTORY_ENTRYFileInfoStringTableentriesdecode)r   r   pes      r   r   r     sr    	8t	,B++,LMN   ;;q>!((+33NCJJ7SSr   c                      [         R                  " S5      n U R                  5       nSnXR                  S5      S-   S   H  nUS:w  a  X#-  nM    UR	                  5       $    UR	                  5       $ )Nz^reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome" zDisplayVersion    REG_SZ   
)r
   r   r%   rindexstrip)streamoutputgoogle_versionletters       r   r   r     sv    XXoqF[[]FN'ABRGHIT>$N!! J
 !!r   c                     [        S5       H  n SU (       a  SOS-   S-   n[        R                  R                  U5      (       d  M:  [        R                  " U5       Vs/ s H%  o"R                  5       (       d  M  UR                  PM'     nnU Hm  n[        R                  R                  U5      nSn[        R                  " XT5      nU(       d  MC  UR                  5       (       d  MZ  UR                  S5      s  s  $    M     gs  snf )N   zC:\Program Filesz (x86)r   z\Google\Chrome\Applicationz\d+\.\d+\.\d+\.\d+r   )
ranger
   r   isdirscandiris_dirbasenameresearchgroup)ir   r'   pathsfilenamepatternmatchs          r   r   r   +  s    1X"!h<?^^77==%'ZZ%5D%5VQVV%5ED77++D1/		'45U[[]] ;;q>) 	   Es   D:Dc                    [         b  [         $  U c
  [        5       n U R                  S5      q [        R                  " SS[         [        R
                  S9q [         U b+  [        S:X  a  U R                  5         U R                  5         $ $ ! [         a  n[        S[        U5      -   5      eS nAff = f! U b+  [        S:X  a  U R                  5         U R                  5         f f = f)Nzreturn navigator.userAgentr   r   )flagsrL   z"Error getting browser User-Agent. )r[   rr   execute_scriptr   sub
IGNORECASEr+   r   quitrc   str)rp   rq   s     r   get_user_agentr   ;  s    >"_F**+GH
VVJJbmmL
 4'KKM   G<s1vEFFG 4'KKM s$   AB
 

B0B++B00B3 30C#c                  V    [         c"  SSKJn   U " 5       q [         R                  5         g g )Nr   Xvfb)XVFB_DISPLAYxvfbwrapperr   startr   s    r   r]   r]   P  s#    $v r   c                     [         R                  " [         R                  " U S S95      nUR                  5        VVs0 s H  u  p#UR	                  S5      (       a  M  X#_M!     snn$ s  snnf )Nc                     U R                   $ r*   )__dict__)os    r   <lambda> object_to_dict.<locals>.<lambda>Y  s    r   )default__)r#   r$   dumpsitemsrZ   )_object	json_dictkvs       r   object_to_dictr   X  sN    

4::g7KLMI&__.I.TQall46HDAD.IIIs   A(A(r*   )'r#   rS   r
   rX   r   ri   sysr:   urllib.parser4   #selenium.webdriver.chrome.webdriverr   undetected_chromedriverrU   r   r+   ru   r   r[   r   r`   boolr   r   r   r   r(   r-   dictrB   rr   ra   r_   r   r   r   r   r]   r   r   r   r   <module>r      s     	  	  
   9 $   
 AT A@T @F$ F
$# 
$c J$ J3 JZ] ] ]@S , #  6TC TC T
"S 
"3  3 *Jr   