Casperjs无法设置窗口.Navigator对象[英] CasperJS cannot set window.navigator object

问题描述

尝试用Casperjs刮擦网页.网页检查以查看浏览器是否为IE 6/7.

通过用Casperjs的用户代理似乎无法满足其状况. useragent通过:mozilla/4.0(兼容; msie 6.0; Windows NT 5.1) 以下是页面进行的检查以确定浏览器

agt = navigator.userAgent.toLowerCase();
browserType = navigator.appName;

if( ((browserType.indexOf("xplorer") != -1) 
    && (agt.indexOf("msie 6.") != -1))
    ||  ((browserType.indexOf("xplorer") != -1) 
    && (agt.indexOf("msie 7.") != -1)) )
{

}
else
{
    alert("This "+ browserType + " Version is not supported by this application. Please use Internet Explorer  6.x or Internet Explorer 7.x.");
    window.close();
}

以下是Casperjs的调试信息.

[info] [远程] [alert]此应用程序不支持此Netscape版本 上.请使用Internet Explorer 6.x或Internet Explorer 7.x.

[警告] [phantom]加载资源失败=失败(http 200):http://

在"设置指针retirect?

推荐答案

navigator属性仅读取,因此您无法设置它们,而Phantomjs则不能提供设置它的能力.

解决方案是建立navigator对象的代理.旧的navigator保留在后台,但被一个新的行为相同的新appName替换为" Internet Explorer".可以从 page.initialized page.initialized 回调.

casper.on('page.initialized', function(){
    this.evaluate(function(){
        (function(oldNav){
            var newNav = {};
            [].forEach.call(Object.getOwnPropertyNames(navigator), function(prop){
                if (prop === 'appName') {
                    Object.defineProperty(newNav, prop, {
                        enumerable: false,
                        configurable: false,
                        writable: false,
                        value: 'Internet Explorer'
                    });
                } else {
                    Object.defineProperty(newNav, prop, {
                        enumerable: false,
                        configurable: false,
                        get: function(){
                            return oldNav[prop];
                        }
                    });
                }
            });
            window.navigator = newNav;
        })(window.navigator);
    });
});

使用page.onInitialized事件处理程序的香草phantomjs也是如此.

在浏览器检测周围工作不能保证该页面在Phantomjs上工作或看起来不错.有一个原因是某些页面是"优化"的,原因是大多数时候,在其他浏览器中使用的某些Propielation功能.

本文地址:https://www.itbaoku.cn/post/1740120.html