gpt4 book ai didi

javascript - PhantomJS 登录和页面重定向

转载 作者:行者123 更新时间:2023-11-30 08:34:25 24 4
gpt4 key购买 nike

我正在尝试抓取一个登录页面分离并在登录后跳转主页的网站。这是我的代码,但我不是跳主页:

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 and window.callPhantom() pair .

关于javascript - PhantomJS 登录和页面重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33196723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com