2013-10-16 57 views
0

我是Phantomjs的初學者,所以很多問題我都無法解決。你介意幫我解決這個問題嗎?我有關於通過Phantomjs獲取多個動態網址的問題。如何獲得多鏈接並在Phantomjs中關注這些鏈接?

實施例:

- 我的index.html是:

<!DOCTYPE html> 
<html> 
<body> 
<h1>Homepage</h1> 
<ul> 
    <li><a href="laptop.html">Laptop</a></li> 
    <li><a href="tablet.html">Tablet</a></li> 
</ul> 
</body> 
</html> 

- 我laptop.html文件(文件tablet.html作爲相同)爲:

<!DOCTYPE html> 
<html> 
<body> 
<h1>Laptop Page</h1> 
<div class="productRow">Product of Laptop 1</div> 
<div class="productRow">Product of Laptop 2</div> 
</body> 
</html> 

我想這樣打印:

Category Name: Laptop 
Product: Product of Laptop 1 
Product: Product of Laptop 2 
.... 

Category Name: Tablet 
Product: Product of Tablet 1 
Product: Product of Tablet 2 
... 

這意味着我想要得到這個網址的內容http://abc.com/test/。然後我會得到(UL LI A HREF)的鏈接。然後我會按照這些鏈接自動獲取他們的子頁面內容。

這是我的示例代碼由Phantomjs:

var page = require('webpage').create(); 
var url = 'http://localhost/test'; 

page.open(url, function() { 
    //Get parent link 
    var parent = page.evaluate(function() { 
     var test = document.querySelectorAll('li a'); 
     return Array.prototype.map.call(test, function(elem) { 
      return elem.href;  
     }); 
    }); 
    for(var i=0; i < parent.length; i++){ 
     //Print parent link 
     console.log("Parent link:" + parent[i]); 

     //Then open child link   
     page.open(parent[i],function(){   
      //console.log(document.title);   
      var child = page.evaluate(function() { 
       var test = document.querySelectorAll('div.productRow'); 
       return Array.prototype.map.call(test, function(elem) { 
        return elem.innerHTML;  
       }); 
      }); 
      console.log(child.length); 
      phantom.exit(); 
     }); 

    } 

}); 

爲什麼是執行console.log(child.length)= 0?你可以幫我嗎?謝謝你的幫助。

+0

你的python代碼在哪裏? –

回答

0

試試看,就像這樣,它應該工作。當然,我假設,parent數組已正確填充正確的鏈接。

var child = page.evaluate(function() { 
    return [].map.call(document.querySelectorAll('div.productRow'), function(div) { 
     return div.innerHTML; 
    }); 
});