TL;DR
Selenium takes a proxy server through Chrome's launch options, but has no built-in way to handle a username and password. If your Proxyon proxy is IP whitelisted, just pass the server address. If it uses credentials, you need a small Chrome extension to inject them, since Selenium's Proxy class won't respond to an auth popup on its own. Both methods below.
Why Selenium Needs Help With Proxies

Chrome connects to any proxy server you point it at, but credentials are the problem. Chrome throws a native login popup for username and password, and Selenium's proxy capabilities have no method to fill it in.
Use IPv6 datacenter proxies with whitelisting and there's no popup, since the proxy trusts your IP instead of asking for login details. Use residential proxies with credentials, and you'll need the extension below.
Setting the Proxy Without Authentication

Whitelist your server's IP on your Proxyon dashboard, then pass the address straight into Chrome's options.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--proxy-server=http://datacenter.proxyon.io:8080")
driver = webdriver.Chrome(options=options)
driver.get("https://httpbin.org/ip")
driver.quit()No extension, no popup. Use this unless you specifically need residential IPs.
Also Read: How to Do Web Scraping Without Getting Blocked
Handling Username and Password Auth

Build a tiny unpacked extension that catches the auth request via Chrome's webRequest.onAuthRequired event and fills it in automatically.
import zipfile
manifest = """{"version":"1.0","manifest_version":2,"name":"Proxy Auth",
"permissions":["proxy","tabs","webRequest","webRequestBlocking","<all_urls>"],
"background":{"scripts":["background.js"]}}"""
background = """chrome.webRequest.onAuthRequired.addListener(
d => ({authCredentials:{username:"USER",password:"PASS"}}),
{urls:["<all_urls>"]}, ["blocking"]);"""
with zipfile.ZipFile("proxy_auth.zip", "w") as zf:
zf.writestr("manifest.json", manifest)
zf.writestr("background.js", background)
options = Options()
options.add_extension("proxy_auth.zip")
driver = webdriver.Chrome(options=options)It's an extra step, but it's the only reliable way past a credential prompt without a third-party wrapper.
Also Read: How to Scrape JavaScript-Heavy Sites With Playwright and Proxies
Verifying the Connection

Load a page that echoes the request IP, or check it independently with the Proxy Tester. If the IP returned doesn't match Proxyon's range, the extension didn't load or the proxy string has a typo.
FAQ Section

Does Selenium support SOCKS5 the same way?
Yes, swap the scheme to socks5://. Credentials still need the extension.
Can I rotate proxies mid-session?
No. Chrome locks the proxy at launch, so rotating means starting a new driver.
Why does the extension fail in headless mode sometimes?
Older headless Chrome blocks extensions. Use --headless=new instead.
Is whitelisting more reliable than credentials?
It removes the popup, but only works with a static IP. Credentials suit dynamic infrastructure better.
Final Thoughts
Selenium's lack of native proxy auth catches most people off guard at scale. Whitelisting sidesteps it when possible, and the extension covers the rest. Once wired in, the rest of your script doesn't change. Proxyon runs pay-as-you-go with no subscriptions, so you can test both methods on a small deposit first.