尝试使用CasperJS抓取网页。网页检查浏览器是否为IE 6/7。
使用casperjs传递userAgent似乎并不满足其条件。 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] [remote] [alert]此应用程序不支持此Netscape版本 上。请使用Internet Explorer 6.x或Internet Explorer 7.x。
[警告] [幻影]加载资源失败,状态=失败(HTTP 200):http://
在页面重定向之前设置window.navigator
对象的任何指针?
答案 0 :(得分:3)
navigator
属性是只读的,因此您无法设置它们,PhantomJS不提供设置它的功能。
解决方案是创建navigator
对象的代理。旧的navigator
会保留在后台,但会被替换为行为相同的新appName
,但会使用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);
});
});
的“Internet Explorer”。可以从page.initialized
回调触发整个引导过程。
page.onInitialized
对于带有{{1}}事件处理程序的vanilla PhantomJS,同样如此。
使用浏览器检测并不能保证页面在PhantomJS上运行或看起来不错。有一个原因是某些页面被IE“优化”了,原因在于大多数时候某些使用的专有功能在其他浏览器中没有。