我正在尝试自动化使用表单安全性的应用程序,以便上传文件,然后从返回的HTML中抓取数据。
我开始使用this question中的解决方案。只要最后一步是渲染页面,我就可以定义我的步骤并完成整个工作流程。
以下是我脚本的两个步骤:
function() {
page.open("https://remotesite.com/do/something", function(status) {
if ('success' === status) {
page.uploadFile('input[name=file]', 'x.csv');
page.evaluate(function() {
// assignButton is used to associate modules with an account
document.getElementById("assignButton").click();
});
}
});
},
function() {
page.render('upload-results.png');
page.evaluate(function() {
var results = document.getElementById("moduleProcessingReport");
console.log("results: " + results);
});
},
当我运行脚本时,我看到输出渲染是正确的。但是,评估部分不起作用。我可以通过在远程站点上的Javascript控制台中运行它来确认我的DOM选择是否正确。
我见过其他问题,但他们围绕着使用setTimeout。不幸的是,原始方法的步骤策略已经超时。
更新 我尝试了一种稍微不同的方法,使用this post并获得了类似的结果。我相信该文档使用较旧的PhantomJS API,因此我使用'onLoadFinished'事件来驱动步骤。
答案 0 :(得分:3)
我建议您使用casperjs或者如果您使用PJS的webPage.injectScript(),您可以加载jquery,然后加载自己的脚本来进行表单输入/导航。