Skip to main content

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.

Cloudflare bypass


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

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rtfox_browser-0.0.1.tar.gz (33.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rtfox_browser-0.0.1-py3-none-any.whl (34.9 kB view details)

Uploaded Python 3

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

Hashes for rtfox_browser-0.0.1.tar.gz
Algorithm Hash digest
SHA256 6544c58ad7336ecdb20e2406dc1274079eb1225f7337f699f48fc0bac6b8b341
MD5 107a0191239523be6c377066a41974d6
BLAKE2b-256 f08da0fbbe329e14e99d6b248f6aacdfc7ebfc54c9a6e1eba76aa2859ce7ac53

See more details on using hashes here.

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

Hashes for rtfox_browser-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 66623a06fdc424842c47e3769856ab34edb5626bfabaad734eb09b49a23447c8
MD5 a3ce720d5d90812123852b459d705afa
BLAKE2b-256 e2428c36dda1bc7b8554f6b4baebfbcbd02c46ca2ce58926bf8feca93b512599

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page