2013-10-27 8 views
8

Próbuję ukryć wykorzystanie CasperJS jednym z moich skryptów. Obecnie staram się zmienić rozdzielczość, agenta użytkownika i język z tym:Ukryj ślad CasperJS za pomocą Google Analytics

casper.userAgent("My UA"); 
casper.viewport(1600, 900); 
casper.page.customHeaders = {'Accept-Language': 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'}; 

The casper.viewport() i casper.page.customHeaders nie wydaje się do pracy z Google Analytics ... podczas próby na niektórych stronach internetowych, to wydaje się być w porządku, ale Google Analytics może zobaczyć Jestem skrobak Web:

My lang is "c" 
Compatibility with JAVA : no 
Screen resolution : 1024x768 
Flash version : not set 

Czy mogę coś zrobić, aby sfałszować tego?

(kawałek) Rozwiązanie

Dzięki Kasper Pedersen, tutaj jest częścią rozwiązania:

Możemy zastąpić jakąś zmienną w czasie części initialize z:

casper.on('page.initialized', function (page) { 
    page.evaluate(function() { 
     (function() { 
      window.screen = { 
       width: 1600, 
       height: 900 
      }; 
      window.navigator.__defineGetter__('javaEnabled', function() { 
       return function() { return true; }; 
      }); 
     }) 
    }); 
}); 

To podróbcza rozdzielczość okna i wtyczkę dla Javy. Do fałszywych wtyczki Flash, możemy zrobić coś takiego:

casper.on('page.initialized', function (page) { 
page.evaluate(function() { 
    (function() { 
     window.screen = { 
      width: 1600, 
      height: 900 
     }; 
     var fake_navigator = {}; 
     for (var i in navigator) { 
      fake_navigator[i] = navigator[i]; 
     } 
     fake_navigator.javaEnabled = function() { return true; }; 
     fake_navigator.language = 'en-US'; 
     fake_navigator.plugins = { 
      length: 1, 
      'Shockwave Flash': { 
       description: 'Shockwave Flash 11.9 r900', 
       name: 'Shockwave Flash', 
       version: '11.9.900.117' 
      } 
     }; 
     window.navigator = fake_navigator; 
    })(); 
}); 
}); 

Podczas tego i weryfikacji informacji w window.navigator z PhantomJS, wszystko wydaje się w porządku, ale Google Analytics nie zapisuje mi jako gość więcej (nie pojawia się w oknie czasu rzeczywistego Google Analytics ...).

Więc po prostu podrabiam dwie pierwsze informacje, a dla języka, podrabiam go zmieniając język mojego serwera (export LC_ALL=en_US.utf8).

+0

Nigdy nie natknąłem się na ten problem, skąd wiesz, że postrzegają cię jako skrobaczkę? –

+0

Zgarnę stronę internetową, którą tylko ja znam i widzę wynik w Google Analytics. – Kevin

+0

Dlaczego nie wysłałeś tego rozwiązania jako odpowiedzi? –

Odpowiedz

3

Dzięki Kasper Pedersen, tutaj jest częścią rozwiązania:

Możemy zastąpić jakąś zmienną w czasie części initialize z:

casper.on('page.initialized', function (page) { 
    page.evaluate(function() { 
     (function() { 
      window.screen = { 
       width: 1600, 
       height: 900 
      }; 
      window.navigator.__defineGetter__('javaEnabled', function() { 
       return function() { return true; }; 
      }); 
     }) 
    }); 
}); 

to podróbki rozdzielczość Windows i plugin Java. Do fałszywych wtyczki Flash, możemy zrobić coś takiego:

casper.on('page.initialized', function (page) { 
page.evaluate(function() { 
    (function() { 
     window.screen = { 
      width: 1600, 
      height: 900 
     }; 
     var fake_navigator = {}; 
     for (var i in navigator) { 
      fake_navigator[i] = navigator[i]; 
     } 
     fake_navigator.javaEnabled = function() { return true; }; 
     fake_navigator.language = 'en-US'; 
     fake_navigator.plugins = { 
      length: 1, 
      'Shockwave Flash': { 
       description: 'Shockwave Flash 11.9 r900', 
       name: 'Shockwave Flash', 
       version: '11.9.900.117' 
      } 
     }; 
     window.navigator = fake_navigator; 
    })(); 
}); 
}); 

Podczas tego i weryfikacji informacji w window.navigator z PhantomJS, wszystko wydaje się w porządku, ale Google Analytics nie zapisuje mi jako gość więcej (nie pojawia się w oknie czasu rzeczywistego Google Analytics ...).

Więc po prostu podrabiam dwie pierwsze informacje, a dla języka, podrabiam go zmieniając język mojego serwera (export LC_ALL=en_US.utf8).

7

Ustawienia języka są nieco dziwne, ale rozdzielczość ekranu jest prawdopodobnie "zła", ponieważ ustawiasz obszar ekranu, a nie ekrany. AFAIK Google Analytics używa obiektu-window.screen.

ja nie pracowałem z CasperJS, ale w zarysie można to zrobić:

page.onInitialized = function() { 
    page.evaluate(function() { 
    window.screen = { 
      width: 1600, 
      height: 900 
     } 
    }); 
}; 

myślę Java jest sprawdzana przy użyciu navigator.javaEnabled() i Flash jest spojrzał w navigator.plugins, więc coś podobnego można zrobić dla Flash i Java.

+0

Doskonały, dokładnie odpowiedź, której się spodziewałem. Zmodyfikowałem skrypt, ale nie sprawdziłem go jeszcze w Google Analytics, jednak wszystko wydaje się w porządku. – Kevin

+0

Po wielu testach działa funkcja zmiany window.screen, ale nie ta, która zmienia navigator.plugins i navigator.language: te funkcje są tylko do odczytu, a '__defineGetter__' nie działa. Co więcej, próbowałem zmienić ustawienia regionalne na moim komputerze (LC_ALL), ale zawsze mam ustawienia regionalne "C". – Kevin

+0

Myślę, że Phantom pozwala na zastąpienie całego obiektu 'window.navigator', jeśli zrobisz to podczas' onInitialized'. Ale musisz zastąpić cały obiekt "navigator", a nie tylko pewne właściwości. Kasa Przykład Phantoma do wykrywania wąchania przeglądarki: https://github.com/ariya/phantomjs/blob/master/examples/detectsniff.js –