Use proxies with Selenium

Learn how to set up residential and mobile proxies for test automation with Selenium.

  1. Firstly, you need to know that Selenium supports five programming languages: Java, C#, Python, Ruby, Javascript (Node). Depending on language you use, there are different ways to set up proxies

  2. Secondly, you need to choose WebDriver you want to use. Selenium offers WebDrivers to all the most popular browsers (you can see all supported drivers here). In our tutorial we'd like to use Google Chrome Driver

  3. There are some code examples for your preferred programming language and Google Chrome Driver

    • Java:

    package chromeScripts;

    import java.io.File;
    import org.openqa.selenium.By;
    import org.openqa.selenium.Proxy;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeDriverService;
    import org.openqa.selenium.chrome.ChromeOptions;

    public class Example {

    public static void main(String[] args) {

    String ProxyServer = "proxy.froxy.com";
    int ProxyPort = 9000;

    String sHttpProxy = ProxyServer + ":" + ProxyPort;

    Proxy proxy = new Proxy();

    proxy.setHttpProxy(sHttpProxy);

    ChromeDriverService service = new ChromeDriverService.Builder()
    .usingDriverExecutable(new File("PATH TO WEBDRIVER"))
    .usingAnyFreePort()
    .build();
    ChromeOptions options = new ChromeOptions();

    options.setCapability("proxy", proxy);

    options.merge(options);

    WebDriver driver=new ChromeDriver(service, options);
    driver.get("http://froxy.com/api/detect-ip/");
    WebElement body = driver.findElement(By.tagName("body"));
    String bodyText = body.getText();
    System.out.println(bodyText);
    }
    }

     

    • C#
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using OpenQA.Selenium;
    using OpenQA.Selenium.Chrome;

    class Program
    {
    static void Main(string[] args)
    {
    ChromeOptions options = new ChromeOptions();

    var proxy = new Proxy
    {
    Kind = ProxyKind.Manual,
    IsAutoDetect = false,
    HttpProxy = "http://proxy.froxy.com:9000"
    };
    options.Proxy = proxy;

    IWebDriver driver = new ChromeDriver(options);
    driver.Navigate().GoToUrl("http://froxy.com/api/detect-ip/");
    var getBody = driver.FindElement(By.TagName("body"));
    var getBodyText = getBody.Text;

    Console.WriteLine(getBodyText);
    Console.WriteLine("Click any key to exit..");
    Console.ReadKey();

    driver.Quit();
    }
    }

    • Python
    HOSTNAME = ''
    PORT = ''
    ### DRIVER
    """
    Define the driver as follows:
    Firefox:
    DRIVER = 'FIREFOX'
    Chrome:
    DRIVER = 'CHROME'
    """
    DRIVER = ''
    ### DRIVER PATH
    """
    Make sure that this exact part is configured with exact location of your webdriver/webdrivers.
    The location should link to either geckodriver.exe or chromedriver.exe on Windows.
    On MacOS/Linux Systems it should link to chromedriver/geckodriver.

    Make sure that DRIVER_PATH is linking to the according Webdriver that you specify below. Example:
    DRIVER_PATH = "C:/bin/geckodriver.exe"
    """
    DRIVER_PATH = ''

    """
    Make sure to not edit settings beyond this point unless you know what you are doing!
    """

    from selenium import webdriver
    from selenium.webdriver.common.proxy import Proxy, ProxyType


    def get_driver_settings():
    DRIVER_SETTINGS = {}
    DRIVER_SETTINGS['DRIVER'] = DRIVER
    DRIVER_SETTINGS['DRIVER_PATH'] = DRIVER_PATH
    return DRIVER_SETTINGS

    def froxy():
    prox = Proxy()

    prox.proxy_type = ProxyType.MANUAL

    prox.http_proxy = '{hostname}:{port}'.format(hostname = HOSTNAME, port = PORT)
    prox.ssl_proxy = '{hostname}:{port}'.format(hostname = HOSTNAME, port = PORT)

    if DRIVER == 'FIREFOX':
    capabilities = webdriver.DesiredCapabilities.FIREFOX
    elif DRIVER == 'CHROME':
    capabilities = webdriver.DesiredCapabilities.CHROME
    prox.add_to_capabilities(capabilities)

    return capabilities

    • Ruby

    require 'rubygems'
    require 'selenium-webdriver'

    proxy = Selenium::WebDriver::Proxy.new(:http => "proxy.froxy.com:9000")

    driver = Selenium::WebDriver.for :chrome, :proxy => proxy
    driver.navigate.to "http://froxy.com/api/detect-ip/"
    element = driver.find_element(:css, 'body')

    puts element.text

    driver.quit

    • Javascript
    require('chromedriver');

    var webdriver = require('selenium-webdriver'), By = webdriver.By,
    until = webdriver.until, chrome = require("selenium-webdriver/chrome");

    let addr = 'proxy.froxy.com:9000'
    let opt = new chrome.Options().addArguments(`--proxy-server=http://${addr}`)

    var driver = new webdriver.Builder()
    .forBrowser('chrome')
    .setChromeOptions(opt)
    .build();

    driver.get('http://froxy.com/api/detect-ip/')

    var textPromise = driver.findElement(webdriver.By.css('body')).getText();
    textPromise.then((text) => {
    console.log(text);
    });
  4. You're able to run all of these commands in your Terminal/Command Prompt window

  5. To set up proxy connection please use proxy.froxy.com:9000 line within the punctuation marks (''). Depending on your type of language, punctuation may differ

    • Java:
        String ProxyServer = "proxy.froxy.com";
      int ProxyPort = 9000;
    • C#:
        HttpProxy = "proxy.froxy.com:9000"
    • Python:
         HOSTNAME = 'proxy.froxy.com'
      PORT = '9000'
    • Ruby:
         proxy = Selenium::WebDriver::Proxy.new(http: "proxy.froxy.com:9000")
    • Javascript (Node):
        let addr = 'proxy.froxy.com:9000'

    All necessary data about server, port, login and password you can get from your Froxy Dashboard