Selenium и браузер без головы постоянно запрашивают Captcha

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

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


person CCC    schedule 14.05.2019    source источник


Ответы (2)


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


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

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


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

Согласно @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 headless можно с помощью:

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

    • Проверить наличие подключаемых модулей можно с помощью:

      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 headless будут иметь одинаковые значения для поставщика и средства визуализации. Другие сохраняют значения, которые также можно найти в версии без головы. Однако 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

person DebanjanB    schedule 14.05.2019

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

person Garreth Dean    schedule 14.05.2019