Как Cloudflare различает трафик Selenium и Requests c? - PullRequest
1 голос
/ 29 мая 2020

Контекст

В настоящее время я пытаюсь создать небольшого бота с использованием модуля Selenium и запросов в Python.
Однако веб-страница, с которой я хочу взаимодействовать, работает за Cloudflare.
Мой сценарий python выполняется через Tor с использованием модуля основы.
Анализ моего трафика c основан на Firefox «Параметры разработчика-> Сеть» с использованием журналов сохранения.

Мои выводы пока:

  • Веб-драйвер Selenium Firefox часто может получить доступ к веб-странице без прохождения «проверки страницы браузера» (код возврата 503) и «страницы ввода кода» (код возврата 403).
  • Запросы объекта сеанса с одним и тем же пользовательским агентом всегда приводят к «странице ввода капчи» (код возврата 403).

Если Cloudflare проверял мою Javascript функциональность, мой модуль запросов не должен возвращать 503 ?

Пример кода

driver = webdriver.Firefox(firefox_profile=fp, options=fOptions)
driver.get("https://www.cloudflare.com")   # usually returns code 200 without verifying the browser

session = requests.Session()
# ... applied socks5 proxy for both http and https ... #
session.headers.update({"user-agent": driver.execute_script("return navigator.userAgent;")})
page = session.get("https://www.cloudflare.com")
print(page.status_code) # return code 403
print(page.text)        # returns "captcha page"

Оба модуля Selenium и Requests используют один и тот же пользовательский агент и IP.
Оба используют GET без каких-либо параметров.
Как Cloudflare dis tin guish эти трафик c?
Я что-то упустил?


Я попытался передать файлы cookie с веб-драйвера в сеанс запросов, чтобы узнать, возможен ли обход, но не повезло.
Вот используемый код:

for c in driver.get_cookies():
    session.cookies.set(c['name'], c['value'], domain=c['domain'])
...