我的脚本应该打开论坛页面,在填写登录/密码的字段,提交表单和新打开的页面保存特定数据(用户,邮件列表等) 当我提交表单,我需要等5-10秒左右,所以我的超时时间非常长。 我给予了极大的功劳维杰,因为我从他的回答在这个岗位开始了: How to submit a form using PhantomJS
只是为了测试目的我CONSOLE.LOG网站内容两次:在登录电子和一次后前一次。它也可以。
用户列表的HTML内容由许多元素组成。 其中一个看起来像(修剪所有的造型,类等):
//many tds
达阵和TRS没有标识或名称属性。有几列,但我想保存到csv只有他们几个(如果因为没有字段ID是不可能的,我可以将所有内容保存到csv,但它是不太需要的解决方案)。 我想通过查找'mailto'来识别所需的数据,然后将'[email protected]'保存到文件中。
我不知道如何将其保存到csv,但也让脚本知道什么数据应该到达电子表格中的哪个单元格。
代码:
var page = require('webpage').create();
var fs = require('fs');
var testindex = 0, loadInProgress = false;
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.onLoadStarted = function() {
loadInProgress = true;
console.log("load started");
};
page.onLoadFinished = function() {
loadInProgress = false;
console.log("load finished");
};
var steps = [
function() {
//Load Login Page
page.open("http://www.website.com/memberlist.php");
},
function() {
//Enter Credentials
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
page.evaluate(function() {
$("input[name='username']").val("login");
$("input[name='password']").val("password");
$("input[value='Log in']").click();
console.log("form filled in"); //works
});
var markup = page.content;
console.log(markup);
page.render("form filled.png"); //works
});
},
function() {
// Output content of page to stdout after form has been submitted
page.evaluate(function() {
var record = document.querySelectorAll("tr.row1"); //input.row1, input.row2
//console.log(inputs.length);
for (i=0; i < record.length; i++){
console.log(document.querySelectorAll('tr.row1')[i].outerHTML);
}
});
}
];
interval = setInterval(function() {
if (!loadInProgress && typeof steps[testindex] == "function") {
console.log("step " + (testindex + 1));
steps[testindex]();
testindex++;
}
if (typeof steps[testindex] != "function") {
console.log("test complete!");
page.render('export.png'); //works. it's a screenshoot in a newly opened webpage already after succesful log in.
phantom.exit();
}
}, 10000);
2014-03-04
Marcin