Undetected Chrome browser driver with proxy support and captcha solving.
Project description
rfox-browser
Undetected Chrome browser driver with SOCKS5 proxy, captcha solving and multiprocessing support.
Based on
This project is a fork of undetected-chromedriver by @UltrafunkAmsterdam.
We took the core Chrome driver stealth patching logic as a base and extended it with:
- SOCKS5 proxy support with authentication
- Built-in captcha solving module with plugin API
- Multiprocessing isolation (per-worker profiles and binaries)
- Structured logging via loguru
- Improved cleanup and shutdown handling
Original project is licensed under GPL-3.0 — this fork inherits the same license.
Features
- 🛡️ Bypasses CloudFlare / hCaptcha / Imperva detection out of the box
- 🔒 SOCKS5 proxy support with authentication
- 🧩 Built-in captcha solving module (2 solvers included)
- ⚙️ Custom captcha solver API — share your own solvers
- 🚀 Multiprocessing support
- 🖥️ Cross-platform: Linux, macOS, Windows
Installation
pip install rfox-browser
Quick start
import rtfox_browser as uc
driver = uc.Chrome()
driver.get("https://example.com")
driver.quit()
Proxy (SOCKS5 with authentication)
driver = uc.Chrome(
proxy={
"host": "1.2.3.4",
"port": 1080,
"user": "username",
"pass": "password",
}
)
Proxy exceptions
| Exception | Cause |
|---|---|
ProxyInvalidAddressError |
Malformed host or port |
ProxyAuthError |
Wrong login / password |
ProxyError |
General proxy failure |
from rtfox_browser.exceptions import ProxyError, ProxyAuthError, ProxyInvalidAddressError
try:
driver = uc.Chrome(proxy={...})
except ProxyInvalidAddressError:
print("Invalid proxy address")
except ProxyAuthError:
print("Wrong credentials")
except ProxyError:
print("Proxy connection failed")
Multiprocessing
Each worker gets its own isolated Chrome profile and chromedriver binary.
from multiprocessing import Pool
import rtfox_browser as uc
def run_worker(worker_id):
driver = uc.Chrome(
worker_id=worker_id,
user_multi_procs=True,
)
driver.get("https://example.com")
driver.quit()
with Pool(4) as pool:
pool.map(run_worker, ["w1", "w2", "w3", "w4"])
Captcha solving
rfox-browser includes a captcha module with 2 built-in solvers.
Solvers are loaded automatically from a solvers/ directory in your working directory.
Setup
from rtfox_browser.captcha import CaptchaService
driver = uc.Chrome()
captcha = CaptchaService(api_key="YOUR_2CAPTCHA_KEY", driver=driver)
# Check available solvers
print(captcha.available())
# ['ebay_hcaptcha', 'aws_image']
Solve a captcha
driver.get("https://example.com")
captcha.ebay_hcaptcha()
Custom solvers directory
captcha = CaptchaService(
api_key="YOUR_KEY",
driver=driver,
solvers_dir="/path/to/your/solvers",
)
Creating your own captcha solver
You can write your own solver and drop it into the solvers/ folder —
it will be picked up automatically. No registration needed.
1. Create a file in solvers/my_solver.py:
from rtfox_browser.captcha import BaseCaptchaSolver
class MySolver(BaseCaptchaSolver):
name = "my_captcha" # this becomes the method name on CaptchaService
def solve(self, **kwargs) -> bool:
driver = self.driver # Selenium WebDriver
api_key = self.api_key # 2captcha API key
# your solving logic here
...
return True # True = solved, False = failed
2. Use it:
captcha = CaptchaService(api_key="KEY", driver=driver)
captcha.my_captcha()
3. Or register manually at runtime:
captcha.register(MySolver)
captcha.my_captcha()
BaseCaptchaSolver API
| Property | Type | Description |
|---|---|---|
name |
str |
Method name exposed on CaptchaService |
self.driver |
WebDriver |
The active browser instance |
self.api_key |
str |
API key passed to CaptchaService |
solve(**kwargs) |
bool |
Your solving logic, return True on success |
Cross-platform support
| OS | Supported |
|---|---|
| Linux | ✅ |
| macOS | ✅ |
| Windows | ✅ |
Community
💬 Telegram: @rtf_labs_studio
🎥 YouTube: RTF Labs Studio
License
GPL-3.0 © rtf-labs-studio
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rtfox_browser-0.0.1.tar.gz.
File metadata
- Download URL: rtfox_browser-0.0.1.tar.gz
- Upload date:
- Size: 33.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6544c58ad7336ecdb20e2406dc1274079eb1225f7337f699f48fc0bac6b8b341
|
|
| MD5 |
107a0191239523be6c377066a41974d6
|
|
| BLAKE2b-256 |
f08da0fbbe329e14e99d6b248f6aacdfc7ebfc54c9a6e1eba76aa2859ce7ac53
|
File details
Details for the file rtfox_browser-0.0.1-py3-none-any.whl.
File metadata
- Download URL: rtfox_browser-0.0.1-py3-none-any.whl
- Upload date:
- Size: 34.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66623a06fdc424842c47e3769856ab34edb5626bfabaad734eb09b49a23447c8
|
|
| MD5 |
a3ce720d5d90812123852b459d705afa
|
|
| BLAKE2b-256 |
e2428c36dda1bc7b8554f6b4baebfbcbd02c46ca2ce58926bf8feca93b512599
|