我正在尝试使用 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 第一次打开脚本时调用,第二次在提交表单时调用。您可以保持您的功能不变,在这种情况下,如果提交表单,原始页面的第一个屏幕截图将被第二个屏幕截图覆盖。
但是,您的表单很可能不会被提交,因为按钮没有click
PhantomJS 中的方法,它是在 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(使用前将#替换为@)