Javascript PhantomJS facebook登录表单未完全提交

Javascript PhantomJS facebook登录表单未完全提交,javascript,facebook,web-scraping,phantomjs,form-submit,Javascript,Facebook,Web Scraping,Phantomjs,Form Submit,我试图通过phantomJS登录facebook,它工作正常,但当我运行它时,不要提交表单 它打开页面填充字段,但不提交。我试着在控制台上看到表单submit返回undefined,然后提交 var page = require('webpage').create(); var system = require('system'); var stepIndex = 0; var loadInProgress = false; email = system.args[1]; password =

我试图通过phantomJS登录facebook,它工作正常,但当我运行它时,不要提交表单

它打开页面填充字段,但不提交。我试着在控制台上看到表单submit返回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);

你至少有两个问题

  • 由于提交表单通常会引起一些网络请求,因此结果不会立即可用,但您假设它会立即可用,因为您会立即渲染屏幕截图以查看发生了什么。提交后,该屏幕截图不会显示页面。它将在提交过程中显示一个页面。当提交结果到达浏览器时,需要将渲染移动到下一步

  • 文档
    在页面上下文之外没有任何意义。然而,PhantomJS将提供这样一个虚拟对象。您只能访问
    page.evaluate()中的DOM(
    文档
    窗口

试一试


非常感谢,你们是完美的,当我在其他函数中引用页面时,我得到的页面不是一个变量/未定义,但你们的工作很好@Artjom B.B.感谢您的大力支持。通过您的回答,我可以登录此页面,但为什么www.facebook.com主页无法登录。它只适用于www.facebook.com/login.phpI不知道。也许有某种类型的重定向是PhantomJS无法执行的。
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();
    }
]