我试图抓一个网站,然后在我的网站上使用它。 但是,我自己的res.send和console.log总是在horseman收集数据之前触发。 我使用了回调但它似乎没有工作
var Horseman = require('node-horseman');
var express = require("express");
var app = express();
var URL = "SomeURL";
function getProf(callback){
var result = {com:"default", rat:"default"};
var horseman = new Horseman();
horseman.open(URL)
.evaluate(function(selector){
var els = $(selector);
$.each(els, function(i, el) {
var event = document.createEvent('MouseEvent');
event.initEvent('click', true, true);
el.dispatchEvent(event);
});
}, 'h1:eq(3)')
.delay(1000)
.text('.metric')
.then(function(text){
result.com = text;
})
.text('.expand-area>p')
.then(function(text){
result.rat = text;
})
.close();
callback(result.rat,result.com);
}
app.get("/",function(req,res){
getProf(function(comments, rating){
console.log(comments);
console.log(rating);
res.send('success');
});
});
这给了我
default
default
任何人都可以帮助我吗?
答案 0 :(得分:0)
由于horseman
内容异步,您需要将callback
移至.then
方法的最后getProf
:
function getProf(callback){
var result = {com:"default", rat:"default"};
var horseman = new Horseman();
horseman.open(URL)
.evaluate(function(selector){
var els = $(selector);
$.each(els, function(i, el) {
var event = document.createEvent('MouseEvent');
event.initEvent('click', true, true);
el.dispatchEvent(event);
});
}, 'h1:eq(3)')
.delay(1000)
.text('.metric')
.then(function(text){
result.com = text;
})
.text('.expand-area>p')
.then(function(text){
result.rat = text;
callback(result.rat,result.com);
})
.close();
}