10% off ALL new Proxies – CODE: 10pro

Selenium Proxy Setup with Python: German Mobile IPs

Selenium Proxy Setup with Python: German Mobile IPs

Direct Answer

To use an authenticated mobile proxy with Selenium, use SeleniumBase — an actively maintained framework built on Selenium. Pass your endpoint as Driver(proxy="USER:PASS@PROXY_HOST:PORT") and the browser exits through a real German mobile IP. The long-time standard, selenium-wire, was archived in January 2024; if you have existing selenium-wire code, switch the install to the maintained fork selenium-wire-lw — the API is identical.


Why Not Plain Selenium — and What Happened to selenium-wire?

Plain Selenium can point Chrome at a proxy with --proxy-server, but it has no built-in way to pass a username and password — and most real proxies need authentication. For years, selenium-wire filled that gap and was the standard answer. That changed: the project was archived on January 3, 2024 and is no longer maintained — current releases of its own dependencies (blinker 1.8+) break it, so fresh installs fail on modern Python setups.

As of 2026, there are three clean paths:

  1. SeleniumBase (recommended for new code) — actively maintained, authenticated proxies built in.
  2. selenium-wire-lw (for existing selenium-wire code) — a maintained fork with the same API; swap the package, keep your code.
  3. IP whitelisting (no credentials at all) — then plain Selenium's --proxy-server is enough.

Before You Start

You will need four values from your GermanProxy.io account:

  • Host and port of your endpoint
  • Username and password

The examples use PROXY_HOST, PORT, USER and PASS as placeholders — replace them with your own.


Option 1 — SeleniumBase (Recommended)

Install it first:

pip install seleniumbase

Then pass the endpoint straight to the Driver:

from seleniumbase import Driver

driver = Driver(proxy="USER:PASS@PROXY_HOST:PORT")
driver.get("https://www.example.de")
print(driver.title)
driver.quit()

SeleniumBase handles the proxy authentication for you — no auth pop-up, no manual workaround. The driver object is a regular Selenium WebDriver, so your existing find_element / get code keeps working. Authenticated proxies require a Chromium-based browser (the default).


Option 2 — Existing selenium-wire Code: the Maintained Fork

If your project already uses selenium-wire, don't rewrite it — replace the package with the maintained fork selenium-wire-lw. It keeps the same import and the same seleniumwire_options:

pip uninstall selenium-wire
pip install selenium-wire-lw selenium

Your code stays as it was:

from seleniumwire import webdriver

proxy_url = "http://USER:PASS@PROXY_HOST:PORT"

options = {
    "proxy": {
        "http": proxy_url,
        "https": proxy_url,
        "no_proxy": "localhost,127.0.0.1",
    }
}

driver = webdriver.Chrome(seleniumwire_options=options)
driver.get("https://www.example.de")
print(driver.title)
driver.quit()

For SOCKS5, swap the scheme to socks5 (or socks5h to resolve DNS at the proxy):

proxy_url = "socks5://USER:PASS@PROXY_HOST:PORT"

The fork's local relay passes the credentials upstream — this is also the practical route for authenticated SOCKS5, which Chromium cannot do on its own.


Option 3 — Plain Selenium with IP Whitelisting

If you add your machine's public IP to the whitelist in your GermanProxy.io dashboard, the endpoint needs no credentials — and plain Selenium is enough:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

opts = Options()
opts.add_argument("--proxy-server=http://PROXY_HOST:PORT")

driver = webdriver.Chrome(options=opts)
driver.get("https://www.example.de")
print(driver.title)
driver.quit()

This also works with --proxy-server=socks5://PROXY_HOST:PORT. Best suited to servers with a fixed outbound IP; if your IP changes (home ISP, VPN), re-add it or use Option 1.


Verify the IP First

Before you build the rest of your automation, point the driver at an IP-echo page and confirm it shows a German mobile IP — not your own address:

driver.get("https://api.ipify.org")
print(driver.find_element("tag name", "body").text)

If it shows your real IP, the proxy isn't applied; re-check the scheme, host, port and credentials.


Sticky Sessions vs. Rotation

  • Sticky session: hold the same German mobile IP for a multi-step flow that should look like one continuous user.
  • Rotation on demand: request a fresh IP to spread independent runs.

Choose per workflow — see sticky sessions and IP rotation explained.


Scrape Responsibly

A mobile proxy improves reliability for legitimate data collection — it is not a tool to circumvent access controls or platform rules. Keep your automation clean and defensible:

  1. Respect robots.txt and each site's terms of service.
  2. Send requests at a human-reasonable rate — add waits, don't hammer servers.
  3. Collect only what you need, and handle any personal data in line with the GDPR.
  4. Set an honest User-Agent that identifies your client, not a misleading one.

FAQ

What happened to selenium-wire?

The original project was archived on January 3, 2024 and no longer receives updates — newer releases of its blinker dependency (1.8+) break it, so it fails on current Python environments. For new projects use SeleniumBase; for existing code, selenium-wire-lw is a drop-in fork with the same from seleniumwire import webdriver API.

Can I use plain Selenium without extra packages?

Only if your endpoint needs no credentials — enable IP whitelisting in your dashboard, then --proxy-server=PROXY_HOST:PORT in Chrome options is enough. For username/password authentication, use SeleniumBase or the selenium-wire-lw fork; both avoid brittle pop-up workarounds.

Why do I get a 407 error?

407 Proxy Authentication Required means the credentials didn't reach the proxy. With SeleniumBase, confirm they're inside the proxy string (USER:PASS@PROXY_HOST:PORT); with the fork, confirm they're inside the proxy URL. See how to fix 407 proxy authentication required.

Does this work with undetected-chromedriver?

Use SeleniumBase's UC Mode instead — it is built on undetected-chromedriver and actively maintained: Driver(uc=True, proxy="USER:PASS@PROXY_HOST:PORT") takes the same proxy argument. For harder targets, SeleniumBase also offers CDP Mode as UC Mode's successor.

HTTP or SOCKS5?

For browser automation, the HTTP endpoint with username/password is the simplest path — Chromium itself cannot send SOCKS5 credentials. Use SOCKS5 either with IP whitelisting (Option 3) or through the selenium-wire-lw relay (Option 2). See the difference between HTTP and SOCKS5.

Should I switch to Playwright?

If you're starting fresh and not tied to Selenium, Playwright ships first-class authenticated proxy support — see the Python setup guide. Existing Selenium suites don't need to migrate: SeleniumBase keeps them running on a maintained stack.


CTA

Run your Selenium automation on real German mobile IPs. Get your German mobile endpoint — HTTP/SOCKS5/OpenVPN, sticky sessions, fair-use 20 GB/day.


Get a German mobile proxy: Real 4G/5G IPs from Germany, fair-use 20 GB/day — compare German mobile proxy plans or get a dedicated proxy on the Blue network.

Telegram Support
Nach oben scrollen