我有这个代码块,
var click_data = ['.click-fgdfc', '.click-f55gc', '.click-dfgc', '.click-fg45c', '.click-fg34c'];
nightmare
.goto(site)
.click('#cookieUsagePopIn .closeBtn')
.wait(1000)
.click('[for=acceptContract]')
.click('#submitButton')
.wait('.myAccount')
.goto(site)
.wait(1000)
.click(click_data[0])
.wait(1000)
.click('.logoutBtn')
.wait('.btnSignUp')
.end()
.catch(error => {
console.error('error: ', error)
});
我想要迭代部分代码,
.goto(site)
.click('#cookieUsagePopIn .closeBtn')
.wait(1000)
.click('[for=acceptContract]')
.click('#submitButton')
.wait('.myAccount')
.goto(site)
.wait(1000)
.click(click_data[0])
.wait(1000)
.click('.logoutBtn')
.wait('.btnSignUp')
因为我应该使用像click_data[0], click_data[1]
这样的click_data数组(可能是像click_data[count]
这样可用的计数器)。
而且,当click_data20出现时,它应该停止。
发布于 2018-10-10 04:35:38
这些都是链式的。它是一个调用的返回值,用作后续调用的对象。因此,您可以将a.b().c().d()
重构为p=a.b(); p=p.c(); p=p.d();
,因此,如果您想要循环c()
5次来模拟a.b().c().c().c().c().c().d()
执行以下操作:
var p = a.b();
for (let i = 0; i < 5; ++i) {
p = p.c();
}
p = p.d();
发布于 2018-10-10 04:48:34
我相信你正在尝试做这样的事情。
var click_data = ['.click-fgdfc', '.click-f55gc', '.click-dfgc', '.click-fg45c', '.click-fg34c'];
click_data.map(data => {
nightmare
.goto(site)
.click('#cookieUsagePopIn .closeBtn')
.wait(1000)
.click('[for=acceptContract]')
.click('#submitButton')
.wait('.myAccount')
.goto(site)
.wait(1000)
.click(data)
.wait(1000)
.click('.logoutBtn')
.wait('.btnSignUp')
.end()
.catch(error => {
console.error('error: ', error)
});
});
发布于 2018-10-10 05:33:04
像这样的东西应该行得通。您必须根据您的代码对其进行一些调整。
// index.js
const Nightmare = require('nightmare');
const nightmare = Nightmare({ show: true });
const clickData = ['#doc-info', '#cst'];
clickData.reduce((accumulator, selector) => {
return accumulator.then((results) => {
return nightmare.goto('https://google.com')
.wait('body')
.click(selector)
.title()
.then((result) => {
results.push(result);
return results;
});
});
}, Promise.resolve([]))
.then((results) => {
console.dir(results);
})
.then(nightmare.end)
.catch(nightmare.end);
https://stackoverflow.com/questions/52728800
复制相似问题