我收到了URLs
的数组。如何遍历数组并使用nightmare goto()
函数转到每个网址并执行nightmare代码然后关闭并执行下一个?
继承我的代码:
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);
});
答案 0 :(得分:0)
请注意,您要求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');
}