Javascript 循环浏览可单击元素列表,并将html写入相应的文件

Javascript 循环浏览可单击元素列表,并将html写入相应的文件,javascript,phantomjs,casperjs,Javascript,Phantomjs,Casperjs,我使用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('http

我使用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并执行相同的操作

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

本例中的父元素是:#events betting and nested是一个带有可单击div的li标记列表

我可以选择删除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/

@Vaviloff可能的复制品仍然没有找到前进的方向。任何帮助都将不胜感激。添加了几行以进一步清晰。我建议探索他们的API。看看这个,每次单击菜单项时都会生成这样的请求<代码>champ与菜单项中的
数据champ
相关。感谢您的回复。我会考虑API,但这只是我正在抓取的两个网站之一,并不是所有的API。这对这个网站应该有帮助。谢谢@Vaviloff它对这个网站和类似的网站都有效。你真的帮了我大忙。有些站点没有数据属性,允许我构建类似的输出,但至少我在这个解决方案中已经完成了一半。再一次,非常感谢您的投入。