ultrafunkamsterdam / undetected-chromedriver

Custom Selenium Chromedriver | Zero-Config | Passes ALL bot mitigation systems (like Distil / Imperva/ Datadadome / CloudFlare IUAM)
https://github.com/UltrafunkAmsterdam/undetected-chromedriver
GNU General Public License v3.0
9.01k stars 1.08k forks source link

Proxy Implementation #1399

Open damodharheadrun opened 11 months ago

damodharheadrun commented 11 months ago

can any one help

Laishiji commented 11 months ago

You can use an external proxy to implement this, at first you need to install pproxy, use:

pip install pproxy

then:

options = undetected_chromedriver.ChromeOptions()
options.add_argument(f"--proxy-server=socks5://127.0.0.1:{listening_port}")
driver = undetected_chromedriver.Chrome(options=options)

pproxy_command = f"pproxy -l socks5://127.0.0.1:{listening_port}  -r socks5://{ip}:{port}#{username}:{password} -vv"
process = subprocess.Popen(pproxy_command.split())

# do your task

after you finish your task, remember to do this:

driver.quit()
process.terminate()
nullANzero commented 11 months ago

class ChromeProxyGenerator: def init(self, proxy_host=None, proxy_port=None, proxy_user=None, proxy_pass=None, proxy_folder=None): self.proxy_host = proxy_host self.proxy_port = proxy_port self.proxy_user = proxy_user self.proxy_pass = proxy_pass self.proxy_folder = proxy_folder

    """
    proxy_host = "example.com"
    proxy_port = 8080
    proxy_user = "username"
    proxy_pass = "password"
    proxy_folder = "/path/to/proxy/folder"

    generator = ChromeProxyGenerator(proxy_host, proxy_port, proxy_user, proxy_pass, proxy_folder)
    generator.proxy_connection()
    """

def proxy_connection(self):
    if self.proxy_host is None or self.proxy_port is None or self.proxy_user is None \
            or self.proxy_user is None or self.proxy_pass is None or self.proxy_folder is None:
        return print("Proxy connection isn't possible")
    else:
        manifest_json = """
            {
                "version": "1.0.0",
                "manifest_version": 2,
                "name": "Chrome Proxy",
                "permissions": [
                    "proxy",
                    "tabs",
                    "unlimitedStorage",
                    "storage",
                    "<all_urls>",
                    "webRequest",
                    "webRequestBlocking"
                ],
                "background": {
                    "scripts": ["background.js"]
                },
                "minimum_chrome_version":"22.0.0"
            }
        """

        background_js = """
            var config = {
                    mode: "fixed_servers",
                    rules: {
                    singleProxy: {
                        scheme: "http",
                        host: "%s",
                        port: parseInt(%s)
                    },
                    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']
            );
            """ % (self.proxy_host, self.proxy_port, self.proxy_user, self.proxy_pass)

        with open(f"{self.proxy_folder}/manifest.json", "w") as f:
            f.write(manifest_json)
        with open(f"{self.proxy_folder}/background.js", "w") as f:
            f.write(background_js)

Code

url = "url"

proxy_host = "host" proxy_port = "port" proxy_user = "user" proxy_pass = "pass" proxy_folder = "folder"

generator = ChromeProxyGenerator(proxy_host, proxy_port, proxy_user, proxy_pass, proxy_folder) generator.proxy_connection()

options.add_argument(f"--load-extension={proxy_folder}")

driver = uc.Chrome(user_multi_procs=True, options=options, use_subprocess=True)

driver.get(url=url)

damodharheadrun commented 11 months ago

Thanks for sharing, i will implement and update here

pedrofnts commented 11 months ago

You can use an external proxy to implement this, at first you need to install pproxy, use:

pip install pproxy

then:

options = undetected_chromedriver.ChromeOptions()
options.add_argument(f"--proxy-server=socks5://127.0.0.1:{listening_port}")
driver = undetected_chromedriver.Chrome(options=options)

pproxy_command = f"pproxy -l socks5://127.0.0.1:{listening_port}  -r socks5://{ip}:{port}#{username}:{password} -vv"
process = subprocess.Popen(pproxy_command.split())

# do your task

after you finish your task, remember to do this:

driver.quit()
process.terminate()

does this avoid the use of seleniumwire?

Laishiji commented 11 months ago

seleniumwire has ssl connection problems, just uc would be fine.