CasperJS 无法设置 window.navigator 对象

2024-02-23

尝试使用 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 的调试信息。

[信息] [远程] [警报] 此应用程序不支持此 Netscape 版本 在。请使用Internet Explorer 6.x或Internet Explorer 7.x。

[警告] [幻影] 加载资源失败,状态=失败(HTTP 200):http://

有关设置的任何指示window.navigator页面重定向之前的对象?


The navigator属性是只读的,因此您无法设置它们,并且 PhantomJS 不提供设置它的功能。

解决办法是做一个代理navigator目的。老人navigator留在后台,但它被替换为一个行为相同的新的,但带有一个appName“Internet Explorer”的。整个引导过程可以从page.initialized http://docs.casperjs.org/en/latest/events-filters.html#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);
    });
});

对于普通的 PhantomJS 来说也是如此page.onInitialized事件处理程序。

解决浏览器检测并不能保证页面在 PhantomJS 上正常工作或看起来良好。有些页面针对 IE 进行“优化”是有原因的,原因是大多数时候使用了其他浏览器中没有的一些专有功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CasperJS 无法设置 window.navigator 对象 的相关文章

  • 如何使用 javascript 从 Audio Element 录制音频

    我正在使用 HTML5 和 Javascript 制作录音机 并且不想包含任何第三方 API 我的第一步是使用以下命令创建音频检索器和播放器
  • JavaScript 日期 + 7 天

    这个脚本有什么问题 当我将时钟设置为 29 04 2011 时 它会添加2011年4月36日在星期输入 但正确的日期应该是6 5 2011 var d new Date var curr date d getDate var tomo da
  • JavaScript 中的“this”如何工作?

    我知道还有其他几篇关于这个主题的帖子 但它们仍然让我感到困惑 我已经包含了 jQuery 和所有内容 我有一个简单的 javascript 类 如下例所示 function CarConstructor this speed 19 in m
  • Node + Express + Nginx 未设置 Cookie

    我有一个使用 Express 的 Node 应用程序 我尝试为我的客户端设置 cookie 它在本地环境 http 上运行良好 但是一旦我投入生产 https 我就很好地收到了cookie 我可以在响应中看到它 但它没有设置 任何想法 Ng
  • 如何在 Angular 2 中禁用浏览器后退按钮

    我正在使用 Angular 2 开发一个网站 有没有办法使用 Angular 2 禁用或触发浏览器后退按钮 Thanks 不确定这是否已经排序 但仍然发布答案 以供将来参考 为了解决这个问题 您基本上需要在应用程序组件中添加一个侦听器并设置
  • 我可以将 RegExp 和 Function 存储在 JSON 中吗?

    给定一个像这样的块 var foo regexp http fun function 将其存储在 JSON 中的正确方法是什么 您必须将 RegExp 作为字符串存储在 JSON 对象中 然后您可以从字符串构造一个 RegExp 对象 JS
  • 为什么告诉 jQuery 单击我的链接按钮会减慢我的页面速度?

    不知道是不是更新面板的影响 https stackoverflow com questions 31359065 performance deteriorating after async postback scrolling become
  • IIFE 和 call 的区别

    之间有区别吗 function call this and function or var MODULE function this hello world call MODULE and var MODULE function m m h
  • jquery $('id').text 带粗体

    我有一个 jquery 可以更改链接的文本 如下所示 if urlfind gt 0 linkurl text More info 和 HTML a href a 我试图为此链接添加粗体 但添加 b More Info b 让它们在文本本身
  • 如何观察Firebase存储上传事件

    我有一个将照片上传到 Firebase 存储的 iOS 应用程序 以及一个连接到同一个 Firebase 的 Web 应用程序 有没有办法从网络上观察存储的变化 当上传照片时 只有iOS设备本身可以访问UploadTask 并且我没有看到o
  • javascript RegExp 的奇怪行为:相同的正则表达式产生不同的结果[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 Javascript 中带有全局标志的 RegExp 会给出错误的结果 https stackoverflow com questions 1520800 why regexp with gl
  • angular.isdefine 有什么好处?

    有什么好处angular isdefined超过和超过foo undefined 我一时想不出有什么好处 在 Javascript 中以任何方式访问真正未定义的变量 除了 typeof 都会抛出错误 你只能使用Angular isDefin
  • 如何使用 JavaScript 或 jQuery 获取 html 元素的比例值?

    我想知道如何获得元素的比例值 我努力了 element css webkit transform 返回matrix scaleX 0 0 scaleY 0 0 有没有办法得到scaleX and scaleY only 找出文档和元素之间的
  • 在模型对象上设置属性?

    Hi 我正在构建 ASP NET MVC 站点并遇到了问题 在我的项目中 我得到了一个 modelview 类 其中包含几个属性 例如 public class myModelView public int MyProperty1 get
  • Cordova/Phonegap 通过 JavaScript 在应用程序浏览器中打印

    我想从我正在开发的 iPad 应用程序打印一页 或某些页面 应用程序启动时所做的第一件事是通过以下代码加载外部网站 window location https 我现在想从这个外部网站打印一些东西 在 iPad 上的 Safari 中效果很好
  • 根据用户投票移动 div

    我是新来的 但我喜欢这个网站 我检查了其他类似的问题 但没有看到我要找的东西 我是一名音乐家 有一段时间我一直在做 每日之歌 每天写一首小歌 我想将歌曲发布为 div 在里面 li 在 div 中 我只想要一个简单的 mp3 播放器和一个
  • 防止IndexedDB请求错误取消事务

    我的意图 循环localStorage并将数据放入IndexedDB 如果发生某些已知错误 例如当键已存在时出现 ConstraintError 我想忽略这些特定错误 以便事务不会中止 当请求触发错误时 中止事务是默认行为 问题 我以为使用
  • 使用node和multer将图像上传到heroku不起作用

    我正在尝试使用 Node 后端将图像文件上传到 Heroku 我可以使其工作 同样的过程在本地主机测试中工作得很好 但是在将我的项目部署到 Heroku 并测试它之后 过程和文件中出现错误不会上传 后端 let storage multer
  • 不透明的回复有哪些限制?

    不透明的回应 https fetch spec whatwg org concept filtered response opaque被定义为一部分获取API https fetch spec whatwg org 并表示向远程源发出请求的
  • 如何在禁用按钮上启用 Bootstrap 工具提示?

    我需要在禁用的按钮上显示工具提示 并在启用的按钮上删除它 目前 它的工作原理是相反的 扭转这种行为的最佳方法是什么 rel tooltip tooltip

随机推荐

  • 在 Microsoft Edge 中打开跨源窗口时忽略 window.open() 参数

    在 Microsoft Edge 中 以下代码片段将忽略传递给的选项window open when url与当前域的来源不同 但它在 Chrome 和 Firefox 中运行良好 并且当域是同源时 const popupWindow wi
  • libavformat/ffmpeg 与 x264 和 RTP 同步时出现问题

    我一直在开发一些实时直播的流媒体软件 来自各种摄像机和网络流使用 H 264 为了实现这一点 我直接使用 x264 编码器 使用 零延迟 预设 并提供 NAL 因为它们可用于 libavformat 打包到 RTP 最终是 RTSP 中 理
  • Epson打印机连接失败状态ERR_CONN

    我有一台 Epson 打印机 我使用 SDK 提供的 epos2 printer 示例项目 代码与我的应用程序集成 我复制了相同的代码 但它似乎永远不起作用 但是 当我将示例项目连接到打印机时 效果相同 private boolean ru
  • 安卓谷歌登录不可用?

    所以我的项目遇到的一个问题是通过谷歌登录不能一致工作 即 它适用于我的朋友 而不是我的计算机上的我 尽管它昨天在擦除我的手机之前对我有用 手机已损坏 我们的登录代码是google登录的标准 问题是我认为结果一直返回false 代码 prot
  • 为什么我们不能在 firebase 身份验证中使用 getUid() 向您的后端服务器进行身份验证

    在此代码片段 firebase 文档 中 他们提到不要使用 user getUid 向后端服务器进行身份验证 请改用 FirebaseUser getToken FirebaseUser user FirebaseAuth getInsta
  • 如何使用 CakePHP 检查模型是否存在?

    我在通用函数中动态加载模型 我注意到有时我想跳过加载模型 因为它会引发 404 错误 如何检查模型是否存在 就像是 if this gt modelexists type this gt loadModel type else return
  • 如何使用 PHP 的curl 函数从上次重定向中获取标头?

    如果我执行设置为遵循重定向并返回标头的 cURL 请求 它将返回所有重定向的标头 我只想要返回最后一个标头 以及内容正文 我该如何实现这一目标 这是另一种方法 url http google com opts array CURLOPT R
  • 如何使用带有文字点的 Perl 哈希键?

    我有一个 Perl 中的哈希值 它已从一些遗留代码转储到其中 键名现在已从简单的 reqHdrs 更改为 reqHdrs bla rec gt reqHdrs bla 我的问题是现在我似乎无法从哈希访问该字段有什么想法吗 以下是我的错误 D
  • 在 R 中的 ggplot geom_bar 中强制条形图从低于 0 的值开始

    我想使用 ggplot 绘制条形图 我使用scale y log10 来重新缩放y 轴 当使用下面的脚本时 我得到两个方向 向上和向下 的条形图 并且条形图从 1 开始 我明白这是因为 log10 1 0 ggplot data dat a
  • 开发自定义锁屏[重复]

    这个问题在这里已经有答案了 我想开发看起来像 iPhone 锁屏的自定义锁屏应用程序 有这方面的教程或示例吗 如果没有 我应该从哪里开始 Android SDK 不支持创建 自定义锁屏 aap 您只能在自定义固件中修改锁屏行为 UPDATE
  • .so、.la 和 .a 库文件有什么区别?

    我知道一个 so文件是一种动态库 许多线程可以共享此类库 因此不需要在内存中拥有多个副本 但有什么区别 a and la 这些都是静态库吗 如果动态库比静态库有很大优势 为什么仍然有很多静态库 我什么时候应该尝试将代码构建到 so or a
  • PrimeNG 表:如何开始单元格编辑?

    我有一个 PrimeNG p 表 其中包含许多列和行 其中一列使用输入作为其单元格编辑器 精简版如下
  • 构建时出现 Docker 文件非零代码 100 错误

    这是我的 Docker 文件 FROM ubuntu 16 04 MAINTAINER Alexandre Savio lt gt RUN ln snf bin bash bin sh ARG DEBIAN FRONTEND noninte
  • 当系统显示当前正在进程中使用用户时,如何删除Linux中的用户[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试删除我在 ubuntu 上创建的用户 但是 当我使用以下命令时 userdel r cafe fixer 我收到以下消息 use
  • ProgressDialog 未显示在 AsyncTask 中

    我正在创建一个 Android 应用程序 该应用程序依赖于该应用程序从数据库获取的数据 为了获取这些数据 我有以下类 此类从数据库中以 JSON 格式获取数据 对其进行翻译并返回 public class Json public Strin
  • 允许对易失性对象进行优化

    From ISO IEC 9899 201x部分5 1 2 3 程序执行段落4 在抽象机中 所有表达式都按以下指定的方式求值 语义 实际的实现不需要评估一部分 表达式 如果它可以推断出它的值没有被使用并且没有 产生所需的副作用 包括任何由以
  • cppcheck 的规则集

    cppcheck允许你创建自己的规则文件 但我不知道cppcheck的功能暴露了多少 是否有人正在开发一套可以强制执行的JSF http www stroustrup com JSF AV rules pdf or MISRA http w
  • 在任务管理器之间均匀分配 Flink 运算符

    我正在 15 台机器的裸机集群上构建 Flink 流应用程序原型 我使用带有 90 个任务槽 15x6 的纱线模式 该应用程序从单个 Kafka 主题读取数据 Kafka主题有15个分区 所以我也将源算子的并行度设置为15 但是 我发现 F
  • 如何知道 MediaRecorder 何时完成将数据写入文件

    在进行实际录制之前 我们使用 MediaRecorder 使用 setOutputFile 将视频录制到外部存储上的文件中 一切正常 但主要问题是 录制完成后 我们希望开始在 VideoView 中播放录制的视频 如何知道文件何时可以读取和
  • CasperJS 无法设置 window.navigator 对象

    尝试使用 CasperJS 抓取网页 网页检查浏览器是否为 IE 6 7 使用 casperjs 传递 userAgent 似乎不满足其条件 UserAgent 通过 Mozilla 4 0 兼容 MSIE 6 0 Windows NT 5