繁体   English   中英

登录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而不等待第一个调用完成,则实际上是在覆盖第一个请求,因此仅执行第二个请求。

您需要嵌套调用:

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM