Переберите список интерактивных элементов и запишите html в соответствующие файлы. - PullRequest
0 голосов
/ 29 мая 2018

Я использую 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();

Я бы хотел щелкнуть по отдельным элементам в объекте ссылок - они не являются тегами привязки, а скорее являются активируемыми элементами div со встроенным прослушиванием javascript длящелчок.

Цель состоит в том, чтобы щелкнуть по элементу div, в котором есть интересующий меня текст, а затем щелкнув по нему, я могу либо выбрать очистку HTML-кода и сохранить его в файле, либо получить текущий URL-адрес.;либо будет хорошо для моих целей.Поскольку с нужным текстом может быть несколько div-ов, я бы хотел зациклить каждый из них и выполнить одну и ту же операцию.

Это пример страницы, которая мне интересна:

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

Родительский элемент в этом случае: # события-ставки и вложенный - это список тегов li с интерактивными элементами div.

1 Ответ

0 голосов
/ 01 июня 2018

Я могу либо выбрать очистить 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/
...