我得到了一个返回的URLs数组。如何循环数组并使用nightmaregoto()函数,转到每个URL并执行nightmare代码,然后关闭并执行下一个URL?
下面是我的代码:
var Nightmare = require('nightmare');
var vo = require('vo');
vo(function*() {
var nightmare = Nightmare();
var title = yield nightmare
.goto('https://www.example.com/l/los_angeles-california')
.inject('js', `node_modules/jquery/dist/jquery.js`)
.evaluate(function() {
var hrefs = [];
$('.ItemsListCard').find('a').each(function() {
hrefs.push($(this).attr('href'));
});
return hrefs //array of urls
for (var i = 0; i < hrefs.length; i++) {
nightmare.goto(hrefs[i].href)
.wait(5000)
.click('.ItemListingActionButtons')
.type('.ThreadViewInput__input', 'Hey! ')
.click('.ThreadViewInput__send')
}
});
console.log(title);
yield nightmare.end();
})(function(err, result) {
if (err) return console.log(err);
});发布于 2017-11-23 09:32:50
请注意,您要求Nightmare在浏览器上下文中执行(通过.execute())的代码与在nodejs中的控制器中运行的代码是不同的。您在这里的想法是正确的,但是在返回hrefs之后,迭代它们的其余代码应该在控制器中,如下所示:
const hrefs = yield nightmare
.goto('https://www.example.com/l/los_angeles-california')
.inject('js', `node_modules/jquery/dist/jquery.js`)
.evaluate(function() {
var hrefs = [];
$('.ItemsListCard').find('a').each(function() {
hrefs.push($(this).attr('href'));
});
return hrefs; //array of urls
});
for (var i = 0; i < hrefs.length; i++) {
yield nightmare.goto(hrefs[i].href)
.wait(5000)
.click('.ItemListingActionButtons')
.type('.ThreadViewInput__input', 'Hey! ')
.click('.ThreadViewInput__send');
}https://stackoverflow.com/questions/47425661
复制相似问题