gpt4 book ai didi

javascript - 如何使用 PhantomJS 提交表单

转载 作者:IT老高 更新时间:2023-10-28 13:16:56 25 4
gpt4 key购买 nike

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

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.example";
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.example/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);

关于javascript - 如何使用 PhantomJS 提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9246438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com