8

我试图用我的一个脚本来隐藏 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 似乎不适用于谷歌分析......在某些网站上尝试时,似乎没问题,但谷歌分析发现我是一个网络爬虫:

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

这会伪造 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;
    })();
});
});

执行此操作并验证 PhantomJS 的 window.navigator 中的信息时,一切似乎都很好,但 Google Analytics 不再将我作为访问者跟踪(我没有出现在 Google Analytics 的实时窗口中......) .

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

4

2 回答 2

7

语言设置有点奇怪,但屏幕分辨率可能是“错误的”,因为您设置的是视口,而不是屏幕分辨率。AFAIK Google Analytics 使用window.screen-object。

我没有使用过 CasperJS,但是在 Phantom 中你可以这样做:

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

我认为使用检查 Javanavigator.javaEnabled()并在 中查找 Flash navigator.plugins,因此可以对 Flash 和 Java 执行类似的操作。

于 2013-11-05T18:42:53.687 回答
3

感谢 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; };
            });
        })
    });
});

这会伪造 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;
    })();
});
});

执行此操作并验证 PhantomJS 的 window.navigator 中的信息时,一切似乎都很好,但 Google Analytics 不再将我作为访问者跟踪(我没有出现在 Google Analytics 的实时窗口中......) .

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

于 2014-11-13T12:53:42.750 回答