提交简单的表格并捕捉前后的画面[英] submitting simple form and capturing before and after screen

问题描述

我正在尝试使用 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!

似乎在 page.evaluate 之前调用 onLoadFinished 可以做任何事情......也在 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 第一次打开脚本时,第二次提交表单时.您可以保持功能不变,在这种情况下,如果提交表单,原始页面的第一个屏幕截图将被第二个屏幕截图覆盖.

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

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

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