循环浏览可点击元素的列表,然后将HTML写入相应的文件[英] Loop through list of clickable elements and write out the html to respective files

问题描述

我正在使用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();

我想单击链接对象上的各个项目 - 它们不是锚标签,而是可单击的divs,inline javaScript收听.<​​/p>

目标是单击具有我感兴趣的某些文本的DIV,然后单击一旦单击,我可以选择刮擦HTML并将其保存在文件中或获取当前URL;出于我的目的,这两个都可以.由于可能有所需文本的多个Divs,因此我想一种循环循环并执行相同操作的方法.

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

https://m.1xbet.co.ke.ke/en/line/足球/

在这种情况下,父元素是:#events-betting and Nested是具有可单击divs的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/

本文地址:https://www.itbaoku.cn/post/1739878.html