2017-07-06 33 views
1

該函數應該提取所有錶行,但它不起作用。它沒有輸出。CasperJS,試圖刮表

var casper = require("casper").create({ 
pageSettings: { 
    userAgent: "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36" 
}, 
verbose: true, 
logLevel: 'debug' 
}); 


var url = 'http://cnt.rm.ingv.it/'; 
casper.start(url);// 
casper.waitForSelector('#dataTablesEvents', processPage, stopScript); 
casper.run(); 


var stopScript = function() { 
    casper.echo("STOPPING SCRIPT").exit(); 
}; 

var processPage = function() { 

    pageData = this.evaluate(getPageData); 

    if (this.exists('a[rel="next"]') == false) { 
     stopScript(); 
    } 

    this.thenClick('a[rel="next"]').then(function() { 
     this.waitForSelector("#dataTablesEvents", processPage, stopScript); 
    }); 
}; 

function getPageData(){ 

    var rows = casper.evaluate(function(){ 
     return document.querySelectorAll("table tbody tr"); 
    }); 

    return rows; 
} 

我試着調試,這是結果:

[debug] [phantom] opening url: http://cnt.rm.ingv.it/, HTTP GET 
[debug] [phantom] Navigation requested: url=http://cnt.rm.ingv.it/, 
type=Other, willNavigate=true, isMainFrame=true 
[debug] [phantom] url changed to "http://cnt.rm.ingv.it/" 
[debug] [phantom] Successfully injected Casper client-side utilities 
[debug] [phantom] start page is loaded 
[info] [phantom] Step _step 3/3 http://cnt.rm.ingv.it/ (HTTP 200) 
[info] [phantom] Step _step 3/3: done in 945ms. 
[info] [phantom] waitFor() finished in 40ms. 
[info] [phantom] Done 3 steps in 1003ms 
[debug] [phantom] Navigation requested: url=about:blank, type=Other, 
willNavigate=true, isMainFrame=true 
[debug] [phantom] url changed to "about:blank" 

我不能夠理解好這個..這就像WaitForSelector不啓動..任何幫助嗎?

回答

0

這裏是一個辦法,應爲你工作:

var casper = require('casper').create(); 
var url = 'http://cnt.rm.ingv.it/'; 
var length; 

casper.start(url); 

casper.then(function() { 
    this.waitForSelector('table#dataTablesEvents'); 
}); 

function getCellContent(row, cell) { 
    cellText = casper.evaluate(function(row, cell) { 
     return document.querySelectorAll('table tbody tr')[row].childNodes[cell].innerText.trim(); 
    }, row, cell); 
    return cellText; 
} 

casper.then(function() { 
    var rows = casper.evaluate(function() { 
     return document.querySelectorAll('table tbody tr'); 
    }); 
    length = rows.length; 
    this.echo("table length: " + length); 
}); 

// This part can be done nicer, but it's the way it should work ... 
casper.then(function() { 
    for (var i = 0; i < length; i++) { 
     this.echo("Data: " + getCellContent(i, 1)); 
     this.echo("Magnitudo: " + getCellContent(i, 3)); 
     this.echo("Zona: " + getCellContent(i, 5)); 
     this.echo("Profondità: " + getCellContent(i, 7)); 
     this.echo("Latitudine: " + getCellContent(i, 9)); 
     this.echo("Longitudine: " + getCellContent(i, 11)); 
    } 
}); 

casper.run(); 
+0

它可以完美的感謝!你知道任何功能獲取數據並創建一個CSV文件? –