2015-01-20 33 views
1

我剛開始使用CasperJS,所以我很困擾一個問題。CasperJS截圖不同的網址

我想要做的是加載一個URL(登錄保護),找到一個鏈接列表(它改變了論壇的主題,具體是這個部分:「.styleChooser .overlayScroll li a」),點擊其中的每一個並在兩個分辨率點擊後截屏頁面的結果。

我的代碼目前只是圍繞網絡的其他建議,試圖讓這個工作,但我相信所有必要的代碼基本上是我不能得到它的工作。任何幫助將非常感謝!

var casper = require("casper").create(); 

var screenshotUrl = "URL Here"; 
var screenshotPaths = "rivals"; 

function getLinks() { 
    var links = document.querySelectorAll('.styleChooser .overlayScroll li a'); 
    links = Array.prototype.map.call(links,function(link){ 
    return link.getAttribute('href'); 
    }); 
    return links; 
} 

screenshotNow = new Date(), 
screenshotDateTime = screenshotNow.getFullYear() + pad(screenshotNow.getMonth() + 1) + pad(screenshotNow.getDate()), 
viewports = [ 
{ 
    'name': 'smartphone-portrait', 
    'viewport': {width: 320, height: 480} 
}, 
{ 
    'name': 'desktop-standard', 
    'viewport': {width: 1280, height: 1024} 
} 
]; 
i = -1; 

casper.start(); 

casper.setHttpAuth('Username', 'Password'); 

casper.thenOpen(screenshotUrl, function(response) { 
    var linksArray = this.evaluate(getLinks); 
    this.eachThen(linksArray, function(response) { 
    var url = response.data; 
    this.each(viewports, function(casper, viewport) { 
     this.then(function() { 
     this.viewport(viewport.viewport.width, viewport.viewport.height); 
     }); 
     this.thenOpen(url, function() { 
     this.wait(5000); 
     }); 
     casper.then(function(){ 
     casper.echo('Screenshot for '+ screenshotPaths + '/' + "homepage " + viewport.name + ' (' + viewport.viewport.width + 'x' + viewport.viewport.height + ')', 'info'); 
     casper.capture('screenshots/' + screenshotPaths + '/' + screenshotDateTime + '/' + "homepage" + '/' + viewport.name + '-' + viewport.viewport.width + 'x' + viewport.viewport.height + '.png', { 
      top: 0, 
      left: 0, 
      width: viewport.viewport.width, 
      height: viewport.viewport.height 
     }); 
     }); 
    }); 
    }); 
    ++i; 
}); // error is here 
casper.run(); 

function pad(number) { 
    var r = String(number); 
    if (r.length === 1) { 
    r = '0' + r; 
    } 
    return r; 
} 

這是錯誤:

C:\xampp\htdocs\caspertest>casperjs newestcasper.js 
CasperError: You can only define a step as a function 
    C:/casperjs/modules/casper.js:1755 in then 
    C:/xampp/htdocs/caspertest/newestcasper.js:52 
Unsafe JavaScript attempt to access frame with URL about:blank from frame with U 
RL file:///C:/casperjs/bin/bootstrap.js. Domains, protocols and ports must match 
. 
+0

我不認爲這是它,但你應該嘗試與'this.each'回調中的命名一致。或者將兩個'this'換成casper,或者將一個'casper'換成'this'。 – 2015-01-20 22:50:48

+0

感謝您的提示,我一定會解決這個問題。 – 2015-01-20 23:10:04

回答

1

如果你想打開你要採取的截圖的頁面,你應該使用thenOpen。現在,你使用then這只是一個步驟功能,沒有打開任何東西。

casper.thenOpen(screenshotUrl, function(response) { 
+0

感謝一大堆Artjom,它擺脫了我所遇到的錯誤。但是現在我沒有輸出,只是簡單地運行。有沒有我可以添加的任何代碼給你一個更具體的輸出,以瞭解發生了什麼,錯誤日誌類型的事情也許? – 2015-01-20 23:23:24

+0

我不明白爲什麼會這樣。請註冊['resource.error'](http://docs.casperjs.org/en/latest/events-filters.html#resource-error),['casper.page.onResourceTimeout'](http:/ /phantomjs.org/api/webpage/handler/on-resource-timeout.html),['remote.message'](http://docs.casperjs.org/en/latest/events-filters.html#remote-消息)和['page.error'](http://docs.casperjs.org/en/latest/events-filters.html#page-error)事件。也許有錯誤。 – 2015-01-21 06:47:40

+0

對不起,作爲一個noob,但我應該在哪裏運行這些事件? – 2015-01-21 17:46:27