我有这个代码块,
java.sql.*
我想迭代部分代码,
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数组(也许可以像click_data[0], click_data[1]
这样使用计数器)。
而且,当存在click_data [20]时,它应该停止。
答案 0 :(得分:1)
那些是可链接的。它是一个调用的返回值,用作后续调用的对象。因此,您可以将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();
答案 1 :(得分:0)
您可以执行以下操作:
var click_data = ['.click-fgdfc', '.click-f55gc', '.click-dfgc', '.click-fg45c', '.click-fg34c'];
const x = nightmare
.goto(site)
.click('#cookieUsagePopIn .closeBtn')
.wait(1000)
.click('[for=acceptContract]')
.click('#submitButton')
.wait('.myAccount')
for (let i=0; i<click_data.length; i++) {
x = x
.goto(site)
.wait(1000)
.click(click_data[0])
.wait(1000)
.click('.logoutBtn')
.wait('.btnSignUp');
}
x.end()
并根据需要附加.catch()。
答案 2 :(得分:0)
我相信您正在尝试做这样的事情。
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)
});
});
答案 3 :(得分:0)
类似的事情应该起作用。您需要对代码进行一些调整。
// 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);