[英]PhantomJS Login and Page Redirect
我正在嘗試爬網一個具有單獨登錄頁面的網站,並在登錄后跳轉主頁。 這是我的代碼,但是我沒有成就跳轉主頁:
var page = require('webpage').create() ;
var login = 'https://webstie.com/login' ;
var home = 'https://website.com/home' ;
page.open(login, function (status) {
if (status !== 'success') {
console.log('fail!');
} else {
page.evaluate(function(){
function timer (f,n) {
var i = 0 ;
var t = setInterval(function(){
if (n < i) {
clearInterval(t) ;
f() ;
}
i++ ;
},50) ;
}
$("input[name=email]").val("user") ;
$("input[name=password]").val("pass") ;
$("input[type=submit]").click() ;
timer(function(){
document.location.href = home ;
timer(function(){
$('body').css('border','1px solid red') ;
},100) ;
},100) ;
}) ;
page.render('page.png') ;
}
console.log('finished!') ;
phantom.exit() ;
});
您忘記等待異步處理。 您的timer()
函數是異步的,因為setTimeout()
是異步的。 這就是您的page.render()
調用實際上在timer()
運行之前發生的原因。 phantom.exit()
。
但是,您不想使用document.location.href = home
,因為那樣您就需要監聽頁面打開事件。 您可以與另一個page.open()
以集成方式進行此操作。
嘗試:
page.open(login, function (status) {
if (status !== 'success') {
console.log('fail!');
phantom.exit(1);
} else {
page.evaluate(function(){
$("input[name=email]").val("user") ;
$("input[name=password]").val("pass") ;
$("input[type=submit]").click() ;
});
setTimeout(function(){
page.open(home, function(status){
if (status !== "success") {
console.log('fail2');
phantom.exit(1);
return;
}
page.evaluate(function(){
$('body').css('border','1px solid red') ;
});
page.render('page.png');
console.log('finished!');
phantom.exit();
});
}, 500);
}
});
使用waitFor()
獲得更強大的等待特定條件的性能,或使用page.onCallback
和window.callPhantom()
對 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.