【问题标题】:How can I do a loop using promises with nodejs and zombie.js如何使用带有nodejs和zombie.js的promise进行循环
【发布时间】:2016-03-01 11:16:31
【问题描述】:

我正在使用zombie.js,我需要单击一个按钮,直到该按钮的“样式”属性中有一些文本(每次单击后按钮都会更改)。

我使用这种结构。

     browser
    .visit(url)
    .then(function() {    
        console.log("Scraping ...");            
        ...
    })
    .then(function() {
        var button = browser.query([SELECTOR]);             
        if(button != null)
        {
            if(button.outerHTML.indexOf([TEXT_TO_SEEK]) == -1)
            {
                console.log("Click more button");
                return browser.pressButton([SELECTOR]);
            }                       
        }
        return;
    })

它可以工作一次,但我想执行n次直到满足条件。

【问题讨论】:

    标签: node.js zombie.js


    【解决方案1】:

    这个递归的对我有用:

    browser
        .visit(url)
        .then(function () {
            console.log('Scraping ...');
            //...
        })
        .then(function () {
            var maxClicks = 10;
            return (function pressIt() {
                if (maxClicks-- <= 0) {
                    throw new Error('Usless button');
                }
    
                var button = browser.query([SELECTOR]);
                if (!button) {
                    throw new Error('There is no button');
                }
    
                if (button.outerHTML.indexOf([TEXT_TO_SEEK]) == -1) {
                    console.log('Click more button');
                    return browser.pressButton([SELECTOR]).then(pressIt);
                } else {
                    return 'This button rocks';
                }
            })();
        }).then(console.log, console.error);
    

    输出:

    "Scraping ..."
    "Click more button"
    "Click more button"
    "Click more button"
    "This button rocks"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2016-12-14
      • 2020-05-31
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      相关资源
      最近更新 更多