提交简单的表格并在屏幕前后捕捉

时间:2018-03-10 21:50:46

标签: javascript phantomjs

我试图用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中的某些错误显然会输出错误)

1 个答案:

答案 0 :(得分:1)

这是错误的:

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

page.evaluate就好像您在浏览器中加载了一个页面,然后在开发人员工具控制台中运行脚本。那里没有变量pagepage属于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