Google analytics 使用Google Analytics隐藏CasperJS的足迹

Google analytics 使用Google Analytics隐藏CasperJS的足迹,google-analytics,phantomjs,casperjs,Google Analytics,Phantomjs,Casperjs,我试图用我的一个脚本来隐藏CasperJS的使用。目前,我正在尝试更改分辨率、用户代理和语言: 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'}; casper.viewport()和casper.page.customHeaders似乎不适用于Google An

我试图用我的一个脚本来隐藏CasperJS的使用。目前,我正在尝试更改分辨率、用户代理和语言:

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'};
casper.viewport()和casper.page.customHeaders似乎不适用于Google Analytics。。。在一些网站上尝试时,似乎还可以,但Google Analytics发现我是一个网络掠夺者:

My lang is "c"
Compatibility with JAVA : no
Screen resolution : 1024x768
Flash version : not set
我能做些什么来伪造这个吗

(一种)解决方案


感谢kasper pedersen,以下是解决方案的一部分:

在初始化部件期间,我们可以使用以下命令覆盖某些变量:

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; };
            });
        })
    });
});
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; };
            });
        })
    });
});
这伪造了windows分辨率和Java插件。为了伪造flash插件,我们可以这样做:

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;
    })();
});
});
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;
    })();
});
});
在执行此操作并验证PhantomJS的window.navigator中的信息时,一切似乎都正常,但Google Analytics不再跟踪我作为访问者(我不会出现在Google Analytics的实时窗口中…)


所以我只是伪造前两个信息,对于语言,我在更改服务器的语言时伪造了它(
export LC_ALL=en_US.utf8
)。

语言设置有点奇怪,但屏幕分辨率可能“错误”,因为您正在设置视口,不是screen res.AFAIK Google Analytics使用
窗口.screen
-对象

我没有与CasperJS合作过,但在幻影中,您可以这样做:

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

我认为Java是使用
navigator.javaEnabled()
检查的,Flash是在
navigator.plugins
中查找的,因此可以对Flash和Java做类似的事情

感谢kasper pedersen,以下是解决方案的一部分:

在初始化部件期间,我们可以使用以下命令覆盖某些变量:

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; };
            });
        })
    });
});
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; };
            });
        })
    });
});
这伪造了windows分辨率和Java插件。为了伪造flash插件,我们可以这样做:

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;
    })();
});
});
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;
    })();
});
});
在执行此操作并验证PhantomJS的window.navigator中的信息时,一切似乎都正常,但Google Analytics不再跟踪我作为访问者(我不会出现在Google Analytics的实时窗口中…)


所以我只是伪造前两个信息,对于语言,我在更改服务器的语言时伪造了它(
export LC\u ALL=en\u US.utf8
).

我从来没有遇到过这个问题。你怎么知道他们把你看作是一个刮刀?我刮掉了一个只有我知道的网页,并在谷歌分析中看到了结果。你为什么不把这篇解决方案作为答案发布出来?太好了,正是我给出的答案。我已经修改了我的脚本,但还没有在Google Analytics中检查它,不过一切似乎都正常。经过大量测试,您更改window.screen的功能正常,但更改navigator.plugins和navigator.language的功能不正常。语言:这些功能是只读的,
\uu defineGetter\uu
不起作用。此外,我尝试在我的机器上更改区域设置(LC_ALL),但我始终使用“C”区域设置。我认为Phantom允许您覆盖整个
窗口。navigator
对象,如果您在
初始化期间这样做的话。但是您必须替换整个
navigator
对象,而不仅仅是某些属性。检测浏览器嗅探的Checkout Phantom示例: