点击事件的噩梦循环
Nightmare Loop Through Click Events
我正在学习梦魇。尝试访问一个网站,登录,然后迭代地点击一个按钮,使更多的数据出现,直到该按钮不再存在。我做了一个虚拟账户来说明。
我第一次成功登录并单击按钮,但是当我尝试再次单击它时,它记录了一个错误,提示它找不到“.more-checkins”元素。
最终,我希望此代码处于循环中,而不是告诉代码单击...等待...然后再次单击。帮助设计也将不胜感激。
const Nightmare = require('nightmare')
const untappdURL = 'https://untappd.com/user/beerFan2017'
Nightmare({
show: true,
openDevTools: true,
waitTimeout: 90000000 // increase the default timeout to test things
})
.goto(untappdURL)
.click('.more_checkins')
.type('#username', 'beerFan2017')
.type('#password', 'Testing2017')
.click('input[type="submit"]')
.wait('.stats')
.click('.more_checkins')
.evaluate(function() {
return console.log('Begin waiting');
})
.wait(5000)
.evaluate(function() {
return console.log('Waiting end');
})
.click('more_checkins')
.then(result => console.log(result))
.catch(error => console.error(error))
两部分答案:第一,去 nightmare-examples
上阅读 asynchronous operations and loops。这将帮助您了解有关使用 promises 进行迭代的一些背景知识。
第二,Nightmare 存储库中存在类似的问题 - #625 - 这与当您到达滚动条末尾时继续加载更多内容有关。示例实现(即非常幼稚,小心):
var Nightmare = require('nightmare');
var vo = require('vo');
var nightmare = Nightmare({
show: true
});
var run = function * () {
yield nightmare.goto('http://someInfiniteScrollPage.tld');
var previousHeight, currentHeight=0;
while(previousHeight !== currentHeight) {
previousHeight = currentHeight;
var currentHeight = yield nightmare.evaluate(function() {
return document.body.scrollHeight;
});
yield nightmare.scrollTo(currentHeight, 0)
.wait(3000);
}
yield nightmare.end();
};
vo(run)(function(err) {
console.dir(err);
console.log('done');
});
希望这足以让您入门。
我正在学习梦魇。尝试访问一个网站,登录,然后迭代地点击一个按钮,使更多的数据出现,直到该按钮不再存在。我做了一个虚拟账户来说明。
我第一次成功登录并单击按钮,但是当我尝试再次单击它时,它记录了一个错误,提示它找不到“.more-checkins”元素。
最终,我希望此代码处于循环中,而不是告诉代码单击...等待...然后再次单击。帮助设计也将不胜感激。
const Nightmare = require('nightmare')
const untappdURL = 'https://untappd.com/user/beerFan2017'
Nightmare({
show: true,
openDevTools: true,
waitTimeout: 90000000 // increase the default timeout to test things
})
.goto(untappdURL)
.click('.more_checkins')
.type('#username', 'beerFan2017')
.type('#password', 'Testing2017')
.click('input[type="submit"]')
.wait('.stats')
.click('.more_checkins')
.evaluate(function() {
return console.log('Begin waiting');
})
.wait(5000)
.evaluate(function() {
return console.log('Waiting end');
})
.click('more_checkins')
.then(result => console.log(result))
.catch(error => console.error(error))
两部分答案:第一,去 nightmare-examples
上阅读 asynchronous operations and loops。这将帮助您了解有关使用 promises 进行迭代的一些背景知识。
第二,Nightmare 存储库中存在类似的问题 - #625 - 这与当您到达滚动条末尾时继续加载更多内容有关。示例实现(即非常幼稚,小心):
var Nightmare = require('nightmare');
var vo = require('vo');
var nightmare = Nightmare({
show: true
});
var run = function * () {
yield nightmare.goto('http://someInfiniteScrollPage.tld');
var previousHeight, currentHeight=0;
while(previousHeight !== currentHeight) {
previousHeight = currentHeight;
var currentHeight = yield nightmare.evaluate(function() {
return document.body.scrollHeight;
});
yield nightmare.scrollTo(currentHeight, 0)
.wait(3000);
}
yield nightmare.end();
};
vo(run)(function(err) {
console.dir(err);
console.log('done');
});
希望这足以让您入门。