如何使用casperjs下载没有url的文件

时间:2015-06-02 12:10:01

标签: javascript download event-handling casperjs

我正在尝试使用casperjs下载csv文件,但我得到了html页面的代码。

我找不到事件处理程序,所以我不知道如何获取文件!下面是html代码,显示的图像是单击它时,下载了一个csv文件。我搜索了javascript文件,但我没有找到任何与此图像相关的内容(例如,单击图像时调用的函数)

<p align=right>
<input type="image" name="ctl00$ExportCSV" id="ctl00_ExportCSV" title="Export data to CSV file" src="images/csv.png" style="border-width:0px;" />
</p>

我尝试了以下代码,但没有成功! :(

casper.on('resource.received', function(resource) {
   if (resource.stage !== "end") {
      console.log("resource.stage !== 'end'");
      return;
   }
   if (resource.url.indexOf('ExportData.csv') > -1) {
      console.log("Downloading csv file");
      var fs = require('fs');
      casper.download(resource.url, fs.workingDirectory+'/ExportData.csv');
   }
});

如何下​​载文件?非常感谢!!

1 个答案:

答案 0 :(得分:0)

首先,casper.download()将前两个参数作为'String url'和'String target'。这里的'字符串目标'是您要下载的资源的名称,而不是您希望下载到的地方的名称,这就是我认为您将其解释为自从您使用fs.workingDirectory作为“字符串目标”的一部分的地方。 “请参阅casper.download() here的使用示例并仔细查看。

此外,似乎在你发布的html代码中你试图下载一个.png文件名csv.png,而不是一个真正的.csv文件 - 但这可能是我的误解。如果您要下载.png文件,请使用casper.captureSelector,如here所示。

我相信您正在尝试使用this回答中的代码,因此我有一条最后的建议可以让您的代码正常运行。您似乎复制粘贴了代码,因此我必须确保:只有'ExportData.csv'实际上是您的资源名称时,行if (resource.url.indexOf('ExportData.csv') > -1) {才会起作用。使用行console.log( resource.header )检查资源的名称。该名称也应该是您的“字符串目标”。

我希望这有帮助!