2013-12-22 38 views
0

爲什麼download()在我的腳本中不起作用?爲什麼casperjs download()函數不起作用?

即使冗長,也無法下載並顯示無錯誤。

var casper = require('casper').create({ 
    verbose: true, 
    logLevel: "debug", 
    pageSettings: { 
     webSecurityEnabled: false 
    } 
}); 

casper.start('https://developer.android.com/sdk/index.html', function() { 

    var url = this.evaluate(function() { 
     var selector = '#win-tools'; 
     return __utils__.findOne(selector).getAttribute('href'); 
    }); 

    this.download(url, 'apps/android-sdk.exe'); 

}); 

casper.run(); 

它應該工作,我不明白。

回答

1

確保你設置了一個userAgent。我還在評估中使用了Javascript而不是__utils__。我測試過,它的工作原理如下:

var casper = require("casper").create ({ 
    waitTimeout: 5000, 
    stepTimeout: 5000, 
    verbose: true, 
    viewportSize: { 
    width: 1400, 
    height: 768 
    }, 
    pageSettings: { 
    webSecurityEnabled: false 
    }, 
    onWaitTimeout: function() { 
     this.echo('** Wait-TimeOut **'); 
    }, 
    onStepTimeout: function() { 
     this.echo('** Step-TimeOut **'); 
    } 
}); 

casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4'); 

casper.start('https://developer.android.com/sdk/index.html'); 

casper.then(function() { 
    var url = this.evaluate(function() { 
     var selector = document.getElementById('win-tools'); 
      return selector.getAttribute('href'); 
    }); 
    this.echo('URL: ' + url); 
    this.download(url, 'apps/android-sdk.exe'); 
}); 

casper.run(function() { 
    this.echo('Done.').exit(); 
}); 
+0

對不起。它不適合我。你有沒有嘗試下載一個更大的文件?我認爲phantomjs無法下載超過x秒。因爲我的連接速度可能比你慢,所以它不適用於我,但與你同在。 – user3064931

+0

您嘗試下載的文件有多大?你可以改變[waitTimeout](http://casperjs.readthedocs.org/en/latest/modules/casper.html#onwaittimeout)和[stepTimeout](http://docs.casperjs.org/en/latest/modules/ casper.html#onsteptimeout)腳本如果超時。儘可能詳細地提供。 –

3

我在使用內置casper.download()函數時也遇到了麻煩。

具體而言,casper.download()似乎隨機無法將檢索到的內容寫入磁盤。 (:附件內容處置)

這可能與此問題:https://github.com/n1k0/casperjs/issues/255

以下是我workaroud我已經當試圖下載作爲附件發送XML文件經歷過這樣的。我改變

casper.download(downlUrl, downlFileName); 

要:

fs.write(downlFileName, this.base64encode(downlUrl)), 'w'); 

現在,您將在其保存在文件系統上的64位編碼的文件結束。您可以使用諸如bash base64(http://linux.die.net/man/1/base64)之類的工具輕鬆將其轉換回其格式。

+0

這是如何寫入文件的內容?它不會只寫字符串網址嗎? –

+0

@SeanClark,直接從base64encode函數的文檔:「使用客戶端XMLHttpRequest同步使用base64算法編碼資源」。 (來源http://docs.casperjs.org/en/latest/modules/casper.html#base64encode) – simonemainardi

+0

它無論如何都無法正常工作。 PhantomJS的文件不能太大> 2MB。這是一個糟糕的問題 –

相關問題