Publish your project for free and start receiving offers from freelance contractors in serveral minutes after publication!
1000 ₴

Помочь забилдить хром webdriver на Ubuntu

project expired

Нужно помочь забилдить хром вебдрайвер из источника в исполняемый файл на убунту. Источник от сюда забидлить свой по тому что на крайняк можно забилдить у себя на машине и скинуть мне. Сейчас застрял на ошибке 

gn: command not found

и не могу его как-то адекватно установить, а гугловские мануалы для меня слишком сложные почему-то

также нужно изменить некоторые джаваскрипт файлы, а также вставить один скрипт

  • Basically the way the selenium detection works, is that they test for pre-defined javascript variables which appear when running with selenium. The bot detection scripts usually look anything containing word "selenium" / "webdriver" in any of the variables (on window object), and also document variables called $cdc_and $wdc_. Of course, all of this depends on which browser you are on. All the different browsers expose different things.

    For me, I used chrome, so, all that I had to do was to ensure that $cdc_ didn't exist anymore as document variable, and voila (download chromedriver source code, modify chromedriver and re-compile $cdc_ under different name.)

    this is the function I modified in chromedriver:


    function getPageCache(opt_doc) {  var doc = opt_doc || document;  //var key = '$cdc_asdjflasutopfhvcZLmcfl_';  var key = 'randomblabla_';  if (!(key in doc))    doc[key] = new Cache();  return doc[key]; }

    (note the comment, all I did I turned $cdc_ to randomblabla_.

    Here is a pseudo-code which demonstrates some of the techniques that bot networks might use:

    runBotDetection = function () {    var documentDetectionKeys = [        "__webdriver_evaluate",        "__selenium_evaluate",        "__webdriver_script_function",        "__webdriver_script_func",        "__webdriver_script_fn",        "__fxdriver_evaluate",        "__driver_unwrapped",        "__webdriver_unwrapped",        "__driver_evaluate",        "__selenium_unwrapped",        "__fxdriver_unwrapped",    ];     var windowDetectionKeys = [        "_phantom",        "__nightmare",        "_selenium",        "callPhantom",        "callSelenium",        "_Selenium_IDE_Recorder",    ];     for (const windowDetectionKey in windowDetectionKeys) {        const windowDetectionKeyValue = windowDetectionKeys[windowDetectionKey];        if (window[windowDetectionKeyValue]) {            return true;        }    };    for (const documentDetectionKey in documentDetectionKeys) {        const documentDetectionKeyValue = documentDetectionKeys[documentDetectionKey];        if (window['document'][documentDetectionKeyValue]) {            return true;        }    };     for (const documentKey in window['document']) {        if (documentKey.match(/\$[a-z]dc_/) && window['document'][documentKey]['cache_']) {            return true;        }    }     if (window['external'] && window['external'].toString() && (window['external'].toString()['indexOf']('Sequentum') != -1)) return true;     if (window['document']['documentElement']['getAttribute']('selenium')) return true;    if (window['document']['documentElement']['getAttribute']('webdriver')) return true;    if (window['document']['documentElement']['getAttribute']('driver')) return true;     return false; };

    according to user szx szx, it is also possible to simply open chromedriver.exe in hex editor, and just do the replacement manually, without actually doing any compiling.

    еще кстати нашел один сильный футпринт, и реализацию его устранения, понимаю как работает, но к сожалению не понимаю куда пихать. Если открыть консоль то в navigator будет поле webdriver:true не понимаю на каком этапе браузер это вставляет, но хочу от этого избавится тоже есть какой-то тул видимо использующий селениум и вот его issues связанные с этой проблемой вот сам коммит с устранением этой проблемы 
    коммент к коммиту говорит что
    The document attribute is removed with a DOMAttrModified eventListener
    that removes itself after the first call. The navigator attribute is
    prevented from being set by altering Object.defineProperty until
    Selenium attempts to set the attribute (at which point the alteration is
    а вот и сам код
    function getPageScript() {

      // return a string

      return "(" + function() {

        if ("webdriver" in navigator) {

          console.log("Webdriver attributes present, remove immediately");

          // Attributes can be removed immediately


          delete window.navigator["webdriver"];

        } else {

          // Listener for `document` attribute

          document.addEventListener("DOMAttrModified", function monitor(ev) {

            console.log("Removing webdriver attribute from document");


            document.removeEventListener("DOMAttrModified", monitor, false);

          }, false);

          // Prevent webdriver attribute from getting set on navigator

          var originalDefineProperty = Object.defineProperty;

          Object.defineProperty(Object, 'defineProperty', {

            value: function(obj, prop, descriptor) {

              if (obj == window.navigator && prop == 'webdriver') {

                console.log("Preventing definition of webdriver property on navigator.");

                // Return Object.defineProperty to original state

                Object.defineProperty(Object, 'defineProperty', {

                  value: originalDefineProperty


                delete originalDefineProperty;

  1. proposal withdrawn
  2. proposal withdrawn

stas k
Ukraine Ukraine  16   1
Project published
8 September 2018