Dig*_*kam 1 javascript phantomjs
我正在尝试抓取一个网站,登录后有一个登录页面分离并跳转主页.这是我的代码,但我不是成就跳跃主页:
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() ;
});
Run Code Online (Sandbox Code Playgroud)
你忘了等待异步处理.您的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);
}
});
Run Code Online (Sandbox Code Playgroud)
使用waitFor()了更稳健的等待特定的条件,或使用page.onCallback与window.callPhantom()对.
| 归档时间: |
|
| 查看次数: |
8491 次 |
| 最近记录: |