selenium chromedriver authentication proxy
Asked Answered
S

1

7

I need to connect to a proxy server with a user name and password (i.e USERNAME:PASSWD@IP:PORT) with chromedriver webdriver in selenium 2 in java. I've found how to do it without using a user name and password, but haven't found a way to do it with.

Thanks.

Sonora answered 20/8, 2012 at 7:50 Comment(0)
S
0

One way to connect to a proxy server with a user name and password is by using the tool sshuttle running on your machine. This tool allows you to create a connection to your proxy server using SSH, and then route all of your traffic.

$ sshuttle -r username@remotehost 0.0.0.0/0

See https://sshuttle.readthedocs.io/en/stable/usage.html for further information.

Another approach is to add a Chrome extension. This approach is a bit more complex, but it allows you to use the Chrome WebDriver without any tools running in the background. You would need to create a Chrome extension by including two files in an archive named proxy.zip: Background.js and manifest.js.

Background.js:

var config = {
    mode: "fixed_servers",
    rules: {
        singleProxy: {
            scheme: "http",
            host: "YOUR_PROXY_ADDRESS",
            port: parseInt(PROXY_PORT)
        },
        bypassList: ["foobar.com"]
    }
};
chrome.proxy.settings.set({ value: config, scope: "regular" }, function () { });
function callbackFn(details) {
    return {
        authCredentials: {
            username: "PROXY_USERNAME",
            password: "PROXY_PASSWORD"
        }
    };
}

chrome.webRequest.onAuthRequired.addListener(
    callbackFn,
    { urls: ["<all_urls>"] },
    ['blocking']
);

manifest.js:

var config = {
    mode: "fixed_servers",
    rules: {
        singleProxy: {
            scheme: "http",
            host: "YOUR_PROXY_ADDRESS",
            port: parseInt(PROXY_PORT)
        },
        bypassList: ["foobar.com"]
    }
};
chrome.proxy.settings.set({ value: config, scope: "regular" }, function () { });
function callbackFn(details) {
    return {
        authCredentials: {
            username: "PROXY_USERNAME",
            password: "PROXY_PASSWORD"
        }{
            "version": "1.0.0",
            "manifest_version": 3,
            "name": "Chrome Proxy",
            "permissions": [
            "Proxy",
            "Tabs",
            "unlimitedStorage",
            "Storage",
            "<all_urls>",
            "webRequest",
            "webRequestBlocking"
            ],
            "background": {
            "scripts": ["background.js"]
            },
            "Minimum_chrome_version":"76.0.0"
            }
    };
}

chrome.webRequest.onAuthRequired.addListener(
    callbackFn,
    { urls: ["<all_urls>"] },
    ['blocking']
);

Then you would need to add the Chrome extension to the ChromeOptions using the addExtension method:

        ChromeOptions options = new ChromeOptions();
        options.addExtensions("proxy.zip");

The details are described (for Python) on the page: https://www.browserstack.com/guide/set-proxy-in-selenium

Santosantonica answered 26/1, 2023 at 15:46 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.