代码之家  ›  专栏  ›  技术社区  ›  andromeda

循环访问可单击元素列表,并将HTML写出到相应的文件中

  •  3
  • andromeda  · 技术社区  · 7 年前

    我正在使用jquery获取包含某些关键字的元素列表。我可以得到元素列表,但是我不知道如何循环遍历每个元素,单击它的子元素并下载新加载的页面。这是迄今为止我得到的casperjs代码:

    var casper = require('casper').create({
        clientScripts: ["/var/www/html/project/public/js/jquery-3.3.1.min.js"]
    });
    
    var fs = require('fs');
    
    casper.start('https://m.1xbet.co.ke/en/line/Football/', function () {
        var links = casper.evaluate(function () {
            $.expr[":"].contains = $.expr.createPseudo(function (arg) {
                return function (elem) {
                    return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
                };
            });
            return $("#events-betting").find("li.events__item_head:contains(World cup)");
        });
    
        var date = new Date(), year = date.getFullYear(), month = date.getMonth() + 1, day = date.getDate();
        var folderName = year + '-' + month + '-' + day;
    
        // loop would go here to save each file
        var path = "destination/" + folderName + "/1xbet/worldcup-1";
        fs.write(path + ".html", this.getHTML(), "w");
    
    });
    
    casper.run();
    

    我想点击Links对象上的各个项目——它们不是锚标记,而是带有内联javascript的可点击div,用于监听点击。

    目标是单击具有我感兴趣的特定文本的DIV,然后单击后,我可以选择擦除HTML并将其保存到文件中,或者获取当前的URL;对于我来说,这两者都可以。由于可以有多个具有所需文本的div,所以我希望有一种方法来循环遍历每个div并执行相同的操作。

    这是我感兴趣的页面示例:

    https://m.1xbet.co.ke/en/line/Football/

    在这种情况下,父元素是:事件下注和嵌套是带有可点击div的li标签列表。

    1 回复  |  直到 7 年前
        1
  •  1
  •   andromeda    7 年前

    我可以选择刮削HTML并将其保存到文件中 或获取当前URL

    当然,解决方案是非常具体的这个确切的网站,但再次它是相当正常的做网页刮。

    casper.start('https://m.1xbet.co.ke/en/line/Football/', function () {
    
      var links = casper.evaluate(function () {
    
        $.expr[":"].contains = $.expr.createPseudo(function (arg) {
          return function (elem) {
            return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
          };
        });
    
        var links = [];
        // Better to scrpape .events__title as it contains data-href attribute
        $("#events-betting").find(".events__title:contains(World cup)").each(function (i, item) {
          var lastPartOfurl = item.getAttribute("data-href");
          lastPartOfurl = lastPartOfurl.split("/");
          links.push("https://m.1xbet.co.ke/en/line/Football/" + item.getAttribute("data-champ") + "-" + lastPartOfurl[1]+'/');
        })
    
        return links;
      });
    
      console.log(links);
    });
    

    结果是:

    https://m.1xbet.co.ke/en/line/Football/1536237-FIFA-World-Cup-2018/,https://m.1xbet.co.ke/en/line/Football/1204917-FIFA-World-Cup-2018-Winner/,https://m.1xbet.co.ke/en/line/Football/1518431-FIFA-World-Cup-2018-Special-bets/,https://m.1xbet.co.ke/en/line/Football/1706515-FIFA-World-Cup-2018-Teams-Statistics-Group-Stage/