Javascript 循环浏览可单击元素列表,并将html写入相应的文件
我使用jQuery获取包含某些关键字的元素列表。我能够获得元素列表,但我不知道如何循环遍历每个元素,单击其子元素并下载新加载的页面。以下是我目前掌握的casperjs代码: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
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它对这个网站和类似的网站都有效。你真的帮了我大忙。有些站点没有数据属性,允许我构建类似的输出,但至少我在这个解决方案中已经完成了一半。再一次,非常感谢您的投入。