Login PhantomJS/CasperJS——以编程方式单击重新加载页面的按钮后继续执行
我正在尝试使用PhantomJS在我的远程服务器上自动化一个网站 对于这个网站,我必须用我的用户名和密码登录 检查HTML,我看到: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
<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();
}
}