LoginToolsPricing
BirdProxies
BirdProxies
Login
4.9Trustpilot

selenium-landing.header.title IP BansCAPTCHAsRate LimitsBot Detection403 ErrorsAuth PopupsIP Bans|

selenium-landing.header.subtitle

selenium-landing.logoTicker.title
Selenium
Python
Java
Node.js
Chrome
Firefox
.NET
Docker
GitHub
Playwright
Puppeteer
TypeScript
Selenium
Python
Java
Node.js
Chrome
Firefox
.NET
Docker
GitHub
Playwright
Puppeteer
TypeScript

selenium-landing.useCases.title

selenium-landing.useCases.subtitle

  • Cross-Browser QA Testing

    Run the same test suite through country-targeted exit IPs to catch geo-based bugs before release: wrong currency, wrong language, region-locked content that only shows up from outside your office network.

  • Web Scraping & Data Collection

    Selenium still renders a full JS-heavy page the way a real browser would. Rotate the exit IP between WebDriver sessions so a long collection job does not run its entire volume through one address.

  • Selenium Grid Fleets

    Give each Grid node its own proxy username instead of routing every node through the same office or CI IP, so one flagged address does not take a whole grid of parallel test runs down with it.

  • Multi-Step Workflow Testing

    Login, then cart, then checkout, held on the same exit IP for the length of the WebDriver session with a sticky session tag, so the flow does not look like it changed location mid-test.

What a WebDriver session needs

HTTP and SOCKS5 into any ChromeOptions or Proxy object, one address held for a whole multi-step run, and enough clean IPs that a long suite does not start tripping the same blocks it was built to test around.

selenium-landing.setupGuide.title

selenium-landing.setupGuide.subtitle

  1. 1

    Install Selenium & Get Credentials

    Install Selenium and grab your BirdProxies gateway host, port, username, and password from the dashboard.

    pip install selenium
  2. 2

    Launch Chrome Through the Proxy

    Chrome's --proxy-server flag takes a host and port, but it does not accept an inline username:password - a plain http://user:pass@host:port string is silently dropped and Chrome shows a login popup Selenium cannot dismiss. The standard fix is a small unpacked extension that answers the auth prompt for you.

    import zipfile
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    PROXY_HOST = "gate.birdproxies.com"
    PROXY_PORT = 7777
    
    def build_proxy_extension(username, password, path="bp_proxy_auth.zip"):
        manifest = """{
      "version": "1.0.0",
      "manifest_version": 2,
      "name": "BirdProxies Auth",
      "permissions": [
        "proxy", "tabs", "unlimitedStorage", "storage",
        "<all_urls>", "webRequest", "webRequestBlocking"
      ],
      "background": { "scripts": ["background.js"] },
      "minimum_chrome_version": "22.0.0"
    }"""
        background = f"""
    var config = {{
      mode: "fixed_servers",
      rules: {{ singleProxy: {{ scheme: "http", host: "{PROXY_HOST}", port: {PROXY_PORT} }} }}
    }};
    chrome.proxy.settings.set({{ value: config, scope: "regular" }}, function() {{}});
    
    chrome.webRequest.onAuthRequired.addListener(
      function() {{
        return {{ authCredentials: {{ username: "{username}", password: "{password}" }} }};
      }},
      {{ urls: ["<all_urls>"] }},
      ["blocking"]
    );
    """
        with zipfile.ZipFile(path, "w") as zp:
            zp.writestr("manifest.json", manifest)
            zp.writestr("background.js", background)
        return path
    
    options = Options()
    options.add_extension(build_proxy_extension("YOUR_USER", "YOUR_PASSWORD"))
    
    driver = webdriver.Chrome(options=options)
    driver.get("https://example.com")
  3. 3

    Rotate Sessions & Target Countries

    Append a country or session tag to the username before building the extension. A session tag pins one IP for the whole WebDriver session; a fresh driver with a fresh username gets a new address.

    # Pin one IP for a multi-step flow: login -> cart -> checkout
    sticky_user = "YOUR_USER-country-de-session-checkout01"
    
    options = Options()
    options.add_extension(
        build_proxy_extension(sticky_user, "YOUR_PASSWORD", "sticky.zip")
    )
    driver = webdriver.Chrome(options=options)
    
    driver.get("https://example.com/login")
    # ... same exit IP through cart and checkout ...
    driver.quit()

Always ON, Always Winning

Benefits Which Keep You Ahead

Safe & Secure proxies

Enjoy private, unrestricted, and lightning-fast connections without the hassle.

Blazing Fast Speeds

Too slow? Too late? Not with us. Enjoy ultra-fast connections every time!

My IP got flagged on Instagram
02:14
Swapping it now, give me a second
02:14
Done, new IP is live in your dashboard
02:15
That was fast, thanks
02:15
Are German ISPs back in stock?
04:37
Yes, just restocked
04:37
Perfect, grabbing a few now
04:38
Ping me if you need setup help
04:38

24/7 Support

Day or night, we're here to assist you 24/7.

Bypass Restrictions

403 Forbidden! Not anymore. Access any site, anywhere with ease.

BirdProxies residential and ISP proxies plug into Selenium WebDriver through the same HTTP or SOCKS5 configuration Selenium already supports, with sticky sessions for multi-step flows and country targeting for geo testing.

Selenium is the original open-source browser automation framework, controlling real browsers (Chrome, Firefox, Edge, Safari) through the WebDriver protocol across Python, Java, C#, Ruby, and JavaScript bindings. It is still the default choice for large, established QA suites and Selenium Grid deployments, and the same WebDriver session that drives a test can drive a scraper. Selenium has no built-in proxy rotation and, on Chrome specifically, no built-in way to pass a username and password to --proxy-server, so authenticated proxies need one extra piece of setup: a small unpacked browser extension that answers the proxy's auth prompt automatically. Once that is wired up once, BirdProxies residential proxies route WebDriver traffic through real household IPs from 195+ countries, while static ISP proxies give a test suite the same fixed address across every run. Both work through Selenium's standard ChromeOptions --proxy-server argument or the selenium.webdriver.common.proxy.Proxy class, with no provider-specific SDK required.

Last updated: August 2026|By BirdProxies, Proxy Infrastructure Team

Any Language Binding

Selenium ships bindings for Python, Java, C#, Ruby, and JavaScript. The proxy configuration concept is the same across all of them.

Whether the test suite is written in Python (ChromeOptions), Java (DesiredCapabilities or ChromeOptions), C# (Selenium.WebDriver), or JavaScript (selenium-webdriver), the underlying mechanism is identical: set a proxy server on the browser options and, for authenticated proxies on Chrome, load a small extension that supplies the credentials. The same BirdProxies gateway host, port, username, and password work regardless of which binding a project uses.

Auth Needs One Extra Step

Chrome's --proxy-server flag does not accept inline username:password, unlike Playwright's browser.launch({ proxy }) API.

Playwright and Puppeteer both accept proxy credentials as structured launch options. Selenium on Chrome does not: a plain http://user:pass@host:port string is silently reduced to host:port and Chrome pops its own login dialog. The standard workaround, an unpacked extension that answers chrome.webRequest.onAuthRequired, takes a few lines of Python to generate and then works the same way for every driver instance afterward.

Sticky Sessions for Multi-Step Flows

Append a session tag to the proxy username to hold one exit IP for the length of a login-to-checkout WebDriver run.

A test or scrape that moves through several pages in one logical flow, login, then cart, then checkout, should stay on one IP the whole way through. Append -session-{id} to the proxy username before building the driver and the exit IP holds for that session. Drop the tag for one-off page checks where a fresh IP on every driver instance is preferable.

195+ Countries for Geo QA

Append -country-{code} to the proxy username to run a WebDriver session from a specific country.

Testing region-locked content, localized pricing, or currency display used to mean a VPN client on the CI box. With a country-tagged username, a fresh WebDriver session exits through that country instead, which is easier to keep in version control and easier to run in parallel across a Selenium Grid.

Residential vs ISP vs Datacenter Proxies for Selenium

For scraping and anti-bot-protected QA targets, rotating residential proxies are recommended. For fixed-address test suites and internal targets, static ISP proxies are usually simpler.

FeatureResidential (Recommended for scraping)ISP ProxiesDatacenter Proxies
Detection RiskVery low (real household IPs)Low (ISP-grade trust scores)High (IPs cataloged by anti-bot systems)
Speed / Latency50-150ms, 10-50 Mbps25-50ms, up to 1 Gbps10-30ms, up to 10 Gbps
Best ForWeb scraping, geo QA, protected targetsFixed-address QA suites, CI runnersNon-protected internal targets only
IP RotationNew IP per session (drop the session tag)Static (dedicated IP)Static (dedicated IP)
Session SupportSticky sessions (username tag, up to 30 min)Permanent static IPPermanent static IP
Price€2.25-3.50/GB€1.40-2/IP/month€0.50-2/IP/month
Selenium Chrome AuthExtension workaround required (see setup)Extension workaround required (see setup)Extension workaround required (see setup)

Proxies Built for Selenium

Starter

Test residential proxies with Selenium

€5.00

/ GB

Data1 GB
BandwidthUnlimited
Speed10 Gbps

€5.00

Top up anytime

Developer

Daily scraping and QA runs

€4.75

/ GB

Data5 GB
BandwidthUnlimited
Speed10 Gbps

€23.75

Top up anytime

Preferred by customers

Scale

High-volume data collection

€4.50

/ GB

Data10 GB
BandwidthUnlimited
Speed10 Gbps

€45.00

Top up anytime

Enterprise

Enterprise-scale crawling

€3.75

/ GB

Data100 GB
BandwidthUnlimited
Speed10 Gbps

€375.00

Top up anytime

Starter

Test residential proxies with Selenium

€5.00 / GB

€5.00

Top up anytime

Developer

Daily scraping and QA runs

€4.75 / GB

€23.75

Top up anytime

Scale

High-volume data collection

€4.50 / GB

€45.00

Top up anytime

Enterprise

Enterprise-scale crawling

€3.75 / GB

€375.00

Top up anytime

Data1 GB5 GB10 GB100 GB
Pool Size72M+ IPs72M+ IPs72M+ IPs72M+ IPs
Countries170+170+170+170+
Session TypeRotating/StickyRotating/StickyRotating/StickyRotating/Sticky
UnbannedGuaranteedGuaranteedGuaranteedGuaranteed
Preferred by customers

selenium-landing.reviews.title

selenium-landing.reviews.subtitle

selenium-landing.reviews.trustpilot

Selenium Proxy FAQs

Everything you need to know about using proxies with Selenium

For Chrome, pass --proxy-server as a ChromeOptions argument: options.add_argument('--proxy-server=http://gate.birdproxies.com:7777'), then build the driver with webdriver.Chrome(options=options). For Firefox or other browsers, use Selenium's Proxy class (from selenium.webdriver.common.proxy import Proxy, ProxyType), set proxy.http_proxy and proxy.ssl_proxy, and assign it to options.proxy before creating the driver. Both HTTP and SOCKS5 work the same way - swap the scheme in the --proxy-server string.

Let's start our journey with a personal gift for you ❤️

SELENIUM15

BirdProxies
BirdProxies

Fast, secure, reliable proxies. ISP, Residential, and Mobile, ready when you are.

Products

  • ISP Proxies
  • Residential Proxies
  • Sneaker Proxies
  • Ticket Proxies
  • Crypto Proxies
  • Social Media Proxies
  • Betting Proxies

Company

  • Pricing
  • Partners
  • Imprint
  • Terms

Resources

  • Blog
  • Docs
  • Glossary
  • Integration Guides
  • Compare Providers
  • FAQ
  • Changelog
  • Brand Assets

Connect

  • Dashboard
  • Sign Up
  • Contact

© 2026 BirdProxies. All rights reserved.

PrivacyCookiesRefunds