首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Nodejs噩梦迭代

Nodejs噩梦迭代
EN

Stack Overflow用户
提问于 2018-10-10 04:24:21
回答 3查看 103关注 0票数 0

我有这个代码块,

代码语言:javascript
复制
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)
  });

我想要迭代部分代码,

代码语言:javascript
复制
  .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出现时,它应该停止。

EN

回答 3

Stack Overflow用户

发布于 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()

执行以下操作:

代码语言:javascript
复制
var p = a.b();
for (let i = 0; i < 5; ++i) {
  p = p.c();
}
p = p.d();
票数 1
EN

Stack Overflow用户

发布于 2018-10-10 04:48:34

我相信你正在尝试做这样的事情。

代码语言:javascript
复制
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)
  });
});
票数 0
EN

Stack Overflow用户

发布于 2018-10-10 05:33:04

像这样的东西应该行得通。您必须根据您的代码对其进行一些调整。

代码语言:javascript
复制
// 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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52728800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档