Существует ли версия селена, которая не обнаруживается?может ли селен быть действительно необнаружимым? - PullRequest
1 голос
/ 10 июня 2019

Я запускаю Chrome Driver поверх Selen на сервере Ubuntu. за жилой прокси-сетью. все же мой селен обнаруживается. Есть ли способ сделать Chrome Driver и селен на 100% необнаружимыми?

Я так долго пытался, что потерял след из многих вещей, которые я сделал, включая 1) пробую разные версии хрома 2) добавление нескольких флагов и удаление некоторых слов из файла драйвера chrome. 3) испортить его за прокси. жилые тоже. используя режим инкогнито. 4) загрузка профилей. 5) случайные движения мыши. 6) рандомизировано все

Я ищу настоящую версию селена, которая на 100% не обнаруживается. если это когда-либо существовало. Или другой способ автоматизации, который не обнаруживается бот-трекерами.

это часть запуска браузера

sx = random.randint(1000,1500)
sn = random.randint(3000,4500)

display = Display(visible=0, size=(sx,sn))
display.start()


    randagent =  random.randint(0,len(useragents_desktop)-1)

    uag = useragents_desktop[randagent]
    #this is to prevent ip leaking
    preferences = 
"webrtc.ip_handling_policy" : "disable_non_proxied_udp",
"webrtc.multiple_routes_enabled": False,
"webrtc.nonproxied_udp_enabled" : False

    chrome_options.add_experimental_option("prefs", preferences)
    chrome_options.add_argument("--disable-dev-shm-usage")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--disable-impl-side-painting")
    chrome_options.add_argument("--disable-setuid-sandbox")
    chrome_options.add_argument("--disable-seccomp-filter-sandbox")
    chrome_options.add_argument("--disable-breakpad")
    chrome_options.add_argument("--disable-client-side-phishing-detection")
    chrome_options.add_argument("--disable-cast")
    chrome_options.add_argument("--disable-cast-streaming-hw-encoding")
    chrome_options.add_argument("--disable-cloud-import")
    chrome_options.add_argument("--disable-popup-blocking")
    chrome_options.add_argument("--ignore-certificate-errors")
    chrome_options.add_argument("--disable-session-crashed-bubble")
    chrome_options.add_argument("--disable-ipv6")
    chrome_options.add_argument("--allow-http-screen-capture")
    chrome_options.add_argument("--start-maximized")
    wsize = "--window-size=" +  str(sx-10) + ',' + str(sn-10)
    chrome_options.add_argument(str(wsize) )

    prefs = {"profile.managed_default_content_settings.images": 2}
    chrome_options.add_experimental_option("prefs", prefs)

    chrome_options.add_argument("blink-settings=imagesEnabled=true")
    chrome_options.add_argument("start-maximized")
    chrome_options.add_argument("user-agent="+uag)
    chrome_options.add_extension(pluginfile)#this is for the residential proxy
    driver = webdriver.Chrome(executable_path="/usr/bin/chromedriver", chrome_options=chrome_options)

1 Ответ

2 голосов
/ 10 июня 2019

Факт обнаружения селена не зависит от конкретной версии Selenium , Chrome или ChromeDriver . Веб-сайты сами могут определять сетевой трафик и могут идентифицировать Клиент браузера , т.е. Веб-браузер как Контроллер WebDriver .

Однако некоторые общие подходы, позволяющие избежать обнаружения при просмотре веб-страниц, следующие:

@ Антуан Вастел в своем блоге Обнаружение Chrome Headless упомянул несколько подходов, которые отличают браузер Chrome от безголового Chrome браузер.

  • Пользовательский агент : Атрибут пользовательского агента обычно используется для определения как ОС, так и браузера пользователя. В 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. Напротив, в режиме без заголовка возвращаемый массив содержит плагин 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 без заголовка будут иметь одинаковые значения для поставщика и средства визуализации. Другие сохраняют значения, которые также могут быть найдены в безголовой версии. Однако 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");
          }
      }   
      

Ссылки

Подобные обсуждения можно найти в:

...