Free proxies

Free Proxies for Selenium: What 300 Page Loads Showed, and the Setup to Use

We loaded a page and its 25 files through 300 free proxies from our list, the way Chrome does. 111 arrived whole. The setup and timeouts that follow.

HProxy Team··Updated September 28, 2026·9 min read
HProxy.Free proxies

Skip the dead lists.

Our free proxy list re-checks every exit every few minutes across 100+ countries, with a live last-checked time, so you copy IPs that worked moments ago, not a stale text dump.

Open the free proxy list→

Free proxies can carry a Selenium session through public pages, as long as the script expects most of them to fail. We tested that on 28 September 2026 at 13:37 UTC. We took 300 free proxies that our list showed as alive. Through each, we loaded one page of our own site and the 25 files its HTML names, the way Chrome loads a page through a proxy. 111 delivered the whole page, at a median of about 23 seconds. Directly, the same page took 0.4 to 2.0 seconds.

This page covers what the test showed, the Chrome setup and the timeout that follow from it, certificates, WebRTC, and what a free proxy should never carry.

What happened to 300 page loads

A browser does not send one request for a page. It sends one for the HTML and more for the scripts, styles and images the HTML names. Through an HTTP proxy, Chrome first asks for a tunnel with the CONNECT method, which RFC 9110 describes as a request to "establish a tunnel to the destination origin server". Through a SOCKS5 proxy, it opens the tunnel with SOCKS5. Our test did both, then ran TLS and HTTP/2 inside the tunnel, as Chrome does, and gave each load 300 seconds, the WebDriver default.

Our own console window: what happened when we loaded one page of our own site and its 25 files through 300 free proxies from our list on 28 September 2026. Of 200 entries with the https flag, 63 delivered the whole page, at a median of 23.9 seconds. Of 100 SOCKS5 entries, 48 did, at a median of 22.1 seconds. 114 never accepted the connection. 10 handed back a certificate that was not ours. The same page loaded directly in 0.4 to 2.0 seconds.
Captured on our own machine on 28 September 2026: Node printing the saved result of our test. No proxy addresses.
  • A page is slow even when it arrives. Of 200 entries with the https flag, 63 delivered the whole page, at a median of 23.9 seconds. Of 100 SOCKS5 entries, 48 did, at a median of 22.1 seconds. None of those pages had a changed file.
  • Many never answered. 114 of the 300 entries never accepted the connection. On our Linux server the operating system gave up after 136 seconds each, well inside the 300 seconds WebDriver waits by default.
  • Ten certificates were not ours. Of the 131 proxies that finished TLS, 10 handed back a certificate that was not ours: 9 SOCKS5 entries and 1 HTTP entry. Chrome stops at such a certificate, and Selenium reports it as an error. That is the safe outcome, and the next section keeps it that way.
  • The list was not fresh. Our list had last checked these entries a median of 30 minutes before the test. An entry stays on it as alive until its next check fails.

Set the page load timeout to about 30 seconds

Whole pages per hour through 300 free proxies, one load at a time, by page load timeout
A 30-second limit loaded about twice as many whole pages per hour as the WebDriver default.Source: HProxy test of 28 September 2026, 13:37 to 13:42 UTC: one page of our own site and its 25 files through 200 free proxies with the https flag and 100 SOCKS5 proxies from our list, 300 seconds each. The shorter limits replay the same timings.

In the WebDriver standard, the page load timeout "is initially set to 300,000" milliseconds, five minutes. We replayed the 300 loads at shorter limits. A browser working through the entries one at a time would have loaded 33.8 whole pages per hour at 30 seconds, and 16.3 at the default. A shorter limit gives up on some slow pages that would have arrived. It also stops waiting on dead entries and moves on to the next one, which pays off with thousands of entries on a list. At 10 seconds, too many good pages were cut off. The Python bindings of Selenium show the call in their own example: driver.set_page_load_timeout(30).

A Chrome setup for free entries

import urllib.request

from selenium import webdriver
from selenium.common.exceptions import InsecureCertificateException, WebDriverException

# entries alive on their last check that can tunnel HTTPS (use protocol=socks5 and "socks5" for SOCKS5 entries)
LIST_URL = "https://hproxy.com/api/proxy-list?format=txt&protocol=https"
SCHEME = "http"
with urllib.request.urlopen(LIST_URL, timeout=30) as response:
    entries = response.read().decode().split()


def open_through(entry):
    options = webdriver.ChromeOptions()
    options.add_argument(f"--proxy-server={SCHEME}://{entry}")
    # keep WebRTC to TCP through the proxy instead of UDP from your own address
    options.add_argument("--force-webrtc-ip-handling-policy=disable_non_proxied_udp")
    driver = webdriver.Chrome(options=options)
    driver.set_page_load_timeout(30)  # the WebDriver default is 300 seconds
    return driver


for entry in entries:
    driver = open_through(entry)
    try:
        driver.get("https://example.com/")
    except InsecureCertificateException:
        driver.quit()  # a certificate that is not the one of the site: drop the entry
        continue
    except WebDriverException:
        driver.quit()  # dead, slow or refused, timeouts included: try the next entry
        continue
    print(entry, driver.title)
    driver.quit()
    break

Our free proxy list API returns one address and port per line, with no key and no signup. Four details matter here:

  • One browser per entry. The switch applies to the browser it launches, so a new entry means a new driver. For a dead entry, the Chromium documentation says requests "would fail with ERR_PROXY_CONNECTION_FAILED", which Selenium raises as an error. Our guide to ERR_PROXY_CONNECTION_FAILED covers that error.
  • The scheme. Write http:// for an entry with the https flag, since it is an HTTP proxy that can open CONNECT tunnels. Write socks5:// for a SOCKS5 entry. In Chrome, the name of the site is then resolved by the proxy, and the Chromium documentation adds that "No authentication methods are supported for SOCKSv5 in Chrome". Free entries need none.
  • SOCKS5 entries held up well here. In our test, 48 of 100 SOCKS5 entries delivered the whole page, against 63 of 200 with the https flag. Nine of the SOCKS5 entries also handed back a certificate that was not ours, which Chrome caught.
  • No login in the switch. The Chromium documentation says Chrome "will not use any credentials embedded in the proxy settings". That matters only for paid gateways, covered in how to use proxies in Selenium. Selenium Wire, often suggested for that, says in its own README: "Selenium Wire is no longer being maintained." Its last release, 5.1.0, dates from 15 October 2022.

Never accept insecure certificates

WebDriver has a capability for certificates, acceptInsecureCerts. The standard describes it in one line: "Indicates whether untrusted and self-signed TLS certificates are implicitly trusted on navigation for the duration of the session." It is off by default. With it off, Chrome stops at a certificate that is not the one of the site. Selenium then raises InsecureCertificateException, which its source describes as thrown when the browser "hits a certificate warning (expired or invalid TLS certificate)".

In our test, that happened 10 times in 131. Nine of those entries were SOCKS5 proxies whose certificate came from an issuer named "None, LLC" and had expired. Our earlier certificate test found the same issuer through free SOCKS5 proxies. With acceptInsecureCerts on, or any switch that ignores certificate errors, those pages would have loaded with nothing on the screen to show it. The proxy could then have read and changed them. Treat the error as the answer: drop the entry and take the next one.

Keep WebRTC off your own address

A proxy carries the page, not every connection the page opens. WebRTC, the real-time part of a browser used for calls and video, can open its own connections over UDP, and those can leave from your own IP address. RFC 8828 describes the case of a browser behind a proxy that may also reach the internet directly. There, "WebRTC's STUN checks will bypass the proxy and reveal the public IP address of the client". Chrome lets WebRTC use every network interface by default. The Chromium policy for this has a mode in which "WebRTC uses either UDP SOCKS proxying or will fallback to TCP proxying". Chrome takes the same setting as a switch, the one in the code above.

UDP through a free proxy is rare in any case. RFC 8828 notes that UDP is not supported by "all HTTP and most SOCKS" proxies. The Chromium documentation adds that SOCKS5 in Chrome "cannot be used to relay UDP traffic". When we tested 200 working free SOCKS5 proxies on 27 September 2026, 2 carried a UDP packet.

What no setting fixes

  • Logins and personal data. Never sign in, pay or type personal details in a browser behind a free proxy. In 10 of the 131 TLS sessions of our test, the certificate was not ours.
  • The rules of the site. A free proxy changes the address a request comes from, not what the site allows. Read the terms of the site, and stop where they forbid automated access.
  • Speed. A page took a median of about 23 seconds through a free proxy, against 2 seconds or less directly. That is enough for a look at a page, not for a long run.

When free is not enough

For a session that has to work on time, such as checking your own site from other countries, a residential proxy is the better tool. Its address belongs to a home connection, and it stays up while you work. Ours start at $0.44/GB, pay as you go, and purchased traffic has no scheduled expiry date. The choices for a paid setup, from proxy type to sessions, are in proxies for Selenium. A crawler without a browser is covered in free proxies for Scrapy.

The plain answer

Free proxies can carry Selenium, slowly. In our test of 300, 111 delivered a whole page, at a median of about 23 seconds, and 10 handed back a certificate that was not ours. Pass the entry to Chrome with --proxy-server, set the page load timeout to 30 seconds, start a new driver for each entry, and drop every entry that fails. Keep acceptInsecureCerts off, keep WebRTC to the proxy, and never sign in through a free proxy.

How we measured

On 28 September 2026 between 13:37 and 13:42 UTC, a script on our Linux server in the United States took a random sample from our free list API. It took 200 entries with the https flag and 100 SOCKS5 entries, all alive on their last check. Through each, it opened a tunnel to our site and ran TLS with HTTP/2. It then loaded one page and the 25 files its HTML names, about 497 KB, with the accept-encoding of a browser. Each load had 300 seconds in all. Three direct loads gave the certificate and the files to compare against. The rates at shorter limits replay the same timings, and Chrome may give up on a slow proxy sooner than our script did. The UDP test comes from our research on free proxies for gaming. We store no proxy addresses, and every time is in UTC.

Sources

Frequently asked questions

Do free proxies work with Selenium?
For a look at public pages, yes, if the script expects most of them to fail. On 28 September 2026, we loaded one page of our own site and its 25 files through 300 free proxies from our list, the way Chrome loads a page through a proxy. 111 delivered the whole page, at a median of about 23 seconds. The same page loaded directly in 0.4 to 2.0 seconds.
How do I use a free proxy in Selenium with Chrome?
Pass it to Chrome as a switch: options.add_argument('--proxy-server=http://203.0.113.7:8080') for an entry with the https flag on our list, or socks5://203.0.113.7:1080 for a SOCKS5 entry. Free entries need no login. The switch applies to the browser it launches, so a new entry means a new driver.
What page load timeout should I use with free proxies?
About 30 seconds, not the WebDriver default of 300. In our test, a browser working through the 300 entries one at a time would have loaded 33.8 whole pages per hour at a 30-second limit, against 16.3 at the default. Set it with driver.set_page_load_timeout(30) and move to the next entry on a timeout.
Why does Selenium raise InsecureCertificateException through a free proxy?
Because the proxy handed back a certificate that is not the one of the site. In our test, 10 of the 131 free proxies that finished TLS did that. Chrome stops there, and Selenium reports it. Drop that entry. Never switch on acceptInsecureCerts to get past it, since that lets the proxy read the page.
Does Selenium leak my real IP address through WebRTC?
It can. RFC 8828 says that behind a proxy that leaves direct internet access open, the STUN checks of WebRTC bypass the proxy and reveal your public IP address. Chrome lets WebRTC use every network interface by default. The switch --force-webrtc-ip-handling-policy=disable_non_proxied_udp keeps WebRTC to TCP through the proxy, or UDP only where the proxy carries it.
Can Chrome use a proxy with a username and password from Selenium?
Not through the switch. The Chromium documentation says Chrome will not use credentials embedded in its proxy settings, and supports no authentication for SOCKS5. Free list entries need none. For a paid gateway with a login, see our guide to proxies in Selenium.

Get proxies that are alive right now

Our free proxy list re-checks every exit every few minutes across 100+ countries, with a live last-checked time, so you copy IPs that worked moments ago, not a stale text dump. When the location has to survive a real check, the paid network holds up.

129M+ proxy checks run · 100+ countries · HTTP / HTTPS / SOCKS · re-checked every few minutes · no signup

HProxy.

Honest guides and comparisons on proxies, scraping and staying unblocked, from the team that runs the network.

RSS feed