Selenium
Selenium drives a real browser, so proxy configuration depends on the underlying driver (Chrome / Firefox). Two approaches:
No auth —
--proxy-serverflag (Chrome) or profile setting (Firefox). The browser still prompts for credentials.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-wirefrom 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=WebRtcHideLocalIpsWithMdnsand/or block media viachrome_options.add_argument("--disable-webrtc")(Brave/Vivaldi flag).Proxy not actually used in headless — pre-Chrome-100 used
--headless; modern Chrome requires--headless=newfor the extension model to work.
Last updated
Was this helpful?