提交简单的表单并捕获屏幕前后

2024-04-20

我正在尝试使用 phantomjs 提交一个简单的表单

这是我的代码

var webPage = require('webpage');
var page = webPage.create();

page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36';
page.onLoadFinished = function(){

    page.render("after_post.png");
    console.log("done2!" );
    phantom.exit();

};

page.open('http://localhost/bimeh/phantom/testhtml.php', function(status) {

    page.includeJs("http://code.jquery.com/jquery-latest.min.js", function() {

        page.evaluate(function() {
           $("[name='xxx']").val('okk');
            page.render("pre_post.png");
            console.log('done1!');
            $('#subbtn').click();
        });
    });
});

问题是我没有得到 pre post.png 图像,这是我的输出

$ phantomjs test.js
done2!

似乎 onLoadFinished 在 page.evaluate 可以做任何事情之前被调用...也在 after_post.png 中我在提交操作之前获得了表单的图片

我使用 phantomjs 1.98 (我已经从 2.1 降级,因为它希望输出错误,显然是由于 qt 中的一些错误)


这是错误的:

page.evaluate(function() {
    page.render("pre_post.png"); // <----
});

page.evaluate就像您在浏览器中加载页面然后在开发人员工具控制台中运行脚本一样。没有变量page在那里。page属于PhantomJS级别的脚本:

page.open('http://localhost/bimeh/phantom/testhtml.php', function(status) {

    page.includeJs("http://code.jquery.com/jquery-latest.min.js", function() {
        page.render("pre_post.png");

        page.evaluate(function() {
            $("[name='xxx']").val('okk');
            $('#subbtn').click();
        });
    });
});

page.onLoadFinished每次页面加载完成时都会调用:PhantomJS 第一次打开脚本时调用,第二次在提交表单时调用。您可以保持您的功能不变,在这种情况下,如果提交表单,原始页面的第一个屏幕截图将被第二个屏幕截图覆盖。

但是,您的表单很可能不会被提交,因为按钮没有clickPhantomJS 中的方法,它是在 2.x 中添加的。

你的脚本还缺少一个关键的东西:错误控制。请用page.onError回调以捕获页面上的任何错误(您可以简单地从此处复制该函数:http://phantomjs.org/api/webpage/handler/on-error.html http://phantomjs.org/api/webpage/handler/on-error.html )

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

提交简单的表单并捕获屏幕前后 的相关文章

随机推荐

  • 如何监控`preStop`命令的执行?

    我正在尝试使用 pod 的生命周期事件 问题是来自的命令preStop根本不运行 有什么办法可以监控它是否已启动吗 容器的日志为空 lifecycle preStop exec command bin sh c clean sh 我只想添加
  • 矩阵到 JTable

    我需要用静态二维数组填充 JTable 我创建了这个模型JTable public class InsertMatToJTable extends AbstractTableModel String titre age real sex r
  • 如何随机选择三个字符串之一?

    我必须创建一个密码 我相信我可以做到 但是我一开始就被难住了 我有3个字符串 我想随机选择这三个字符串之一 有人知道该怎么做吗 Dim sLowerCase As String qwertyuiopasdfghjklzxcvbnm Dim
  • 将文件拖放到 SharePoint Web 部件中以上传到 DocLibrary

    是否可以创建一个 SharePoint wss3 或 MOSS 2007 Web 部件 以允许将文件拖放到其上 然后将文件上传到预定义的文档库中 我想这需要某种形式的客户端脚本 Ajax 但我对 ajax 的了解有点粗略 从迄今为止的探索来
  • 已使用的 Objective-C 前缀列表

    我正在为我正在编写的库选择一个命名空间 并且希望避免与其他命名空间发生冲突 有谁知道有一个网站列出了所有正在使用的类前缀 https cocoadev github io ChooseYourOwnPrefix https cocoadev
  • FFMPEG 没有按预期“切割”

    我通过一个简单的 system process 使用 FFMPEG 来自 java 应用程序 并尝试将视频切成块 我正在尝试将其切成 10 秒的增量 我的 FFMPEG 命令如下所示 ffmpeg i SampleVideo mp4 ss
  • 在 Android BLE 中处理指示而不是通知

    使用蓝牙 SIG 应用加速器代码 它很好地演示了蓝牙低功耗的不同概念 然而 它没有提到与通知相反的指示 我知道与通知不同 需要确认指示 并且在代码中我会这样做byte val enabled BluetoothGattDescriptor
  • XMLHttpRequest:网络错误 0x80070005,在 Microsoft Edge(但不是 IE)上访问被拒绝

    我有一个非常简单的 ajax 请求 见下文 服务器正在使用 CORS 并且在 IE 10 Chrome Firefox 和 Opera 中运行良好 On 微软边缘但是 它失败了 XMLHttpRequest 网络错误 0x80070005
  • Linux 中 POSIX 可靠信号和 POSIX 实时信号有什么区别?

    我读了一个手册页signal using 男人7信号 http man7 org linux man pages man7 signal 7 html我看到两种类型的信号 所以 我有一个问题 有什么区别POSIX 可靠信号 and POSI
  • 单个 DLL V 多个 DLL

    前段时间我在这里问了一个问题 当时我想知道是否最好将一个大项目 NET 类库 拆分为多个 NET DLL 建议使用一个大的 DLL 该 DLL 现在已在另一个项目中使用 另一个项目只使用了几个类 因此项目中有很多类未使用 从体系结构的角度来
  • 你能在条件表达式中添加条件表达式吗? (是:边界检查如何扩展到多个维度?)

    Note 我通过实现一个完全不同的问题来解决最初的问题 有关新的实际问题 请参阅附录 但您可以阅读前一部分以了解上下文 这是我的一个的扩展以前的帖子 https stackoverflow com q 10171525 1010226 我根
  • Webpack 用于后端?

    我只是想知道 我开始在一个新项目中使用 Webpack 到目前为止它运行良好 我几乎可以说我比我之前用过的 Grunt 更喜欢它 但现在我很困惑如何和 或应该将它与我的 Express 后端一起使用 看 我正在创建一个具有前端 ReactJ
  • 如何实现“ui-sref”有条件执行?

    我想在浏览器遵循 ui router 动态创建的链接之前验证某些条件 我正在调查 rootscope on stateChangeStart 但我无法访问controller scope从那里 我还需要在应用程序的几个地方使用它 这会很麻烦
  • 无法使 ExposeDropdownMenu 与 OutlinedTextField 宽度相同

    我遇到以下问题 下拉菜单项的宽度与 OutlinedTextField 的宽度不同 寻找解决方案 发现以下内容 添加要保留的变量textField width var textFieldSize by remember mutableSta
  • NoClassDefFound ShortTypeHandling 与 gradle 自定义插件使用

    我写了一些常规代码 使用编译compile localGroovy 并将 jar 发布到artificialy 现在我写了一个gradle插件 其中有compile localGroovy and compile gav of jar ab
  • 为什么我不能将 Clojure 的 :^const 与 Java 字节数组一起使用?

    Using lein repl使用 Clojure 1 4 0 我可以定义一个 constJava 字节数组的 但我不能用它做任何事情 user gt def x byte array map byte 0 1 2 3 user x use
  • React.js 错误“相邻 JSX 元素必须包含在封闭标记中”

    我有下面的代码是react js 它抛出一个错误 相邻的 JSX 元素必须包含在封闭标签中 看起来 React 不接受彼此相邻的相同标签 如何显示表格数据 var TestRecords React createClass render f
  • SetThreadName 不适用于 Visual Studio 2005

    设置线程名称 http msdn microsoft com en us library xcb2z8hs 28v VS 71 29 aspx当使用 Visual Studio 2005 时 不会设置线程名称 如下所示 DWORD thre
  • Qt 不支持 Visual Studio 的 Unicode 或字体错误

    我是初学者 现在我正在学习 Qt 并使用 Visual Studio 扩展 Qt VS Tool 2 4 3 我使用的文本是越南语 当我构建程序时 它很好 但按钮显示特殊字符 我已经阅读了一些有关字体错误的主题 但它与此错误无关 我的代码
  • 提交简单的表单并捕获屏幕前后

    我正在尝试使用 phantomjs 提交一个简单的表单 这是我的代码 var webPage require webpage var page webPage create page settings userAgent Mozilla 5