CasperJS-如何打开链接数组中的所有链接
CasperJS - How to open up all links in an array of links
我正在努力让CasperJS打开array
链接中的每个链接。我有它,这样在我打开一个链接后,它会显示该页面的标题。然而,当我运行它时,什么都没有显示。
我可以使用for loop
来显示链接,它工作得很好。
这是我刚才解释的代码:
var x;
casper.start(URL, function() {
x = links.split(" "); // now x is an array of links
for (var i = 0; j < x.length; i++) // for every link...
{
casper.thenOpen(partialURL + x[i], function() { // open that link
console.log(this.getTitle() + ''n'); // display the title of page
});
}
this.exit();
});
casper.run();
这是我尝试过的另一种方法:
var x;
casper.start(URL, function() {
x = links.split(" "); // now x is an array of links
this.exit();
});
for (var i = 0; j < x.length; i++) // for every link...
{
casper.thenOpen(partialURL + x[i], function() { // open that link
console.log(this.getTitle() + ''n'); // display the title of page
});
}
casper.run();
它说"x"是未定义的。请注意,我将x设置为全局变量。你能做的任何修改都会很棒。谢谢
var x; var i = -1;
casper.start(URL, function() {
x = links.split(" "); // now x is an array of links
});
casper.then(function() {
this.each(x, function() {
i++; // change the link being opened (has to be here specifically)
this.thenOpen((partialURL + x[i]), function() {
this.echo(this.getTitle()); // display the title of page
});
});
});
casper.run();
var i = 0;
var nTimes = x.length;
casper.repeat(nTimes, function() {
//... do your stuff
i++;
});
为我工作。
casper.start('about:blank');
var urls = ['http://google.fr', 'http://yahoo.fr', 'http://amazon.fr'];
casper.each(urls, function(casper, url) {
casper.thenOpen(url, function() {
this.echo("I'm in your " + url + ".");
});
});
在我的情况下,我不得不抓取一个页面数量未知的网站。每个页面(除了最后一个)都有一个<a class="next-page" href="/page/N">Next page</a>
链接(其中N
是页码)。除了"下一页"链接不再存在之外,刮刀无法知道它何时完成。
当然,您必须根据页面上可能存在的分页链接类型进行调整。
以下是我所做的。Ymmv。
// imports
var fs = require('fs');
// scraper state
var state = {page: 1, data: []};
// casper
var casper = require("casper").create();
// scraper function
function scrape() {
this.echo('Scraping page ' + state.page + '...', 'INFO');
state.data = state.data.concat(this.evaluate(function() {
// get some stuff from the page
return someData;
});
var nextUrl = this.evaluate(function() {
var nextLink = document.querySelector("a.next-page");
return nextLink && nextLink.href;
});
if (nextUrl) {
state.page = state.page + 1;
casper.thenOpen(nextUrl, scrape); // <- recursion
}
});
// run
casper.run(function() {
fs.write('./data.json', JSON.stringify(state.data, null, ''t'), 'w');
this.echo('Done!', 'INFO');
});
希望这能帮助到别人。如果你还有其他问题,我很乐意帮忙。
casper.start();
casper.each(Object.keys(array), function(casper, array_elem) {
this.thenOpen(partialURL+array[attay_item], function() {
...
};
至于"未定义"错误。尽量不要用太多。我经常在CasperJS中遇到这种错误,所以我更喜欢写casper而不是这个。
试试这样的方法。
var x;
casper.start(URL, function() {
x = links.split(" "); // now x is an array of links
});
casper.then(function() {
this.eachThen(x, function(response) {
this.thenOpen((partialURL + response.data), function() {
this.echo(this.getTitle()); // display the title of page
});
});
});
casper.run();
未定义x
,因为for循环在casper.start
之前执行。在上面的代码中,eachThen()
块嵌套在casper.then
块内部,以便延迟其执行。
我用这个代码解决了同样的问题:
casper.then(function () {
var i = -1;
this.eachThen(locations, function () {
i++;
//Do stuff here like for example:
this.thenOpen(YOUR_URL, function () {
this.waitForSelector("MYSELECTOR",
function () {
},
function () {
})
});
})
});
相关文章:
- Javascript排序索引链接数组
- 如何在不链接/jquery的情况下使用方法应用css属性数组
- 如何通过分配单个变量来减少此脚本中的链接数
- Javascript组将键值链接到数组中
- 序列promise链与数组数据,如何解析promise链
- 如何在jquery中链接多组动画
- Javascript:如何加入所有链接(数组)
- 是否可以将函数链接到数组
- 链接到数组中的对象的 Javascript 对象引用
- 基于相同键链接数组数据
- 带范围的数字的角度链接数组
- 如何返回整个网站的超链接数和ID
- CasperJS-如何打开链接数组中的所有链接
- 在jQuery中更改链接数组的文本
- 数组排序创建链接数组
- 将复选框链接到数组项
- JavaScript链接数组
- 在javascript中生成深度对象中所有属性链的数组
- 如何按链接对链接数组进行排序
- 当我迭代图像链接数组并使用innerHTML显示它们时,为什么IMG标记不能工作?