Login PhantomJS/CasperJS——以编程方式单击重新加载页面的按钮后继续执行

Login PhantomJS/CasperJS——以编程方式单击重新加载页面的按钮后继续执行,login,automation,phantomjs,Login,Automation,Phantomjs,我正在尝试使用PhantomJS在我的远程服务器上自动化一个网站 对于这个网站,我必须用我的用户名和密码登录 检查HTML,我看到: <form class="" method="post" action="https://foo.com/login/" id="foo_login_bar" accept-charset="utf-8"> <input tabindex="1" name="user_name

我正在尝试使用PhantomJS在我的远程服务器上自动化一个网站

对于这个网站,我必须用我的用户名和密码登录

检查HTML,我看到:

<form class="" method="post" action="https://foo.com/login/"
                               id="foo_login_bar" accept-charset="utf-8">
    <input tabindex="1" name="user_name" id="user" value="" type="text">
    <input tabindex="2" name="password"  id="pass" value="" type="password">
    <div class="wrapper_login_button">
        <input class="saved_url_for_login" name="login_url" 
           value="http://foo.com/" type="hidden">
        <input tabindex="3" id="login_button" class="btn left login_button" 
           name="login" value="Login" type="submit">
    </div>
</form>
检查屏幕截图显示,它已正确地在用户和密码字段中输入文本,但未能刷新页面

i、 e.如果我填写这两个字段并单击Firefox上的登录按钮,它会将我带到我的帐户主页

我猜这里发生的事情是,在页面有机会重新加载之前,代码立即到达屏幕截图

重新加载完成后,如何使执行继续

编辑:

我猜这里发生的事情是,在页面有机会重新加载之前,代码立即到达屏幕截图

您完全正确,需要等待页面重新加载

在PhantomJS中,您可以在页面加载完成时注册回调函数

var page = require('webpage').create();
var action;

page.onLoadFinished = function(result)
{
    page.render('example' + (new Date()).getTime() + '.png');

    // Need to check `action` variable because 
    // this callback will also fire when opening page for the first time
    if(action == "loggin in") 
    {
         phantom.exit();        
    }
}

page.onConsoleMessage = function(msg) {
  console.log('CONSOLE: ' + msg);
};

page.open('http://foo.com', function(status) 
{
    console.log("Status: " + status);

    if(status === "success") 
    {
        action = "loggin in";
        page.evaluate( bot );
    }

});

function bot()
{
    if( ! Foo.isLoggedIn() ) 
    {
        console.log("Not logged in!");

        document.getElementById( "user" ).value = "myuser";
        document.getElementById( "pass" ).value = "mypass";

        document.getElementById( "login_button" ).click();
    }
}

如果您单击某个内容,它显然会异步加载页面。同时,渲染和退出太早。等一下。
var page = require('webpage').create();
var action;

page.onLoadFinished = function(result)
{
    page.render('example' + (new Date()).getTime() + '.png');

    // Need to check `action` variable because 
    // this callback will also fire when opening page for the first time
    if(action == "loggin in") 
    {
         phantom.exit();        
    }
}

page.onConsoleMessage = function(msg) {
  console.log('CONSOLE: ' + msg);
};

page.open('http://foo.com', function(status) 
{
    console.log("Status: " + status);

    if(status === "success") 
    {
        action = "loggin in";
        page.evaluate( bot );
    }

});

function bot()
{
    if( ! Foo.isLoggedIn() ) 
    {
        console.log("Not logged in!");

        document.getElementById( "user" ).value = "myuser";
        document.getElementById( "pass" ).value = "mypass";

        document.getElementById( "login_button" ).click();
    }
}