
    Sjr-                     6   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Z	d dl
mZ d dlZdadadadadadadadefdZdefdZdefdZdefdZdefdZd	edefd
Zdd	edefdZdefdZdefdZ dedefdZ!defdZ"defdZ#ddefdZ$d Z%d Z&dS )    N)	WebDriverreturnc                  n    t           j                            dd                                          dk    S )NLOG_HTMLfalsetrueosenvirongetlower     /app/utils.pyget_config_log_htmlr      s)    :>>*g..4466&@@r   c                  n    t           j                            dd                                          dk    S )NHEADLESSr   r	   r   r   r   get_config_headlessr      s)    :>>*f--3355??r   c                  n    t           j                            dd                                          dk    S )NDISABLE_MEDIAr   r   r	   r   r   r   get_config_disable_mediar      s)    :>>/73399;;vEEr   c                     t           t           S t          j                            t          j                            t          j                            t                              t          j        d          } t          j                            |           s_t          j                            t          j                            t          j                            t                              d          } t          |           5 }t          j        |                                          d         a t           cd d d            S # 1 swxY w Y   d S )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   '##7<<0I0I J JBIWeffL7>>,'' `w||BGOOBGOOH4M4M$N$NP^__	l		 $q#z!&&((33I>#$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   3EE
E
c                  D    t           t           S t          j        a t           S N)PLATFORM_VERSIONr
   namer   r   r   get_current_platformr-   /   s    #wr   proxyc                 D   t           j                            | d                   }|j        }|j        }|j        }| d         }| d         }d}d|||||fz  }t          j                    }	t          t          j
                            |	d          d          5 }
|
                    |           d d d            n# 1 swxY w Y   t          t          j
                            |	d          d          5 }
|
                    |           d d d            n# 1 swxY w Y   |	S )	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|44JFD?DZ HZ HM,< 	;#MJ #*,,	bgll.@@#	F	F !	               
bgll.@@#	F	F !	               s$   B::B>B>3DDDc           	          t          j        d           t          j                    }|                    d           |                    d           |                    d           |                    d           |                    d           |                    d           t          j                                        d          }|r|                    d	           |                    d
           |                    d           t          j	        
                    dd           }||                    d|z             t          |                    dt          z             d } rut           fddD                       rZt                     }|                    d           |                    dt          j                            |          z             n; r9d v r5 d         }t          j        d|           |                    d|z             d}t!                      r!t          j        dk    rd}nt%                       d }d }t          j                            d          rd}nt)                      }t*          t*          }t-                      }		 t          j        ||	|||t!                                }
n+# t0          $ r}t          j        d|z             |d }~ww xY w|mt          j                            |
j        j        |
j        j                  at*          |
j        j        k    r$t?          j         |
j        j        t*                     |t?          j!        |           |
S )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       K   | ]}|v V  	d S r*   r   ).0keyr.   s     r   	<genexpr>z get_webdriver.<locals>.<genexpr>   s'      MMcSE\MMMMMMr   )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.   rL   
IS_ARMARCHlanguagerA   	proxy_urlrP   driver_exe_pathrO   rM   driveres   `           r   get_webdriverrq      s   M,---   G(((2333@AAA34442333'''!##../?@@J 645556777.///z~~fd++H/(:;;; .;<<< >MMMM-LMMMMM >4U;;WXXX2RW__EX5Y5YYZZZZ	 >5E>>%L	19===09<===  !7d??#   
 OL	w~~)** 2-/11*1O 2337D[2AP\,<GZG\G\^ ^ ^    1A5666  gll6>+CV^E\]]&."@@@K68KLLL &)*** Ms   "&K	 	
K1K,,K1c                     t           t           S t          j                            t          j                            t          j                            t                              dd          } t          j                            |           r;t          j        | t          j	                  st          d|  d          | a t           S t          j                            t          j                            t          j                            t                              dd          } t          j                            |           r	| a t           S t          j                    a t           S )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_OKrb   rT   find_chrome_executable)chrome_paths    r   r`   r`      s   "',,rwrwx/H/HII8U]^^K	w~~k"" ybg.. 	Z Yk Y Y Y Z Z Z%',,rwrwx/H/HII8UabbK	w~~k"" %/11Or   c                     t           t           S t          j        dk    r[	 t          t	                                } n# t
          $ r1 	 t                      } n# t
          $ r t                      } Y nw xY wY nRw xY wt	                      }t          j        d| d          }|	                                } |
                                 |                     d          d                             d          d         a t           S )NrK   "z" --version.r    )CHROME_MAJOR_VERSIONr
   r,   extract_version_nt_executabler`   rb   extract_version_nt_registryextract_version_nt_folderpopenr%   closesplit)complete_versionrx   processs      r   r^   r^      s   '##	w$	?<=P=R=RSS 	? 	? 	??#>#@#@   ? ? ?#<#>#>   ?	? *++(7{77788 #<<>>+11#66q9??DDRHs3   < 
A7AA7A1.A70A11A76A7exe_pathc                     dd l }|                    | d          }|                    |j        d         g           |j        d         d         j        d         j        d                             d          S )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     s}    MMM	8t	,	,B+,LMN     ;q>!(+3NCJJ7SSSr   c                      t          j        d          } |                                 }d}||                    d          dz   d          D ]}|dk    r||z  } |                                S )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     s    Xoq qF[[]]FN'ABBRGHHI  T>>f$NN!!!r   c                     t          d          D ]} d| rdndz   dz   }t          j                            |          rd t          j        |          D             }|D ]g}t          j                            |          }d}t          j        ||          }|r-|                                r|                    d          c c S hdS )	N   zC:\Program Filesz (x86)r   z\Google\Chrome\Applicationc                 D    g | ]}|                                 |j        S r   )is_dirr   )rH   r'   s     r   
<listcomp>z-extract_version_nt_folder.<locals>.<listcomp>0  s'    DDDDQVDDDr   z\d+\.\d+\.\d+\.\d+r   )	ranger
   r   isdirscandirbasenameresearchgroup)ir   pathsfilenamepatternmatchs         r   r   r   +  s    1XX 
* 
*"!&;hh<?^^7== 	*DDRZ%5%5DDDE * *7++D11/	'844 *U[[]] * ;;q>>)))))2r   c                 
   t           t           S 	 | t                      } |                     d          a t          j        ddt           t          j                  a t           | 4t          dk    r|                                  |                                  S S # t          $ r$}t          dt          |          z             d }~ww xY w# | 4t          dk    r|                                  |                                  w w xY w)Nzreturn navigator.userAgentr   r   )flagsrK   z"Error getting browser User-Agent. )rZ   rq   execute_scriptr   sub
IGNORECASEr+   r   quitrb   str)ro   rp   s     r   get_user_agentr   ;  s    >"__F**+GHH
VJJbmLLL
 4''KKMMMM   G G G<s1vvEFFFG 4''KKMMMM s$   AB 
C#CCC
 
8Dc                  j    t           +ddlm}   |             a t                                            d S d S )Nr   Xvfb)XVFB_DISPLAYxvfbwrapperr   startr   s    r   r\   r\   P  sE    $$$$$$tvv r   c                     t          j        t          j        | d                     }d |                                D             S )Nc                     | j         S r*   )__dict__)os    r   <lambda>z object_to_dict.<locals>.<lambda>Y  s     r   )defaultc                 D    i | ]\  }}|                     d           ||S )__)rY   )rH   kvs      r   
<dictcomp>z"object_to_dict.<locals>.<dictcomp>[  s/    IIITQall46H6HIAqIIIr   )r#   r$   dumpsitems)_object	json_dicts     r   object_to_dictr   X  sB    
4:g7K7KLLLMMIIIY__..IIIIr   r*   )'r#   rR   r
   rW   r   rh   sysr:   urllib.parser4   #selenium.webdriver.chrome.webdriverr   undetected_chromedriverrT   r   r+   rt   r~   rZ   r   r_   boolr   r   r   r   r(   r-   dictrB   rq   r`   r^   r   r   r   r   r\   r   r   r   r   <module>r      sm     				  				  



      9 9 9 9 9 9 $ $ $ $   
 AT A A A A@T @ @ @ @F$ F F F F
$# 
$ 
$ 
$ 
$c    J$ J3 J J J JZ] ] ] ] ] ] ]@S    , #        6TC TC T T T T
"S 
" 
" 
" 
"3      3    *  J J J J Jr   