我试图从网站中提取数据,我想在10分钟之后循环,看看数据是否已经改变。我认为在模块中包装我的功能是一个好主意,但现在我陷入困境,让我当前的梦魇实例从登录模块到数据模块。
start.js
var config = require('./config.json');
var login = require('./functions/login.js');
var data = require('./functions/data.js');
var vo = require('vo');
var Nightmare = require('nightmare'),
nightmare = new Nightmare({
show: config.nightmare.show,
typeInterval: config.nightmare.typeInterval,
webPreferences: {
images: config.nightmare.images,
}
});
vo(login.login)(nightmare, function (err, result) {
if (!result) return;
console.log('Logged in as ' + config.user.username)
vo(data.getData)(nightmare, function (err, result) {
console.log(result);
})
})
login.js
var config = require('../config.json');
var Nightmare = require('nightmare')
function* login(nightmare) {
return yield nightmare
.goto('http://example.com/')
.click('.gogo').wait(2500)
.insert('.whsOnd', config.user.username)
.click('.RveJvd').wait(2500)
.insert('.whsOnd', config.user.password)
.click('.RveJvd').wait(4000)
.then(() => {
return true;
})
}
//login works
module.exports = {
login: login
}
data.js
var config = require('../config.json');
var Nightmare = require('nightmare')
function* getData(nightmare) {
console.log('Getting data ...' + nightmare)
return yield nightmare
.click('.index_menu').wait(1000)
.evaluate(()=>{
// do stuff
})
.then((result) => {
return result;
})
.catch((error) => {
console.log('Failure: ' + error)
})
}
module.exports = {
getData: getData
}
我的评估函数正在工作唯一的问题是,即使在data.js中没有未完成的噩梦,例如路径是。
答案 0 :(得分:0)
您创建了单独的恶梦实例。他们不共享相同的cookie会话,因此您的登录会话不会反映在getdata实例中。您可以尝试从登录实例传递cookie并将其设置在getdata实例中。
login.js
nightmare
.goto('http://example.com/')
.click('.gogo').wait(2500)
.insert('.whsOnd', config.user.username)
.click('.RveJvd').wait(2500)
.insert('.whsOnd', config.user.password)
.click('.RveJvd').wait(4000)
.cookies.get()
.then((cookie) => {
return cookie; // pass this cookie to getdata
})
data.js
nightmare
.cookies.set(cookies) //set cookies from login session
.click('.index_menu').wait(1000)
.evaluate(()=>{
// do stuff
})
.then((result) => {
return result;
})
.catch((error) => {
console.log('Failure: ' + error)
})
}