PhantomJs 脚本中的 Ajax 请求

2023-12-31

Problem:phantomJs 脚本中对本地页面的 Ajax 请求不起作用(无响应)

问题:我怎样才能让它发挥作用?有什么想法或可能的解决方案吗?

描述:我正在运行 phantomJs 脚本,我需要访问另一个页面(本地)中的 php 函数提供的一些数据。为此,我在 phantomjs 脚本内使用 ajax 请求该页面。但是,该请求不会执行任何操作。脚本是:

page.open(url, function (status) {
    page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js', function () {
        console.log("Solve Captcha");
        $.ajax({
            url: 'captcha.php',
            data: { filename: 'C:\\wamp\\www\\images\\0.png' },
            type: 'post',
            success: function (output) {
                console.log('Solved');
                phantom.exit();
            },
        });
    });
});

php 页面位于本地 WAMP 服务器中,并且已经使用 ajax(在 phantomJs 脚本之外)进行了测试,并且工作正常。脚本和php文件都在文件夹中C:\wamp\www,而图像0.png位于子文件夹中C:\wamp\www\images.

重要的:这一页captcha.php位于 localhost 中,而 phantomJs 请求的页面是not本地的,即page.open打开一个url那不是本地的。

我不明白为什么在 phantomJs 脚本中发出此请求不起作用。请你帮助我好吗?


page.includeJs()将 jQuery 注入到页面中,因此只能从页面上下文(在page.evaluate())。页面上下文是沙盒的,因此您无法调用phantom.exit()来自页面上下文,因为没有这样的对象window.phantom.

您有两种可能使其发挥作用。

阻止 AJAX

jQuery.ajax()接受一个async: false属性来进行阻塞 AJAX 调用,因此您可以简单地进行调用,然后以迭代方式继续执行。

page.open(url, function (status) {
    page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js', function () {
        console.log("Solve Captcha");
        page.evaluate(function(){
            $.ajax({
                async: false, // this
                url: 'http://localhost/captcha.php',
                data: { filename: 'C:\\wamp\\www\\images\\0.png' },
                type: 'post',
                success: function (output) {
                    console.log('Solved');
                },
            });
        });
        phantom.exit();
    });
});

等待完成

waitFor https://github.com/ariya/phantomjs/blob/master/examples/waitfor.js示例中的可用于等待设置特定条件。该条件应设置在successAJAX 调用的回调:

page.open(url, function (status) {
    page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js', function () {
        console.log("Solve Captcha");
        page.evaluate(function(){
            window._finishedCall = false;
            $.ajax({
                url: 'http://localhost/captcha.php',
                data: { filename: 'C:\\wamp\\www\\images\\0.png' },
                type: 'post',
                success: function (output) {
                    console.log('Solved');
                    window._finishedCall = true;
                },
            });
        });
        waitFor(function check(){
            return page.evaluate(function(){
                return window._finishedCall;
            });
        }, function onReady(){
            phantom.exit();
        }, 10000); // 10 seconds maximum timeout
    });
});

第二个问题是你想要进行跨域请求,因为captcha.php在本地主机上并且url与本地主机不同。你需要运行 PhantomJS--web-security=false选项并使用完全限定的 URL:http://localhost/captcha.php.

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

PhantomJs 脚本中的 Ajax 请求 的相关文章

  • 根据 MVC 中的文化的日期时间格式

    我有一个 MVC 视图 其中列出了一个名为 CreatedOn 的日期时间类型列 值的格式如下 日 月 年 时 分 秒 当我单击编辑链接修改值时 我获得相同的格式 当我修改编辑值时 出现验证错误 字段 CreatedOn 必须是日期 我的
  • 在 jQuery 中生成下拉菜单的年份

    我想到了一个小问题 我正在尝试想出一种方法来解决它 基本上 我想要做的是将年份减去 18 年 即 2011 年返回 1993 年 并生成一个下拉选项 供用户选择在此之前的任何年份 基本上他们必须证明自己已超过法定年龄 18 岁 var mi
  • jqPlot DateAxis tickInterval 不起作用

    我试图每月绘制一个包含单个数据点的图表 我会在每个月的第一天将其作为一个点发送到 jqPlot jqplot actualChart 2011 10 01 0 296 2011 11 01 0 682 title programSelect
  • 如何使 Nivo 滑块响应式

    我在 WordPress 中使用 NivoSlider 并对主题实现了一些响应式 css 我也修复了 Nivo Slider 中图像的宽度和高度以及背景大小 但它仅显示一次正确的大小 然后在滑块中显示大图像 这是该网站的链接 Website
  • 向上/向下滚动到带有固定按钮的部分

    我想构建一个用于向上 向下滚动到页面部分标签的脚本 我的源代码如下所示 HTML div class move div class previous UP div div class next DOWN div div section Fi
  • jquery ajax“发布”调用

    我是 jQuery 和 Ajax 的新手 并且在 发布 方面遇到问题 我正在使用 jQuery Ajax post 调用将数据保存到数据库 当我尝试保存数据时 它将 null 传递给我的 C 方法 jQuery 看起来像这样 functio
  • Django:单击按钮加载另一个模板

    我已经在 django 项目上工作了几个星期 只是玩玩以便掌握它的窍门 我有点困惑 我现在有一个名为 home html 的模板 我想知道是否可以将另一个名为 profile html 的模板设置为 home html 模板上的链接 我有一
  • 限制在三角形内

    我正在寻找一段通用代码 javascript 它可以与 jquery UI 一起使用来限制三角形内 div 的移动 拖动 与此类似 http stackoverflow com questions 8515900 how to constr
  • 迭代嵌套的 firebase 对象 - Javascript

    如何迭代嵌套的 firebase 对象 Publications Folder1 hdgjg76675e6r Name Author hdgjdsf3275e6k hd345454575e6f Folder2
  • Casperjs 和无法使用 captureSelector 保存屏幕截图

    我有这样的代码 casper thenOpen url function this echo Opening at width give some time for the page to load casper waitFor funct
  • 如何使用重复的键动态生成 JSON 对象?

    我知道这听起来不可能 但我的老板告诉我 我必须使用 jQuery 通过 AJAX 后调用发送 JSON 并且必须具有重复的键 问题是 如果我写这样的东西 post someurl key1 value1 key2 value2 key2 v
  • 实现快速 Javascript 搜索?

    基本上 我有一个带有文本框的页面和 ul 列在其下面 这 ul 由用户的朋友列表填充 用户开始在文本框中输入朋友的名字 例如按 r 我想立即更新 ul 每次按键仅显示名字以 R 开头的朋友 例如 Richard Redmond Raheem
  • Google Chrome 上的 xsl:include 和 xsl:param,带有 jQ​​uery 转换插件

    我一直尝试在 Google Chrome 中使用 XSL 但没有成功 我读到 Chrome 在 XSLT 方面存在一些错误 其中之一是它不支持 xsl include 可以在这里检查错误 http code google com p chr
  • 未捕获的类型错误:无法读取未定义的属性“prop”

    我有 6 个输入复选框 如果选中的复选框超过 3 个 则最后一个复选框将被取消选中 为了更好地理解 请参阅我之前的question https stackoverflow com questions 35195235 if checkbox
  • 如何使用 Jquery .animate() 函数创建连续滚动内容? [复制]

    这个问题在这里已经有答案了 可能的重复 在jquery中实现圆形滚动条 https stackoverflow com questions 812049 implementing circular scroller in jquery 我想
  • ASP.NET JQuery AJAX POST 返回数据,但在 401 响应内

    我的应用程序中有一个网页 需要调用我设置的 Web 服务来返回对象列表 这个调用是这样设置的 document ready function var response ajax type POST contentType applicati
  • 使用 javascript/jquery 从数据库格式化日期的正确方法

    我正在调用包含日期时间数据类型的数据库 日期看起来像这样 2005 05 23 16 06 00 000 当用户从列表中选择某个项目时 我想在表格中显示它 我调用我的控制器操作并返回所有时间的 Json 并将它们放入表中 问题是日期完全错误
  • 这个 JQuery 指令做什么 $(function(){...}) [重复]

    这个问题在这里已经有答案了 我最近一直在研究JQuery 尽管我知道一些东西 但书上有这样一句话我根本无法理解 function current entry 1 有谁知道这条线是如何工作的以及它的作用是什么 它类似于 JQuery 函数中的
  • JsGrid 将嵌套对象加载到表中

    我正在 Django 中开发一个 Web 项目并使用 jsGrid 我遇到了问题并且找不到解决方案 我有一个嵌套的 JSON 数据 它是通过组合多个数据库表记录创建的 这是我的 JSON count 3 results personnel
  • jQuery 如何实现延迟滑动?

    我正在使用以下 jQuery div 框向上滑动 5 秒后淡出 有没有办法实现这一点 因为该框需要很长时间才能出现 document ready function load limit slideUp 500 have tried fast

随机推荐

  • 如何在 VS 2017.3 中引用 .NET 4.6 NuGet 包时隐藏 .NET Core 兼容性警告

    我正在开发一个 NET Core CLI 应用程序 该应用程序需要引用尚未发布的第 3 方 NuGet 包netcoreappX X目标 我已经运行了分析项目可移植性工具并得到100 兼容性 这是预期的 因为这是一个相对简单的库 然后问题就
  • 在 jQuery Mobile 中加载大型嵌套列表的最快方法是什么?

    我有一个大型嵌套数组 是通过在 PHP 中解析 CSV 文件生成的 我让它以 JSON 格式输出 并让我的 jQuery Mobile 站点获取它 然后将其解析为 DOM 列表 ul li 这在我的桌面浏览器上运行良好 但在我的移动设备上似
  • 本地主机拒绝连接 - MAMP Pro

    似乎有几个类似的问题但找不到答案 一小时前 以及之前的几个月 一切正常 看起来更新到 XCode 9 2 后一切都停止了 我刚刚更新到 MacOS High Sierra 10 13 2 因为其中包含一些 Apache 更新 但它没有解决问
  • Android 中的可滚动选项卡样式

    我想实现一个带有两层选项卡的导航 类似于此 但是 我找不到如何为可滚动选项卡提供这种外观 活动选项卡的标题居中 其他选项卡推到两侧 没有分隔符或下划线 我很确定我以前见过这种可滚动选项卡样式 所以我想知道它是否只是一个设置或者可能是第三方库
  • Android 最近的应用程序缩略图

    我的应用程序在 ICS 和 JB 设备上的最新应用程序列表中显示不正确 缩略图被剪切 扭曲 有时我的应用程序会出现完全不同的应用程序的屏幕截图 某些活动可能不会显示 尽管它们没有标记为从近期排除 可能出现什么问题以及我应该如何解决该问题 N
  • 向 Kibana 仪表板应用只读权限?

    有没有办法在与其他人共享 kibana 仪表板时设置某种权限 我担心有人会删除它或进行更改并保存它 我用谷歌搜索但没有找到任何东西 自从提出这个问题以来 发生了很多事情 自 5 月份起 基于角色的访问控制现已在社区版中提供 https ww
  • yargs 仅采用命令行输入字符串的第一个单词

    我正在教程中开发一个 Node js 命令行天气应用程序 我意识到当我输入一个字符串作为输入时 仅采用第一个单词 该字符串被拆分为一个单词数组 并且仅返回第一个单词 app js const yargs require yargs cons
  • iPhone - 如何识别我的应用程序的 iTunes 用户

    有一些应用程序似乎可以识别 iPhone 的 iTunes 用户 我需要开发一个支持 订阅 类型的应用内购买的应用程序 Apple 希望我的应用程序在每个用户的设备 iPhone iPod iPad 上授予订阅权限 为此 我可以构建一个服务
  • 创建表命令 SQL 缺少右括号

    创建下表时 我收到错误消息 ORA 00907 缺少右括号 create table CustomerOrder CustomerOrderNumber NUMBER 15 CONSTRAINT Customer Order Number
  • 如何在 F# 中实现 beta 缩减函数?

    我正在用 F 编写 lambda 演算 但我一直坚持实现 beta 约简 用实际参数替换形式参数 lambda x e f gt e f x 使用示例 lambda n n 2 3 7 gt n 2 3 7 n gt 7 2 3 所以我很想
  • html如何将H1、H2等设为链接?

    将 h1 h2 等标题转换为链接的正确代码是什么 search engines标题和链接的索引文本 Is it a href h1 heading h1 a or h1 a href heading a h1 谁能解释为什么 每这里 htt
  • 我可以使用资源字符串作为包名称吗?

    这样的事情可能吗
  • Vaadin 23 错误:找不到模块“@vaadin/build-status-plugin”

    我正在尝试从 Vaadin 18 升级到 Vaadin 23 执行升级说明中列出的步骤后 我在获取前端构建时遇到了大量问题 最新的阻止程序是启动应用程序后 npm 运行 但我看到以下错误 我检查了node modules文件夹 build
  • Go模板和函数

    在我的 go 代码中我经常使用if像这样 if user user Registered go 模板中的等效代码是 if and User User Registered end 不幸的是 如果模板中的代码失败 User is nil 在g
  • 将 NSDecimalNumber 转为负数

    我正在寻找一种方法来扭转NSDecimalNumber乘以负数 1 decNumber is the one I would like to turn negative NSDecimalNumber decNumber values ob
  • getter 是否应该返回对象实例的副本以避免副作用?

    我想获取从类的函数返回的值 在我的班级里 public class MyClass private Color color new Color 0f 0f 0f 1f public Color getColor return this co
  • 多维 np.argmax?

    我有一个形状为 n n g 的 3D 数组 并且我需要每个 n n argmax 即结果应该是每个长度为 g 的两个索引向量 x y 直观的解决方案是 array np random uniform size 5 5 1000 np arg
  • Node.js、(Hi)Redis 和 multi 命令

    我正在使用 node js 和 redis 并通过此命令安装了hiredis 库 npm install hiredis redis 我在这里查看了多个示例 https github com mranney node redis blob
  • 使用调查权重时如何为 Logit 模型生成边际效应?

    我通常使用 mfx 包和 logitmfx 函数生成 logit 模型边际效应 然而 我当前使用的调查具有权重 由于某些人群中的过度采样 这对样本中 DV 的比例有很大影响 而 logitmfx 似乎没有任何方法包含权重 我已经用 svyg
  • PhantomJs 脚本中的 Ajax 请求

    Problem phantomJs 脚本中对本地页面的 Ajax 请求不起作用 无响应 问题 我怎样才能让它发挥作用 有什么想法或可能的解决方案吗 描述 我正在运行 phantomJs 脚本 我需要访问另一个页面 本地 中的 php 函数提