Czy strona internetowa może wykryć, kiedy używasz selenium z chromedriver?

Testowałem Selenium z Chromedriverem i zauważyłem, że niektóre strony mogą wykryć, że używasz Selenium, mimo że nie ma automatyzacji. Nawet gdy przeglądam ręcznie tylko za pomocą chrome przez Selenium i Xephyr często dostaję stronę informującą, że wykryto podejrzaną aktywność. Sprawdziłem mojego agenta użytkownika i odcisk palca przeglądarki i wszystkie są dokładnie identyczne z normalną przeglądarką chrome.

Kiedy przeglądam te strony w normalnym chrome wszystko działa dobrze, ale w momencie, gdy używam selenu, jestem wykrywany.

Teoretycznie chromedriver i chrome powinny wyglądać dosłownie tak samo dla każdego serwera www, ale w jakiś sposób mogą go wykryć.

Jeśli chcesz jakiś testcode wypróbuj to:

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=1, size=(1600, 902))
display.start()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument('--profile-directory=Default')
chrome_options.add_argument("--incognito")
chrome_options.add_argument("--disable-plugins-discovery");
chrome_options.add_argument("--start-maximized")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.delete_all_cookies()
driver.set_window_size(800,800)
driver.set_window_position(0,0)
print 'arguments done'
driver.get('http://stubhub.com')

Jeśli przeglądasz StubHub, zostaniesz przekierowany i "zablokowany" w ramach jednego lub dwóch żądań. Badałem to i nie wiem, jak mogą stwierdzić, że użytkownik używa selenu.

Jak to robią to?

EDYCJA UPDATE:

Zainstalowałem wtyczkę Selenium IDE w Firefoksie i dostałem bana, gdy poszedłem do stubhub.com w normalnej przeglądarce firefox tylko z dodatkową wtyczką.

EDIT:

Kiedy używam Fiddler, aby wyświetlić żądania HTTP wysyłane tam iz powrotem zauważyłem, że 'fałszywe żądania przeglądarki'często mają' no-cache 'w nagłówku odpowiedzi.

EDIT:

Wyniki takie jak to czy jest sposób, aby wykryć, że jestem w Selenium Webdriver strona z Javascript sugeruje, że nie powinno być sposobu na wykrycie, kiedy używasz webdrivera. Ale te dowody sugerują co innego.

EDIT:

Strona przesyła odcisk palca na swoje serwery, ale sprawdziłem i odcisk palca selenium jest identyczny z odciskiem palca podczas korzystania z chrome.

EDIT:

To jeden z odcisków palców, które wysyłają na swoje serwery.]}
{"appName":"Netscape","platform":"Linuxx86_64","cookies":1,"syslang":"en-US","userlang":"en-US","cpu":"","productSub":"20030107","setTimeout":1,"setInterval":1,"plugins":{"0":"ChromePDFViewer","1":"ShockwaveFlash","2":"WidevineContentDecryptionModule","3":"NativeClient","4":"ChromePDFViewer"},"mimeTypes":{"0":"application/pdf","1":"ShockwaveFlashapplication/x-shockwave-flash","2":"FutureSplashPlayerapplication/futuresplash","3":"WidevineContentDecryptionModuleapplication/x-ppapi-widevine-cdm","4":"NativeClientExecutableapplication/x-nacl","5":"PortableNativeClientExecutableapplication/x-pnacl","6":"PortableDocumentFormatapplication/x-google-chrome-pdf"},"screen":{"width":1600,"height":900,"colorDepth":24},"fonts":{"0":"monospace","1":"DejaVuSerif","2":"Georgia","3":"DejaVuSans","4":"TrebuchetMS","5":"Verdana","6":"AndaleMono","7":"DejaVuSansMono","8":"LiberationMono","9":"NimbusMonoL","10":"CourierNew","11":"Courier"}}

Jego identyczność w Selenie i w chrome

EDIT:

VPN-y działają jednorazowo, ale są wykrywane po załadowaniu pierwszej strony. Najwyraźniej uruchamiany jest javascript w celu wykrycia Selenium.

Author: Community, 2015-10-20

12 answers

Dla Użytkowników Komputerów Mac

Zamiana zmiennej cdc_ za pomocą Vima lub Perla

Możesz użyć vim, lub jak zauważył @Vic Seedoubleyew w odpowiedzi @Erti-Chris eelmaa, perl, Aby zastąpić zmienną cdc_ (Zobacz post @ Erti-Chris Eelmaa, aby dowiedzieć się więcej o tej zmiennej ). Użycie vim lub perl zapobiega konieczności rekompilacji kodu źródłowego lub używania edytora szesnastkowego. Przed przystąpieniem do próby upewnij się, że wykonałeś kopię oryginału chromedriver do edycji.


Korzystanie Z Vim

vim /path/to/chromedriver

Po uruchomieniu linii powyżej, prawdopodobnie zobaczysz kilka bełkotów. Wykonaj następujące czynności:

  1. wyszukaj cdc_ wpisując /cdc_ i naciskając return.
  2. Włącz edycję przez naciśnięcie a.
  3. Usuń dowolną ilość $cdc_lasutopfhvcZLmcfl i zamień to, co zostało usunięte, na równą ilość znaków. Jeśli tego nie zrobisz, chromedriver zawiedzie.
  4. po zakończeniu edycji, naciśnij esc.
  5. aby uratować zmiany i zakończenie, wpisz :wq! i naciśnij return.
  6. jeśli nie chcesz zapisywać zmian, ale chcesz je zamknąć, wpisz :q! i naciśnij return.
  7. Jesteś skończony.

Przejdź do zmienionego chromedriver i kliknij go dwukrotnie. OKNO terminal powinno się otworzyć. Jeśli nie widzisz killed na wyjściu, pomyślnie zmieniono sterownik.


Korzystanie Z Perla

Poniższy wiersz zastępuje cdc_ dog_:

perl -pi -e 's/cdc_/dog_/g' /path/to/chromedriver

Upewnij się, że ciąg zastępczy ma taką samą liczbę znaków jak ciąg wyszukiwania, w przeciwnym razie chromedriver nie powiedzie się.

Wyjaśnienie Perla

s///g oznacza, że chcesz wyszukać ciąg znaków i zastąpić go globalnie innym ciągiem znaków (zastępuje wszystkie wystąpienia).

E. g., s/string/replacment/g

Więc,

s/// oznacza szukanie i zastępowanie ciągu znaków.

cdc_ jest ciągiem wyszukiwania.

dog_ jest ciągiem zastępczym.

g jest kluczem globalnym, który zastępuje każde wystąpienie ciągu znaków.

Jak sprawdzić czy wymiana Perla zadziałała

Następująca linia wyświetli każde wystąpienie szukanego ciągu cdc_:

perl -ne 'while(/cdc_/g){print "$&\n";}' /path/to/chromedriver

Jeśli to nie zwróci nic, to cdc_ zostało zastąpione.

Odwrotnie, możesz użyć tego:

perl -ne 'while(/dog_/g){print "$&\n";}' /path/to/chromedriver

Aby sprawdzić, czy twój łańcuch zastępczy, dog_, znajduje się teraz w pliku binarnym chromedriver. Jeśli tak jest, łańcuch zastępczy zostanie wydrukowany na konsoli.

Przejdź do zmienionego chromedriver i kliknij go dwukrotnie. OKNO terminal powinno się otworzyć. Jeśli nie widzisz killed na wyjściu, pomyślnie zmieniono sterownik.


Zawijanie

Po zmianie pliku binarnego chromedriver upewnij się, że nazwa zmienionego pliku binarnego chromedriver to chromedriver, a oryginalny plik binarny zostanie przeniesiony z pierwotnej lokalizacji lub zmieniono jej nazwę.


Moje Doświadczenie Z Tą Metodą

Byłem wcześniej wykrywany na stronie podczas próby zalogowania się, ale po zastąpieniu cdc_ ciągiem o równej wielkości udało mi się zalogować. Jak powiedzieli inni, jeśli zostałeś już wykryty, możesz zostać zablokowany z wielu innych powodów, nawet po użyciu tej metody. Być może będziesz musiał spróbować uzyskać dostęp do witryny, która wykrywała cię za pomocą VPN, inna sieć, czy co masz.

 3
Author: colossatr0n,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-01 01:48:36

Zasadniczo wykrywanie selenium polega na tym, że testują one wstępnie zdefiniowane zmienne javascript, które pojawiają się podczas pracy z selenium. Skrypty wykrywania botów zwykle wyglądają na wszystko, co zawiera słowo "selenium" / "webdriver" w dowolnej ze zmiennych (na obiekcie window), a także dokumentują zmienne o nazwach $cdc_ i $wdc_. Oczywiście wszystko to zależy od przeglądarki, na której się znajdujesz. Wszystkie różne przeglądarki ujawniają różne rzeczy.

Dla mnie, użyłem chrome, więc, wszystkie to, co musiałem zrobić , to upewnić się, że $cdc_ nie istnieje już jako zmienna dokumentu, i voila (Pobierz kod źródłowy chromedriver, zmodyfikuj chromedriver i ponownie skompiluj $cdc_ pod inną nazwą.)

To jest funkcja, którą zmodyfikowałem w chromedriverze:

Call_function.js:

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];
}

(zwróć uwagę na komentarz, wszystko co zrobiłem zamieniłem $cdc_ na randomblabla_.

Oto pseudo-kod, który demonstruje niektóre z technik, z których mogą korzystać sieci botów:

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;
};

Według użytkownik @ szx, możliwe jest również po prostu otworzyć chromedriver.exe w hex editor, i po prostu zrobić zastąpienie ręcznie, bez faktycznie robi żadnej kompilacji.

 94
Author: Erti-Chris Eelmaa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-11 17:22:36

Jak już zorientowaliśmy się w pytaniu i opublikowanych odpowiedziach, w grze jest anty web-scraping i usługa wykrywania botów o nazwie "Distil Networks". I, zgodnie z wywiadem prezesa firmy :

Mimo że mogą tworzyć nowe boty, wymyśliliśmy sposób na identyfikację Selen to narzędzie, którego używają, więc blokujemy selen nie ważne, ile razy będą iterować na tym bocie . Robimy to teraz. z Pythonem i wiele różnych technologii. Gdy zobaczymy wzór wyłaniać się z jednego typu bota, następnie pracujemy nad inżynierią wsteczną technologia, której używają i identyfikują ją jako złośliwą.

Potrzeba czasu i dodatkowych wyzwań, aby zrozumieć, jak dokładnie wykrywają selen, ale co możemy powiedzieć na pewno w tej chwili:

  • nie jest to związane z działaniami, które podejmujesz z selenium - po przejściu na stronę, natychmiast zostaniesz wykryty i zbanowany. Próbowałem dodać sztuczne losowe opóźnienia między akcjami, zrób pauzę po załadowaniu strony-nic nie pomogło
  • Nie chodzi też o odcisk palca przeglądarki - próbowałem go w wielu przeglądarkach z czystymi profilami, a nie trybami incognito-nic nie pomogło]} Ponieważ, zgodnie z podpowiedzią w wywiadzie, była to "inżynieria odwrotna", podejrzewam, że odbywa się to z kodem JS wykonywanym w przeglądarce, ujawniając, że jest to przeglądarka zautomatyzowana przez Selenium webdriver [16]}

Aby umieścić go jako odpowiedź, ponieważ wyraźnie:

Czy strona internetowa może wykryć, kiedy używasz selenu z chromedriverem?

Tak.


Poza tym, nie eksperymentowałem ze starszym selenium i starszymi wersjami przeglądarki-teoretycznie może być coś zaimplementowanego/dodanego do selenium w pewnym momencie, na którym opiera się Detektor botów Distil Networks. Wtedy, jeśli tak jest, możemy wykryć (tak, Wykryj detektor) w którym punkcie / wersji a istotna zmiana została dokonana, zajrzyj do changelog i zestawów zmian i może to dać nam więcej informacji na temat tego, gdzie szukać i czego używają do wykrywania przeglądarki opartej na webdriverze. To tylko teoria, którą trzeba przetestować.

 63
Author: alecxe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-29 00:33:53

Przykład jak jest zaimplementowany na wellsfargo.com:

try {
 if (window.document.documentElement.getAttribute("webdriver")) return !+[]
} catch (IDLMrxxel) {}
try {
 if ("_Selenium_IDE_Recorder" in window) return !+""
} catch (KknKsUayS) {}
try {
 if ("__webdriver_script_fn" in document) return !+""
 17
Author: aianitro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-11 10:18:20

partial interface Navigator { readonly attribute boolean webdriver; };

Atrybut IDL webdriver interfejsu nawigatora musi zwracać wartość flagi WebDriver-active, która początkowo jest false.

Ta właściwość pozwala witrynom określić, czy agent użytkownika jest pod kontrolą WebDriver i może być używany do łagodzenia ataków typu denial-of-service.

Wzięte bezpośrednio z 2017 W3C Editor ' s Draft WebDriver. To w dużym stopniu implikuje, że co najmniej przyszłe iteracje sterowniki selenu zostaną zidentyfikowane, aby zapobiec niewłaściwemu użyciu. Ostatecznie trudno powiedzieć bez kodu źródłowego, co dokładnie powoduje, że sterownik chrome in specific jest wykrywalny.

 7
Author: bryce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-27 23:05:14

Spróbuj użyć selenium z określonym profilem użytkownika chrome, w ten sposób możesz użyć go jako konkretnego użytkownika i zdefiniować dowolną rzecz, gdy to zrobisz, będzie działać jako "prawdziwy" użytkownik, spójrz na proces chrome z jakimś Eksploratorem procesów i zobaczysz różnicę z tagami.

Na przykład:

username = os.getenv("USERNAME")
userProfile = "C:\\Users\\" + username + "\\AppData\\Local\\Google\\Chrome\\User Data\\Default"
options = webdriver.ChromeOptions()
options.add_argument("user-data-dir={}".format(userProfile))
# add here any tag you want.
options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors", "safebrowsing-disable-download-protection", "safebrowsing-disable-auto-update", "disable-client-side-phishing-detection"])
chromedriver = "C:\Python27\chromedriver\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
browser = webdriver.Chrome(executable_path=chromedriver, chrome_options=options)

Chrome tag list here

 6
Author: Kobi K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-28 16:39:35

Nawet jeśli wysyłasz wszystkie właściwe dane (np. Selenium nie pojawia się jako rozszerzenie, masz rozsądną rozdzielczość/głębię bitową, &c), istnieje wiele usług i narzędzi, które profilują zachowanie odwiedzających w celu określenia, czy aktor jest użytkownikiem, czy zautomatyzowanym systemem.

Na przykład odwiedzenie witryny, a następnie natychmiastowe wykonanie jakiejś czynności, przesuwając mysz bezpośrednio do odpowiedniego przycisku, w mniej niż sekundę, jest czymś, czego żaden użytkownik nie zrobiłby zrób.

Może być również przydatne jako narzędzie do debugowania, aby korzystać z witryny, takiej jak https://panopticlick.eff.org / aby sprawdzić, jak unikalna jest twoja przeglądarka; pomoże Ci również sprawdzić, czy istnieją jakieś konkretne parametry, które wskazują, że używasz Selenium.

 5
Author: lfaraone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-25 22:01:14

Wygląda na to, że są za zaporą aplikacji internetowych. Spójrz na modsecurity i owasp, aby zobaczyć, jak to działa. W rzeczywistości pytasz, Jak zrobić unikanie wykrywania botów. Nie do tego służy selenium web driver. Służy do testowania aplikacji internetowej, która nie uderza w inne aplikacje internetowe. Jest to możliwe, ale w zasadzie musiałbyś spojrzeć na to, czego WAF szuka w swoim zestawie reguł i specjalnie go unikać za pomocą selenu, jeśli możesz. Nawet wtedy, to nadal może nie działać bo nie wiesz, czego używają. Zrobiłeś właściwy pierwszy krok, czyli udawanie agenta użytkownika. Jeśli to nie zadziałało, to WAF jest na miejscu i prawdopodobnie musisz się bardziej skomplikować.

Edytuj: Punkt zaczerpnięty z innej odpowiedzi. Najpierw upewnij się, że twój agent użytkownika jest prawidłowo ustawiony. Może trafi na lokalny serwer WWW lub wyczuje ruch wychodzący.

 4
Author: Bassel Samman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-23 23:53:12

Mówi się, że Firefox ustawia window.navigator.webdriver === true, jeśli pracuje z webdriverem. Według jednej ze starszych specyfikacji (np.: archive.org ), ale nie mogłem go znaleźć w nowym , z wyjątkiem kilku bardzo niejasnych sformułowań w załącznikach.

Test jest w kodzie selenium w pliku fingerprint_test.js gdzie komentarz na końcu mówi "obecnie zaimplementowany tylko w Firefoksie", ale nie byłem w stanie zidentyfikować żadnego kodu w tym kierunku za pomocą jakiegoś prostego greping, ani w bieżącym (41.0.2) drzewie wydania Firefoksa, ani w drzewie Chromium.

Znalazłem również komentarz do starszej zmiany dotyczącej fingerprintingu w sterowniku Firefoksa b82512999938 ze stycznia 2015. Ten kod jest nadal w Selenium Git-master pobranym wczoraj w javascript/firefox-driver/extension/content/server.js z komentarzem linkującym do nieco inaczej sformułowanego dodatku w obecnej specyfikacji W3C webdriver.

 3
Author: deamentiaemundi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-27 23:44:32

Wykrywanie bota, które widziałem, wydaje się bardziej wyrafinowane lub przynajmniej inne niż to, co przeczytałem w odpowiedziach poniżej.

Eksperyment 1:

  1. otwieram przeglądarkę i stronę internetową z Selenium z konsoli Pythona.
  2. mysz jest już w określonym miejscu, gdzie Wiem, że link pojawi się po załadowaniu strony. Nigdy nie ruszam myszką.
  3. wciskam raz lewy przycisk myszy (jest to konieczne, aby wziąć fokus z konsoli, gdzie Python jest uruchomiony do przeglądarki).
  4. wciskam ponownie lewy przycisk myszy (pamiętaj, kursor jest nad danym linkiem).
  5. link otwiera się normalnie, tak jak powinien.

Eksperyment 2:

  1. Jak poprzednio otwieram przeglądarkę i stronę www z Selenium z konsoli Pythona.

  2. Tym razem zamiast klikać myszką, używam Selenium (w konsoli Pythona), aby kliknąć ten sam element z losowym przesunięciem.

  3. Link nie otwiera się, ale jestem zabrany do strony rejestracji.

Implikacje:

  • otwieranie przeglądarki internetowej przez Selenium nie wyklucza pojawiania się człowieka
  • poruszanie myszką jak człowiekiem nie jest konieczne, aby być sklasyfikowanym jako człowiek
  • kliknięcie czegoś przez selen z przesunięciem nadal wywołuje alarm

Wydaje się tajemniczy, ale myślę, że mogą po prostu określić, czy działanie pochodzi z selenu lub Nie, podczas gdy nie obchodzi ich, czy sama przeglądarka została otwarta przez Selenium, czy nie. Czy mogą określić, czy okno ma fokus? Byłoby ciekawie usłyszeć, jeśli ktoś ma jakieś spostrzeżenia.

 3
Author: M3RS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-20 11:24:30

Napisz stronę html z następującym kodem. Zobaczysz, że w DOM Selenium stosuje atrybut webdriver w outerHTML

<html>
<head>
  <script type="text/javascript">
  <!--
    function showWindow(){
      javascript:(alert(document.documentElement.outerHTML));
    }
  //-->
  </script>
</head>
<body>
  <form>
    <input type="button" value="Show outerHTML" onclick="showWindow()">
  </form>
</body>
</html>
 1
Author: PC3TJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-28 04:10:54

Niektóre strony to wykrywają:

function d() {
try {
    if (window.document.$cdc_asdjflasutopfhvcZLmcfl_.cache_)
        return !0
} catch (e) {}

try {
    //if (window.document.documentElement.getAttribute(decodeURIComponent("%77%65%62%64%72%69%76%65%72")))
    if (window.document.documentElement.getAttribute("webdriver"))
        return !0
} catch (e) {}

try {
    //if (decodeURIComponent("%5F%53%65%6C%65%6E%69%75%6D%5F%49%44%45%5F%52%65%63%6F%72%64%65%72") in window)
    if ("_Selenium_IDE_Recorder" in window)
        return !0
} catch (e) {}

try {
    //if (decodeURIComponent("%5F%5F%77%65%62%64%72%69%76%65%72%5F%73%63%72%69%70%74%5F%66%6E") in document)
    if ("__webdriver_script_fn" in document)
        return !0
} catch (e) {}
 1
Author: Néstor Lim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-22 09:52:33