Как обойти обнаружение Cloudflare

Selenium vs Puppeteer

Selenium и Puppeteer - это два широко используемых инструмента для автоматизации браузера, которые играют ключевую роль в различных сценариях, таких как тестирование веб-страниц и сбор данных.

 

Selenium

Selenium - популярный инструмент для автоматизации браузера с открытым исходным кодом, который предоставляет набор API, позволяющих разработчикам симулировать взаимодействие пользователя с браузером.

 

Плюсы:

  • Поддержка нескольких языков: Selenium без проблем поддерживает различные основные языки программирования, включая Java, C#, Python и Ruby, что обеспечивает большую гибкость для разработчиков.

  • Совместимость с различными браузерами: Selenium может работать в различных браузерах, таких как Chrome, Firefox, Safari, что делает возможным тестирование на разных браузерах и платформах.

  • Богатая интеграция с тестовыми рамками: Selenium легко интегрируется с тестовыми рамками, такими как JUnit, TestNG, и инструментами непрерывной интеграции, такими как Jenkins.

  • Прочная поддержка сообщества: у Selenium большое сообщество для своевременной обратной связи и поддержки в решении проблем и внедрении новых функций.

  • Функция явного ожидания: Selenium предоставляет функцию явного ожидания, которая удобно обрабатывает асинхронные операции.

  • Обширная обработка ошибок: Selenium имеет механизмы для обработки различных ситуаций с ошибками, предоставляя полезную обратную связь и подсказки.

  • Поддерживает распределенное тестирование: Selenium Grid поддерживает одновременное тестирование в разных средах и на разных машинах.

  • Запись тестов: Selenium IDE предоставляет функции записи и воспроизведения, которые облегчают создание и отладку тестовых скриптов.

  • Богатое расположение элементов страницы: Selenium поддерживает несколько способов расположения элементов страницы, таких как расположение CSS, расположение XPath и т. д.

  • Широкое применение: Selenium широко используется в автоматическом тестировании веб-приложений, и есть множество случаев и опыта, на которые можно ссылаться.

 

 

Недостатки:

  • Накладные расходы на производительность: Selenium должен запускать реальные браузеры для операций, что может потребовать значительных ресурсов и производительности.

  • Устаревший дизайн API: API Selenium относительно стар, что может потребовать некоторой адаптации для современных практик разработки.

  • Слабая поддержка динамических страниц: для одностраничных приложений (SPA) или страниц, которые активно используют Ajax, Selenium может потребовать более сложного кода для обработки.

  • Требуются отдельные драйверы: каждый браузер требует соответствующего драйвера, а установка и обслуживание драйверов требуют дополнительной работы.

  • Требует больше ресурсов при одновременном запуске тестов: Selenium потребляет больше ресурсов ЦП и памяти при параллельном выполнении нескольких тестовых случаев.

  • Нет встроенной функции снимка экрана и записи: Selenium не может напрямую записывать экраны и делать снимки экрана, что может быть неудобно в некоторых случаях.

  • Невозможно напрямую контролировать сеть: Selenium не может перехватывать и изменять сетевые запросы или симулировать офлайн-статус.

  • Невозможно выполнить сложный JavaScript: хотя Selenium может выполнять JavaScript, он может иметь ограничения для сложных скриптов.

  • Недостаточная информация для отладки: информация об ошибках и вывод журнала Selenium может быть недостаточно подробной для отладки.

 

Puppeteer

В отличие от Selenium, Puppeteer - это более новый инструмент, разработанный и поддерживаемый командой Google Chrome. Puppeteer - это библиотека Node.js, которая предоставляет высокоуровневый API для управления Chromium или Chrome через протокол DevTools.

Хотя и Selenium, и Puppeteer могут быть использованы для автоматизации браузера, между ними есть некоторые ключевые различия. Вот преимущества и недостатки Puppeteer.

 

Плюсы:

  • Современный API: дизайн API Puppeteer больше соответствует современному мышлению программирования на JavaScript, использует Promise для асинхронных операций и проще в понимании и контроле.

  • Отличная производительность: Puppeteer имеет значительное преимущество в производительности благодаря своей способности запускать Chrome без головы.

  • Обширные функции: Помимо базовых операций автоматизации браузера, Puppeteer также поддерживает продвинутые операции, такие как снимки веб-страниц, генерация PDF и перехват сетевых запросов.

  • Поддержка SPA: Puppeteer может ожидать выполнения JavaScript, таким образом, лучше обрабатывая одностраничные приложения (SPA) или страницы, которые используют Ajax.

  • Удобная поддержка отладки: Puppeteer предоставляет богатые опции отладки, такие как вывод подробной информации в процессе операции в консоль.

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

  • Поддержка функций Chrome: Puppeteer может использовать все последние функции Chrome, такие как отладка с помощью Chrome DevTools.

  • Предоставляет богатые примеры: официальная документация Puppeteer содержит большое количество примеров использования, охватывающих большинство общих сценариев использования.

  • Поддержка записи операций на странице: Puppeteer может записывать операции пользователя на странице и генерировать скрипты, которые можно запустить напрямую.

  • Хорошая обработка ошибок: когда Puppeteer сталкивается с ошибкой, он предоставляет подробную информацию об ошибке, чтобы помочь разработчикам найти проблему.

 

Недостатки:

  • Ограничение языка: Puppeteer поддерживает только JavaScript, что может ограничить его использование некоторыми разработчиками.

  • Ограничение браузера: Puppeteer поддерживает только Chromium или Chrome, поэтому он не может выполнять тестирование на разных браузерах.

  • Относительно высокий уровень обучения: для разработчиков, не знакомых с Promise или Node.js, Puppeteer может потребовать некоторого обучения.

  • Меньший размер сообщества: по сравнению с Selenium, у Puppeteer меньше сообщество, поэтому вы можете не получить своевременные ответы при возникновении проблем.

  • Проблемы совместимости с не-Chrome браузерами: поскольку Puppeteer разработан командой Chrome, могут возникнуть проблемы совместимости при использовании не-Chrome браузеров.

  • Требуется среда Node.js: Puppeteer - это библиотека Node.js и ей нужна среда Node.js для работы, что может потребовать дополнительной установки и настройки.

  • Возможные проблемы со сложными операциями DOM: хотя Puppeteer может выполнять JavaScript, он может иметь трудности со сложными операциями DOM.

  • Потенциальные риски безопасности: Puppeteer требует достаточных разрешений для управления браузером, что может представлять потенциальные риски безопасности.

  • Недостаточная поддержка старых версий Node.js: Puppeteer требуется более новая версия Node.js для полного использования его функций.

 

Вывод

Выбор между Selenium и Puppeteer зависит от ваших конкретных потребностей и среды. Оба инструмента имеют свои уникальные преимущества и применимые сценарии.

Если вам нужно выполнить тестирование на разных браузерах, или если ваша команда уже знакома и использует языки, такие как Python, Java или C#, то Selenium может быть лучшим выбором, поскольку он поддерживает несколько браузеров и языков.

Если вам нужно выполнить некоторые продвинутые операции, такие как снимки экрана, генерация PDF, перехват сетевых запросов и т.д., или если ваша команда в основном использует JavaScript, то Puppeteer может быть более подходящим для вас, так как Puppeteer предоставляет больше функций и более современный API.

 

Что такое Cloudflare?

Cloudflare - это компания, которая предоставляет услуги CDN, защиту от атак DDoS и услуги интернет-безопасности. Cloudflare может помочь веб-сайтам ускорить загрузку страниц, защитить веб-сайты от вредоносных атак и предоставить множество других услуг по оптимизации и безопасности.

Когда пользователи пытаются получить доступ к веб-сайту, использующему услуги Cloudflare, их запросы сначала отправляются в сеть Cloudflare. Cloudflare проанализирует запрос, чтобы определить, исходит ли он от законного пользователя. Cloudflare использует следующие техники для обнаружения, является ли пользователь роботом:

 

Черный список IP

Проверяя IP-адрес запроса, Cloudflare может идентифицировать известные вредоносные IP и сети. Cloudflare поддерживает большую базу данных IP, которая может идентифицировать известные источники спама, вредоносных программ и т.д.

 

Анализ заголовков HTTP-запросов

Cloudflare проверит информацию заголовка HTTP-запроса, такую как поле User-Agent, чтобы увидеть, соответствует ли она характеристикам нормального браузера. Многие инструменты автоматизации или краулеры могут использовать нестандартные или явно идентифицируемые User-Agents.

 

Анализ поведения

Cloudflare будет отслеживать поведение посетителей, включая частоту запросов, посещенные страницы и т.д. Если образец поведения посетителя не соответствует образцу поведения нормального пользователя, например, выпускает большое количество запросов за короткий период времени, Cloudflare может считать его роботом.

 

Задача JavaScript

Cloudflare отправит посетителю кусок JavaScript-кода, который должен быть выполнен в браузере, и этот код вернет результат вычисления. Поскольку большинство роботов и краулеров не могут выполнить код JavaScript, это эффективный метод обнаружения.

 

Задача CAPTCHA

Для подозрительных посещений Cloudflare попросит посетителя решить CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart). Обычно люди могут решить эту задачу, а роботы - нет.

 

Отпечатки пальцев SSL/TLS

Проверяя процесс рукопожатия клиента SSL/TLS, Cloudflare может идентифицировать определенные вредоносные инструменты или известные не-браузерные программы.

 

Cloudflare может обнаруживать Selenium или Puppeteer?

Cloudflare использует ряд сложных техник для идентификации нечеловеческого поведения при доступе. Хотя он не может напрямую идентифицировать Selenium или Puppeteer, он может косвенно обнаружить использование этих инструментов автоматизации, анализируя характеристики поведения при доступе. Например, Cloudflare может обнаружить общедоступные, известные идентификаторы инструментов автоматизации, проверяя поле User-Agent. В то же время он может идентифицировать аномальные шаблоны запросов, анализируя частоту запросов, или найти различия в среде выполнения Selenium или Puppeteer через JavaScript-вызовы.

Кроме того, Cloudflare также может использовать специальные маркеры WebDriver для обнаружения использования Selenium или идентифицировать автоматизированное поведение через распознавание отпечатков пальцев WebGL и анализ событий мыши и клавиатуры. Поэтому, если вы хотите использовать Selenium или Puppeteer для доступа к веб-сайтам, защищенным Cloudflare, вам нужно максимально имитировать реальное поведение пользователя, включая установку разумных User-Agents, добавление интервалов запросов, скрытие маркеров WebDriver и т.д., чтобы избежать распознавания Cloudflare как автоматизированного поведения.

 

Как обойти Cloudflare?

Метод 1: Обход Cloudflare CDN, вызывая исходный сервер

Selenium

Вот пример использования библиотеки Python requests для обхода CDN через исходный сервер:

import requests

# This is the IP address of the origin server
source_server_ip = '123.456.789.012'

# This is the URL you want to access
url = 'http://www.example.com'

# Create a new request session
session = requests.Session()

# Create a custom adapter and set the IP address of the origin server as the resolution result
class SourceServerAdapter(requests.adapters.HTTPAdapter):
    def get_connection(self, url, proxies=None):
        return super().get_connection(f'{source_server_ip}', proxies)

# Mount the custom adapter to the session, it will be used to handle all HTTP and HTTPS requests
session.mount('http://', SourceServerAdapter())
session.mount('https://', SourceServerAdapter())

# Send the request
response = session.get(url)

Пожалуйста, обратите внимание, что этот пример предполагает, что вы уже знаете IP-адрес исходного сервера. Если вы его не знаете, вам может потребоваться использовать другие методы для его поиска, такие как выполнение DNS-запроса или использование сетевых сканирующих инструментов.

Кроме того, этот пример является всего лишь одним из возможных решений и может не подходить для всех ситуаций. Например, некоторые веб-сайты могут проверять заголовок Host запроса, и если он не совпадает с IP-адресом исходного сервера, запрос может быть отклонен. В этом случае вам может потребоваться использовать другие методы для обхода CDN, такие как использование VPN или прокси-сервера.

 

Puppeteer

Чтобы использовать Puppeteer для обхода Cloudflare CDN и прямого доступа к исходному серверу, вам нужно знать IP-адрес исходного сервера. Затем вы можете изменить файл /etc/hosts, чтобы разрешить доменное имя исходного сервера на его IP-адрес. После этого вы можете использовать Puppeteer для доступа к веб-сайту, как обычно, и он будет подключаться напрямую к исходному серверу, а не через Cloudflare CDN.

 

Вот возможное решение:

1.Сначала измените файл /etc/hosts, добавив строку для разрешения доменного имени исходного сервера на его IP-адрес. Например, если IP-адрес исходного сервера - 201.45.179.12, а доменное имя - www.example.com, добавьте следующее содержимое:

201.45.179.12 www.example.com

 

2.Затем получите доступ к веб-сайту, используя следующий код Node.js и Puppeteer:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('http://www.example.com');
  await page.screenshot({path: 'example.png'});

  await browser.close();
})();

Пожалуйста, обратите внимание, что изменение файла /etc/hosts может потребовать прав администратора и может повлиять на сетевые настройки вашей системы. После завершения визита вы должны вернуть файл /etc/hosts в исходное состояние.

Кроме того, этот метод может не работать во всех ситуациях. Например, если веб-сайт использует HTTPS, браузер может отказаться от доступа из-за ошибки сертификата. В этом случае вам может потребоваться использовать другие методы для обхода Cloudflare CDN, такие как использование VPN или прокси-сервера.

 

Метод 2: Обход комнаты ожидания Cloudflare

Комната ожидания Cloudflare - это широко используемый режим защиты веб-сайтов для защиты веб-сайтов от злонамеренных атак и перегрузки трафика. Обычно он мониторит частые действия доступа и рассматривает их как потенциальные злонамеренные атаки. Поэтому установка разумной скорости и частоты доступа очень важна. Соблюдение правил Robots.txt веб-сайта и избежание слишком быстрого запроса страниц может снизить вероятность обнаружения системой защиты.

Чтобы обойти комнату ожидания Cloudflare, вам нужно заставить Selenium/Puppeteer вести себя как настоящий браузер. Вот простой пример кода на Python и Selenium:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# Start webdriver
driver = webdriver.Firefox()

# Visit the website
driver.get('https://www.example.com')

# Wait for the JavaScript challenge to complete, you can adjust the waiting time
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'content')))

# Now you can proceed with your automation process

 

Этот код посетит https://www.example.com, затем подождет 10 секунд для завершения работы Комнаты ожидания. Время ожидания может потребовать корректировки в соответствии с актуальной ситуацией на веб-сайте.

Однако, обратите внимание, что этот метод может не всегда быть эффективным. Комната ожидания Cloudflare разработана очень сложно, и ее цель - предотвратить доступ автоматизированными инструментами. Если вы обнаружите, что этот метод не работает, это может быть из-за того, что Cloudflare обновил свой механизм, и вам нужно попробовать другие методы.

 

Method 3: Обход CAPTCHA Cloudflare

Проверка CAPTCHA от Cloudflare предназначена для предотвращения доступа автоматизированных скриптов и роботов к веб-сайтам, поэтому использование Selenium или других инструментов автоматизации для обхода этой проверки требует некоторых уловок. В дополнение к использованию прокси-серверов, некоторые сторонние службы предоставляют API для автоматического решения CAPTCHA, и мы можем использовать эти API для обхода ограничений CAPTCHA Cloudflare.

2Captcha и Anti-Captcha оба предоставляют услуги по автоматическому решению CAPTCHA. Они используют реальных людей для решения CAPTCHA, а затем возвращают решение вашей программе. Затем ваша программа может использовать это решение для продолжения процесса автоматизации.

Ниже приведен пример кода на Python, использующего 2Captcha и Selenium для решения Google reCAPTCHA:

from selenium import webdriver
from time import sleep
import requests
import json

# 2Captcha's API key
api_key = 'your_2captcha_api_key'

# Start webdriver
driver = webdriver.Firefox()
driver.get('https://www.google.com/recaptcha/api2/demo')

# Get the site key of reCAPTCHA
site_key = driver.find_element_by_class_name('g-recaptcha').get_attribute('data-sitekey')

# Send a request to 2Captcha to solve reCAPTCHA
response = requests.post('http://2captcha.com/in.php', data={
    'key': api_key,
    'method': 'userrecaptcha',
    'googlekey': site_key,
    'pageurl': 'https://www.google.com/recaptcha/api2/demo',
    'json': 1
})

# Get the request ID from 2Captcha
request_id = json.loads(response.text)['request']

# Wait for 2Captcha to solve reCAPTCHA
while True:
    response = requests.get(f'http://2captcha.com/res.php?key={api_key}&action=get&id={request_id}&json=1')
    result = json.loads(response.text)

    if result['status'] == 1:
        # Enter the solution into reCAPTCHA
        driver.execute_script(f'document.getElementById("g-recaptcha-response").innerHTML="{result["request"]}";')
        sleep(2)
        driver.find_element_by_id('recaptcha-demo-submit').click()
        break

    sleep(5)

 

Method 4: Использование анти-детект браузера

Использование браузера с отпечатками пальцев для автоматизированных операций может обойти некоторые защитные механизмы Cloudflare, поскольку эти браузеры могут имитировать поведение и среду просмотра реальных пользователей. Браузеры с отпечатками пальцев могут изменять или случайным образом выбирать свои отпечатки, делая вид, что каждый визит происходит от разного, реального пользователя. Это затрудняет распознавание Cloudflare, что эти запросы на самом деле генерируются автоматизированными инструментами.

Однако вам следует отметить, что использование браузера с отпечатками пальцев не гарантирует, что вы сможете обойти Cloudflare или другие подобные сервисы. Эти сервисы постоянно обновляют и улучшают свои механизмы идентификации и блокировки автоматизированного трафика. Поэтому вам также нужно сочетать прокси-серверы и соответствующие скрипты для достижения этого.

 

Проверьте ваши скрипты

Когда вы используете скрипт автоматизации для прохождения Cloudflare или для выполнения некоторых автоматизированных процессов задач, вы можете использовать BrowserScan, чтобы проверить, идеален ли ваш скрипт и проверить, где есть особенности автоматизационных инструментов.

 

BrowserScan может помочь вам проверить ваши скрипты по шести аспектам: Webdriver, Webdriver Advance, Selenium, NightmareJS, PhantomJS и Native Navigator.

 

WebDriver

Веб-сайты могут определять, используют ли пользователи WebDriver для управления браузером, главным образом потому, что WebDriver оставляет некоторые специфические отметки или свойства при управлении браузером.

Например, по умолчанию, при использовании инструментов автоматизации пользовательского интерфейса, таких как Selenium/Puppeteer, для посещения веб-страниц, значение переменной navigator.webdriver равно true.

 

Selenium

Эта часть будет обнаруживать больше свойств браузера. После использования Selenium для открытия браузера появятся некоторые коды функций. Как только эти коды функций будут распознаны, веб-сайт сможет определить, что пользователь контролируется Selenium.

Если ваш скрипт автоматизации не учитывает эти особенности хорошо, это будет отображено как "True" в BrowserScan.

webdriver  
__driver_evaluate  
__webdriver_evaluate  
__selenium_evaluate  
__fxdriver_evaluate  
__driver_unwrapped  
__webdriver_unwrapped  
__selenium_unwrapped  
__fxdriver_unwrapped  
_Selenium_IDE_Recorder  
_selenium  
calledSelenium  
_WEBDRIVER_ELEM_CACHE  
ChromeDriverw  
driver-evaluate  
webdriver-evaluate  
selenium-evaluate  
webdriverCommand  
webdriver-evaluate-response  
__webdriverFunc  
__webdriver_script_fn  
__$webdriverAsyncExecutor  
__lastWatirAlert  
__lastWatirConfirm  
__lastWatirPrompt  

 

NightmareJS, PhantomJS

NightmareJS: это высокоуровневая библиотека автоматизации браузера, построенная на Electron. Он использует движок рендеринга Chromium и среду выполнения Node.js. NightmareJS стремится предоставить более простой, более удобный для пользователя API, а также более мощные функции, такие как поддержка взаимодействия пользователей (клики, набор текста и т. д.) и анализ производительности страницы.

PhantomJS: это браузер без головы, он использует движок рендеринга WebKit (тот же, что используется в старых версиях Safari и других устройствах Apple) для отрисовки страниц и JavaScriptCore для выполнения JavaScript. PhantomJS поддерживает различные веб-стандарты: обработка DOM, CSS-селекторы, JSON, Canvas и SVG. Однако разработка PhantomJS остановилась в 2018 году.

BrowserScan будет определять, управляется ли ваш скрипт этими двумя инструментами. Если он показывает "False", это означает, что вы в настоящее время не используете эти два инструмента для управления браузером, или вы скрыли особенности инструментов автоматизации браузера, и BrowserScan не получил связанную информацию.

 

Native Navigator

BrowserScan может определить, являются ли свойства объекта Navigator нативными методами.

 

Веб-сайты часто используют объект Navigator для определения, являются ли пользователи роботами:

  • navigator.userAgent: Это свойство возвращает строку, содержащую название браузера, версию, операционную систему и информацию о движке браузера. Если эта строка соответствует характеристикам инструментов автоматизации, веб-сайт может пометить посетителей как роботов.

  • navigator.plugins и navigator.mimeTypes: Эти два свойства возвращают список плагинов и поддерживаемых браузером MIME-типов. Некоторые инструменты автоматизации могут не поддерживать плагины или MIME-типы, или список поддерживаемых элементов может отличаться от обычных браузеров, что может использоваться веб-сайтами для обнаружения роботов.

  • navigator.cookieEnabled: Это свойство указывает, включены ли в браузере куки. Некоторые инструменты автоматизации могут отключить куки, что может быть обнаружено веб-сайтами как роботы.

  • navigator.languages: Это свойство возвращает настройки языка браузера. Если эта настройка не соответствует географическому местоположению посетителя или другим настройкам браузера, веб-сайт может пометить его как робота.

  • navigator.doNotTrack: Это свойство указывает, установлен ли в браузере "Не отслеживать". Инструменты автоматизации могут включить эту настройку, что может быть обнаружено веб-сайтами как роботы.

  • navigator.javaEnabled(): Этот метод возвращает, включен ли в браузере Java. Инструменты автоматизации могут отключить Java, что может быть обнаружено веб-сайтами как роботы.

 

Кроме того, некоторые другие свойства и методы также могут быть использованы для обнаружения роботов, такие как navigator.hardwareConcurrency (возвращает логическое количество ядер CPU), navigator.deviceMemory (возвращает размер оперативной памяти устройства) и т.д.

 

Финальные советы

  • Регулярно обновляйте свои инструменты автоматизации: Cloudflare регулярно обновляет свои алгоритмы обнаружения. Чтобы обойти обнаружение, убедитесь, что ваши инструменты автоматизации (такие как Selenium, Puppeteer и т.д.) обновлены.

  • Имитируйте поведение человека: Сделайте так, чтобы ваш скрипт автоматизации действовал больше как человек. Это может включать случайные задержки между действиями, перемещение курсора мыши по нелинейной траектории, прокрутку страницы и т.д.

  • Используйте резидентные прокси: Cloudflare скорее всего будет блокировать трафик с IP-адресов центров обработки данных, которые обычно используют боты. Использование резидентных прокси может помочь обойти обнаружение.

  • Периодически меняйте свой агент пользователя: Регулярно меняйте строку агента пользователя вашего браузера. Это может помочь избежать обнаружения, поскольку Cloudflare может пометить повторяющиеся строки агента пользователя как поведение бота.

  • Избегайте очевидного поведения бота: Действия, такие как быстрое открытие множества соединений или слишком много запросов за короткий промежуток времени, могут вызвать обнаружение бота Cloudflare.

  • Обрабатывайте CAPTCHA: Используйте такие сервисы, как 2Captcha или Anti-Captcha, чтобы решать CAPTCHA, которые может представить Cloudflare.

  • Имитируйте реальный браузер: Настройте свой инструмент автоматизации так, чтобы он максимально точно имитировал реальный браузер. Это включает в себя включение JavaScript, принятие куки и т.д.

Предыдущий
Как настроить HTTP/SOCKS5 прокси на Switchy Omega
Следующий
Что такое утечка IP-адреса и как её предотвратить?
Последнее изменение: 2024-01-26Powered by