如何在PhantomJS中登录后在会话中打开一个特定的URL[英] How to open a specific URL in a session after login in PhantomJS

问题描述

我正在使用 PhantomJS 登录 facebook.这是我的代码:

var page = require('webpage').create();
phantom.cookiesEnabled = true;
page.open("http://www.facebook.com/login.php", function(status) {

  if (status === "success") {
    page.evaluate(function() {
        document.getElementById("email").value = "email";
        document.getElementById("pass").value = "pass";
        document.getElementById("loginbutton").click();
    });
    window.setTimeout(function() {
       page.render("page.png");
       phantom.exit();
    }, 5000);
  }
});

page.open("https://www.facebook.com/myprofil", function(status) {

    window.setTimeout(function() {
       page.render("profil.png");
       phantom.exit();
    }, 5000);

});

到目前为止,登录过程一切顺利,但我没有找到正确的方法来访问我的个人资料 URL,例如在同一个会话中.我尝试再次使用 page.open,但我不断收到带有我请求的页面的登录表单,就好像我以前从未登录过一样.在会话中导航的正确方法是什么?

推荐答案

page.open 是一个异步函数.打开一个页面需要一些时间.完成后,将调用回调.如果您连续两次调用 page.open 而不等待第一次调用完成,那么您实际上是在覆盖第一个请求,因此只会执行第二个请求.

你需要嵌套调用:

page.open("http://www.facebook.com/login.php", function(status) {
    if (status === "success") {
        page.evaluate(function() {
            document.getElementById("email").value = "email";
            document.getElementById("pass").value = "pass";
            document.getElementById("loginbutton").click();
        });
        window.setTimeout(function() {
           page.render("page.png");
           page.open("https://www.facebook.com/myprofil", function(status) {

                window.setTimeout(function() {
                   page.render("profil.png");
                   phantom.exit();
                }, 5000);
            });
        }, 5000);
    }
});

请记住,一旦调用 phantom.exit(),PhantomJS 就会退出.所以当你的脚本应该结束时,你可能应该有一个 phantom.exit() .

本文地址:https://www.itbaoku.cn/post/1740070.html