PhantomJS facebook 登录表单未完全提交
PhantomJS facebook login form not fully submitted
我正在尝试通过 phantomJS 登录 facebook,它工作正常但是当我 运行 它没有提交表单。
它打开页面填写字段但不提交。我尝试通过控制台查看表单提交 return undefined 首先提交。
var page = require('webpage').create();
var system = require('system');
var stepIndex = 0;
var loadInProgress = false;
email = system.args[1];
password = system.args[2];
page.onLoadStarted = function() {
loadInProgress = true;
console.log("load started");
};
page.onLoadFinished = function() {
loadInProgress = false;
console.log("load finished");
};
var steps = [
function() {
page.open("http://www.facebook.com/login.php", function(status) {
page.evaluate(function(email, password) {
document.querySelector("input[name='email']").value = email;
document.querySelector("input[name='pass']").value = password;
document.querySelector("#login_form").submit();
console.log("Login submitted!");
}, email, password);
page.render('output.png');
});
},
function() {
console.log(document.documentElement.innerHTML);
},
function() {
phantom.exit();
}
]
setInterval(function() {
if (!loadInProgress && typeof steps[stepIndex] == "function") {
console.log("step " + (stepIndex + 1));
steps[stepIndex]();
stepIndex++;
}
if (typeof steps[stepIndex] != "function") {
console.log("test complete!");
phantom.exit();
}
}, 10000);
你至少有两个问题。
由于提交表单通常会产生一些网络请求,结果不会立即可用,但您假设它会立即可用,因为您会立即将屏幕截图呈现给看看发生了什么。该屏幕截图不会在提交后向您显示该页面。它将在提交期间向您显示一个页面。当提交结果到达浏览器时,您需要将渲染移至下一步。
document
在页面上下文之外没有任何意义。尽管如此,PhantomJS 还是会提供这样一个虚拟对象。您只能访问 page.evaluate()
.
内的 DOM(document
和 window
)
尝试
var steps = [
function() {
page.open("http://www.facebook.com/login.php", function(status) {
page.evaluate(function(email, password) {
document.querySelector("input[name='email']").value = email;
document.querySelector("input[name='pass']").value = password;
document.querySelector("#login_form").submit();
console.log("Login submitted!");
}, email, password);
});
},
function() {
page.render('output.png');
console.log("innerHTML: " + page.evaluate(function(){
return document.documentElement.innerHTML;
}));
console.log("full page: " + page.content);
},
function() {
phantom.exit();
}
]
我正在尝试通过 phantomJS 登录 facebook,它工作正常但是当我 运行 它没有提交表单。
它打开页面填写字段但不提交。我尝试通过控制台查看表单提交 return undefined 首先提交。
var page = require('webpage').create();
var system = require('system');
var stepIndex = 0;
var loadInProgress = false;
email = system.args[1];
password = system.args[2];
page.onLoadStarted = function() {
loadInProgress = true;
console.log("load started");
};
page.onLoadFinished = function() {
loadInProgress = false;
console.log("load finished");
};
var steps = [
function() {
page.open("http://www.facebook.com/login.php", function(status) {
page.evaluate(function(email, password) {
document.querySelector("input[name='email']").value = email;
document.querySelector("input[name='pass']").value = password;
document.querySelector("#login_form").submit();
console.log("Login submitted!");
}, email, password);
page.render('output.png');
});
},
function() {
console.log(document.documentElement.innerHTML);
},
function() {
phantom.exit();
}
]
setInterval(function() {
if (!loadInProgress && typeof steps[stepIndex] == "function") {
console.log("step " + (stepIndex + 1));
steps[stepIndex]();
stepIndex++;
}
if (typeof steps[stepIndex] != "function") {
console.log("test complete!");
phantom.exit();
}
}, 10000);
你至少有两个问题。
由于提交表单通常会产生一些网络请求,结果不会立即可用,但您假设它会立即可用,因为您会立即将屏幕截图呈现给看看发生了什么。该屏幕截图不会在提交后向您显示该页面。它将在提交期间向您显示一个页面。当提交结果到达浏览器时,您需要将渲染移至下一步。
document
在页面上下文之外没有任何意义。尽管如此,PhantomJS 还是会提供这样一个虚拟对象。您只能访问page.evaluate()
. 内的 DOM(
document
和 window
)
尝试
var steps = [
function() {
page.open("http://www.facebook.com/login.php", function(status) {
page.evaluate(function(email, password) {
document.querySelector("input[name='email']").value = email;
document.querySelector("input[name='pass']").value = password;
document.querySelector("#login_form").submit();
console.log("Login submitted!");
}, email, password);
});
},
function() {
page.render('output.png');
console.log("innerHTML: " + page.evaluate(function(){
return document.documentElement.innerHTML;
}));
console.log("full page: " + page.content);
},
function() {
phantom.exit();
}
]