rtfox-browser: что изменилось — полная поддержка прокси и смена на лету

Несколько недель назад мы публиковали материал о том, как форкнули undetected-chromedriver и добавили базовую поддержку SOCKS5, мультипроцессинг и модуль капчи. Читатели активно писали с одним и тем же вопросом: а HTTP и HTTPS прокси когда? Отвечаем — уже готово.

Что изменилось

Раньше библиотека умела работать только с SOCKS5. Теперь поддерживаются все три протокола, и выбирается нужный через один параметр type:

driver = uc.Chrome(proxy={ "host": "1.2.3.4", "port": 1080, "type": "socks5", # или "http" / "https" "user": "login", "pass": "password", })

Кроме этого добавили три способа передачи прокси — через словарь, через именованные параметры и через объект ProxyConfig. Кто как привык — тот так и использует.

Смена прокси на лету

Это, пожалуй, самое интересное в обновлении. Прокси теперь можно менять прямо во время работы браузера — без остановки, без перезапуска, без потери сессии:

import rtfox_browser as uc from rtfox_browser.proxy_types import ProxyType driver = uc.Chrome() driver.get("https://2ip.ru/") # меняем прокси driver.proxy_replacement( host="1.2.3.4", port=1080, proxy_type=ProxyType.SOCKS5, user="login", password="password", ) driver.refresh() # или через dict driver.proxy_replacement({ "host": "5.6.7.8", "port": 8080, "type": "http", }) # отключить прокси — прямое соединение driver.proxy_replacement(None)

По умолчанию после смены прокси автоматически очищаются кэш и куки — чтобы браузер открыл свежие соединения. Если это не нужно, можно отключить через clear_connections=False.

Работает это благодаря тому, что локальный прокси-туннель запускается всегда — даже если прокси не передан при старте. Браузер всегда смотрит на localhost, а туннель уже сам решает куда форвардить трафик. Это позволяет подменять внешний прокси в любой момент без каких-либо изменений в самом Chrome.

Практический сценарий

Типичная задача — один браузер, пул из нескольких прокси, ротация по расписанию или при бане. Раньше для этого нужно было пересоздавать весь драйвер. Теперь:

import rtfox_browser as uc from rtfox_browser.proxy_types import ProxyType proxies = [ {"host": "1.1.1.1", "port": 1080, "type": "socks5"}, {"host": "2.2.2.2", "port": 8080, "type": "http"}, {"host": "3.3.3.3", "port": 3128, "type": "https"}, ] driver = uc.Chrome() for proxy in proxies: driver.proxy_replacement(proxy) driver.get("https://2ip.ru/") # ваша логика

Установка и обновление

pip install rtfox-browser

Если уже установлена старая версия:

pip install --upgrade rtfox-browser

Требования: Python 3.9+, Google Chrome.

Ссылки: