我對CasperJS比較新,寫過簡單的抓取腳本,現在我處於一種更加困難的任務:我想從URL列表中抓取某些數據,但是有些頁面有時會「失敗」,我有一個驗證碼解析服務,因爲這些頁面中的一些默認情況下有captcha,但是phantomjs在渲染驗證碼時有點不一致,有時會加載,有時卻不會。重新運行casperjs腳本
我認爲的解決方案是重新運行帶有未能加載驗證碼的頁面的腳本,以獲得我需要的數據量。但我似乎沒有得到它的運行,我想創建一個函數與整個事情,然後在方法調用它,並檢查是否刮數據量滿足最低我需要如果不重新運行,但我不'我真的知道如何完成它,至於我見過的casperjs在調用函數之前將這些步驟添加到堆棧中(糾正我,如果我錯了)。此外,我正在考慮使用run.complete
事件,但不知道如何去做。我的腳本是這樣的:
// This variable stores the amount of data collected
pCount = 0;
urls = ["http://page1.com","http://page2.com"];
// Create casperjs instance...
casper.start();
casper.eachThen(urls, function(response) {
if (pCount < casper.cli.options.number) {
casper.thenOpen(response.data, function(response) {
// Here is where the magic goes on
})
}
})
casper.run();
反正是有,我可以在一個功能包住casper.eachThen()
塊做這樣的事情?
casper.start();
function sample() {
casper.eachThen(urls, function(response) {
if (pCount < casper.cli.options.number) {
casper.thenOpen(response.data, function(response) {
// Here is where the magic goes on
})
}
})
}
casper.run(sample);
而且,我嘗試使用slimerjs發動機,以避免「不一致」,但我不能設法得到工作__utils__.sendAjax()
方法casper.evaluate()
我裏面,所以這是一個致命弱點。或者有沒有辦法在一個單獨的實例中異步執行GET請求?如果是的話,我將不勝感激您的意見
更新:我從來沒有設法與casperjs解決這個問題,我仍然發現我的特定使用情況的解決方法,檢查我的答案爲更多信息
嗯,我再次看到這個問題,並且[這個主題]可能幫助(http://stackoverflow.com/questions/23891143/casperjs-how-to-repeat-a-step-x-times-onwaittimeout)您。 – Fanch