如何使用PhantomJS提交表单

我正在尝试使用phantomJS(真棒的工具!)为具有登录凭据的页面提交表单,然后将目标页面的内容输出到stdout。我可以使用幻像访问该表单并成功设置其值,但是我不太确定提交表单并输出后续页面内容的正确语法。到目前为止,我有:

var page = new WebPage();

var url = phantom.args[0];

page.open(url, function (status) {

if (status !== 'success') {

console.log('Unable to access network');

} else {

console.log(page.evaluate(function () {

var arr = document.getElementsByClassName("login-form");

var i;

for (i=0; i < arr.length; i++) {

if (arr[i].getAttribute('method') == "POST") {

arr[i].elements["email"].value="mylogin@somedomain.com";

arr[i].elements["password"].value="mypassword";

// This part doesn't seem to work. It returns the content

// of the current page, not the content of the page after

// the submit has been executed. Am I correctly instrumenting

// the submit in Phantom?

arr[i].submit();

return document.querySelectorAll('html')[0].outerHTML;

}

}

return "failed :-(";

}));

}

phantom.exit();

}

回答:

我想到了。基本上,这是一个异步问题。您不能只是提交并期望立即呈现下一页。您必须等到触发下一页的onLoad事件。我的代码如下:

var page = new WebPage(), 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("https://website.com/theformpage/");

},

function() {

//Enter Credentials

page.evaluate(function() {

var arr = document.getElementsByClassName("login-form");

var i;

for (i=0; i < arr.length; i++) {

if (arr[i].getAttribute('method') == "POST") {

arr[i].elements["email"].value="mylogin";

arr[i].elements["password"].value="mypassword";

return;

}

}

});

},

function() {

//Login

page.evaluate(function() {

var arr = document.getElementsByClassName("login-form");

var i;

for (i=0; i < arr.length; i++) {

if (arr[i].getAttribute('method') == "POST") {

arr[i].submit();

return;

}

}

});

},

function() {

// Output content of page to stdout after form has been submitted

page.evaluate(function() {

console.log(document.querySelectorAll('html')[0].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!");

phantom.exit();

}

}, 50);

以上是 如何使用PhantomJS提交表单 的全部内容, 来源链接: utcz.com/qa/402721.html

回到顶部