selenium-landing.header.title IP Bans|
selenium-landing.header.subtitle
selenium-landing.logoTicker.title
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
Install Selenium & Get Credentials
Install Selenium and grab your BirdProxies gateway host, port, username, and password from the dashboard.
pip install seleniumLaunch 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")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()
Sempre Ligado, Sempre Vencendo
Benefícios Que Mantêm Você na Frente
Proxies Seguros & Protegidos
Aproveite conexões privadas, sem restrições e ultra-rápidas sem complicações.
Velocidades Ultra-Rápidas
Muito lento? Muito tarde? Não com a gente. Aproveite conexões ultra-rápidas sempre!
Suporte 24/7
Dia ou noite, estamos aqui para ajudar você 24/7.
Contorne Restrições
403 Proibido! Não mais. Acesse qualquer site, em qualquer lugar com facilidade.
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.
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.
| Feature | Residential (Recommended for scraping) | ISP Proxies | Datacenter Proxies |
|---|---|---|---|
| Detection Risk | Very low (real household IPs) | Low (ISP-grade trust scores) | High (IPs cataloged by anti-bot systems) |
| Speed / Latency | 50-150ms, 10-50 Mbps | 25-50ms, up to 1 Gbps | 10-30ms, up to 10 Gbps |
| Best For | Web scraping, geo QA, protected targets | Fixed-address QA suites, CI runners | Non-protected internal targets only |
| IP Rotation | New IP per session (drop the session tag) | Static (dedicated IP) | Static (dedicated IP) |
| Session Support | Sticky sessions (username tag, up to 30 min) | Permanent static IP | Permanent static IP |
| Price | €2.25-3.50/GB | €1.40-2/IP/month | €0.50-2/IP/month |
| Selenium Chrome Auth | Extension 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
€5.00
Recarregue quando quiser
Developer
Daily scraping and QA runs
€4.75
/ GB
€23.75
Recarregue quando quiser
Scale
High-volume data collection
€4.50
/ GB
€45.00
Recarregue quando quiser
Enterprise
Enterprise-scale crawling
€3.75
/ GB
€375.00
Recarregue quando quiser
StarterTest residential proxies with Selenium €5.00 / GB €5.00 Recarregue quando quiser | DeveloperDaily scraping and QA runs €4.75 / GB €23.75 Recarregue quando quiser | ScaleHigh-volume data collection €4.50 / GB €45.00 Recarregue quando quiser | EnterpriseEnterprise-scale crawling €3.75 / GB €375.00 Recarregue quando quiser | |
|---|---|---|---|---|
| Dados | 1 GB | 5 GB | 10 GB | 100 GB |
| Tamanho do Pool | 72M+ IPs | 72M+ IPs | 72M+ IPs | 72M+ IPs |
| Países | 170+ | 170+ | 170+ | 170+ |
| Tipo de Sessão | Rotativo/Fixo | Rotativo/Fixo | Rotativo/Fixo | Rotativo/Fixo |
| Desbloqueado | Garantido | Garantido | Garantido | Garantido |
selenium-landing.reviews.title
selenium-landing.reviews.subtitle
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
