For the complete documentation index, see llms.txt. This page is also available as Markdown.

Selenium

Selenium drives a real browser, so proxy configuration depends on the underlying driver (Chrome / Firefox). Two approaches:

  1. No auth--proxy-server flag (Chrome) or profile setting (Firefox). The browser still prompts for credentials.

  2. With auth — install a tiny on-the-fly extension that pre-fills the proxy auth dialog. This is the standard pattern for scraping.

Chrome — with auth via Selenium-Wire

The cleanest option is selenium-wire, a Selenium wrapper that handles proxy auth transparently:

pip install selenium-wire
from seleniumwire import webdriver

USER = "helo_s1a2b3c4d5e-type-res-region-us"
PASS = "PASSWORD"

options = {
    "proxy": {
        "http":  f"http://{USER}:{PASS}@gate.helodata.io:7777",
        "https": f"http://{USER}:{PASS}@gate.helodata.io:7777",
        "no_proxy": "localhost,127.0.0.1",
    }
}

driver = webdriver.Chrome(seleniumwire_options=options)
driver.get("https://ipv4.icanhazip.com")
print(driver.page_source)
driver.quit()

For ISP, swap to http://helo_s1a2b3c4d5e:PASSWORD@198.51.100.42:8000.

Chrome — without selenium-wire (manual auth extension)

If you can't add selenium-wire (e.g. corporate restrictions), build a manifest-v3 extension on the fly:

Firefox

Firefox accepts proxy settings directly via FirefoxProfile plus a credential helper. With selenium-wire the same pattern as Chrome works.

Verify

Common pitfalls

  • Native proxy-auth dialog blocks headless runs. Always use selenium-wire or the extension pattern for headless.

  • WebRTC leak — add --disable-features=WebRtcHideLocalIpsWithMdns and/or block media via chrome_options.add_argument("--disable-webrtc") (Brave/Vivaldi flag).

  • Proxy not actually used in headless — pre-Chrome-100 used --headless; modern Chrome requires --headless=new for the extension model to work.

Last updated

Was this helpful?