遍歷鏈接列表我試圖使用Casperjs從頁面獲取鏈接列表,然後打開每個鏈接,並向這些數組中添加特定類型的數據頁面。Casperjs使用casper.each
我遇到的問題是在每個列表項上執行的循環。
首先,我從原始頁面獲得listOfLinks
。這部分工作和使用長度,我可以檢查這個列表是否填充。
但是,如下所示使用循環語句this.each
,沒有任何控制檯語句顯示出來,並且casperjs似乎跳過該塊。
用標準for循環替換this.each
,執行只是部分通過第一個鏈接,因爲語句「在x.html中創建對象的新數組」會出現一次,然後代碼停止執行。使用IIFE不會改變這一點。
編輯:在詳細調試模式下會發生以下情況:
Creating new array object for https://example.com
[debug] [phantom] Navigation requested: url=about:blank, type=Other, willNavigate=true, isMainFrame=true
所以出於某種原因傳遞到thenOpen功能的URL被改爲空白......
我覺得有一些關於Casperjs的異步性質,我不是在這裏掌握的,希望能夠指出一個實際的例子。
casper.then(function() {
var date = Date.now();
console.log(date);
var object = {};
object[date] = {}; // new object for date
var listOfLinks = this.evaluate(function(){
console.log("getting links");
return document.getElementsByClassName('importantLink');
});
console.log(listOfLinks.length);
this.each(listOfLinks, function(self, link) {
var eachPageHref = link.href;
console.log("Creating new array in object for " + eachPageHref);
object[date][eachPageHref] = []; // array for page to store names
self.thenOpen(eachPageHref, function() {
var listOfItems = this.evaluate(function() {
var items = [];
// Perform DOM manipulation to get items
return items;
});
});
object[date][eachPageHref] = items;
});
console.log(JSON.stringify(object));
});
添加了另一個答案應該真正解決您的腳本中的所有問題。 – Vaviloff