我试图用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中的某些错误显然会输出错误)
答案 0 :(得分:1)
这是错误的:
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)