Селен и безголовый браузер постоянно просят капчу

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

Также стоит упомянуть, что он работает нормально локально в любом режиме, а также хорошо работает в облаке для неавтоматизированной версии, но как только я запускаю его там с Selenium в любом режиме, он продолжает запрашивать капчу. Любые идеи о том, что может происходить и идеи по решению, с благодарностью

2 ответа

Решение

В дискуссии под названием " Как recaptcha 3 узнает, что я использую селен / хромедривер", мы обсудили некоторые общие подходы, чтобы избежать обнаружения при просмотре веб-страниц. Давайте глубоко нырять.


Безголовый браузер

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


Зачем обнаруживать безголовый браузер?

Согласно @AntoineVastel, безголовые браузеры используются для автоматизации вредоносных задач. Наиболее распространенные случаи - это просмотр веб-страниц, увеличение показов рекламы или поиск уязвимостей на веб-сайте.

Еще год назад одним из самых популярных безголовых браузеров был PhantomJS. Поскольку он построен на платформе Qt, он имеет много отличий по сравнению с большинством популярных браузеров. Было возможно обнаружить PhantomJS, используя некоторые методы снятия отпечатков в браузере. Начиная с версии 59, Google выпустила безголовую версию своего браузера Chrome. В отличие от PhantomJS, он основан на ванильном Chrome, а не на внешней структуре, что делает его присутствие более трудным для обнаружения. Так что, вероятно, есть другие способы обнаружения Chrome без головы.


Обнаружение Chrome Headless

  • Пользовательский агент: атрибут пользовательского агента обычно используется для определения ОС, а также браузера пользователя. В Chrome версии 59 он имеет следующее значение:

    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/59.0.3071.115 Safari/537.36
    
    • Проверить наличие Chrome без головы можно через:

      if (/HeadlessChrome/.test(window.navigator.userAgent)) {
          console.log("Chrome headless detected");
      }
      
  • Плагины: navigator.plugins возвращает массив плагинов, присутствующих в браузере. Как правило, в Chrome мы находим плагины по умолчанию, такие как Chrome PDF viewer или же Google Native Client, Напротив, в режиме без заголовка возвращаемый массив не содержит плагинов.

    • Проверить наличие плагинов можно с помощью:

      if(navigator.plugins.length == 0) {
          console.log("It may be Chrome headless");
      }
      
  • Языки: в Chrome два атрибута Javascript позволяют получать языки, используемые user: navigator.language а также navigator.languages, Первый - это язык пользовательского интерфейса браузера, а второй - массив строк, представляющих предпочтительные языки пользователя. Тем не менее, в режиме без головы, navigator.languages возвращает пустую строку.

    • Проверить наличие языков можно через:

      if(navigator.languages == "") {
           console.log("Chrome headless detected");
      }
      
  • WebGL: WebGL - это API для выполнения 3D-рендеринга на холсте HTML. С помощью этого API можно запросить информацию о поставщике графического драйвера, а также о представителе графического драйвера. С ванильным Chrome и Linux мы можем получить следующие значения для рендерера и вендора: Google SwiftShader а также Google Inc., В режиме без головы мы можем получить Mesa OffScreen, которая является технологией, используемой для рендеринга без использования какой-либо оконной системы и Brian Paul, которая является программой, которая запустила графическую библиотеку Mesa с открытым исходным кодом.

    • Проверить наличие WebGL можно через:

      var canvas = document.createElement('canvas');
      var gl = canvas.getContext('webgl');
      
      var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
      var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
      var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
      
      if(vendor == "Brian Paul" && renderer == "Mesa OffScreen") {
          console.log("Chrome headless detected");
      }
      
    • Не все Chrome без заголовка будут иметь одинаковые значения для вендора и рендерера. Другие сохраняют значения, которые также могут быть найдены в безголовой версии. Тем не мение, Mesa Offscreen а также Brian Paul указывает на наличие безголовой версии.

  • Функции браузера: библиотека Modernizr позволяет проверить, присутствует ли в браузере широкий спектр функций HTML и CSS. Единственное различие, которое мы обнаружили между Chrome и Chrome без головы, заключалось в том, что у последнего не было функции линии роста волос, которая обнаруживает поддержку hidpi/retina hairlines,

    • Проверить наличие функции волосяного покрова можно с помощью:

      if(!Modernizr["hairline"]) {
          console.log("It may be Chrome headless");
      }
      
  • Отсутствующее изображение: последнее в нашем списке также представляется наиболее надежным, исходя из размера изображения, используемого Chrome в случае, если изображение не может быть загружено. В случае ванильного Chrome изображение имеет ширину и высоту, которые зависят от масштаба браузера, но отличаются от нуля. В Chrome без головы изображение имеет ширину и высоту, равные нулю.

    • Проверить наличие отсутствующего изображения можно с помощью:

      var body = document.getElementsByTagName("body")[0];
      var image = document.createElement("img");
      image.src = "http://iloveponeydotcom32188.jg";
      image.setAttribute("id", "fakeimage");
      body.appendChild(image);
      image.onerror = function(){
          if(image.width == 0 && image.height == 0) {
          console.log("Chrome headless detected");
          }
      }
      

Вот некоторые из важнейших факторов, по которым безголовые браузеры более подвержены обнаружению.


Outro

Итак, как работает капча, в зависимости от скорости ваших действий, она вызовет своего рода флаг, который уведомит сервер о том, что вы либо A) пытаетесь взломать веб-страницу, либо B) автоматизируете ее. Это почти всегда приводит к появлению капчи. На сегодняшний день нет способа обработать капчу. Если это среда, разработанная вашей компанией, вы можете попросить разработчиков отключить капчу в промежуточной среде с другим URL-адресом. Это идеальная ситуация, но если это внешний сайт, то вы ничего не можете с этим поделать.

Другие вопросы по тегам