我想将访问网站、单击按钮和保存文件的过程自动化。在此站点上下载文件的唯一方法是单击按钮。您无法使用 URL 导航到该文件。
我一直在尝试使用 phantomjs 和 casperjs 来自动化这个过程,但没有取得任何成功。
我最近尝试在这里使用 brandon 的解决方案 Grab the resource contents in CasperJS or PhantomJS
这是我的代码
var fs = require('fs');
var cache = require('./cache');
var mimetype = require('./mimetype');
var casper = require('casper').create();
casper.start('http://www.example.com/page_with_download_button', function() {
});
casper.then(function() {
this.click('#download_button');
});
casper.on('resource.received', function (resource) {
"use strict";
for(i=0;i < resource.headers.length; i++){
if(resource.headers[i]["name"] == "Content-Type" && resource.headers[i]["value"] == "text/csv; charset-UTF-8;"){
cache.includeResource(resource);
}
}
});
casper.on('load.finished', function(status) {
for(i=0; i< cache.cachedResources.length; i++){
var file = cache.cachedResources[i].cacheFileNoPath;
var ext = mimetype.ext[cache.cachedResources[index].mimetype];
var finalFile = file.replace("."+cache.cacheExtension,"."+ext);
fs.write('downloads/'+finalFile,cache.cachedResources[i].getContents(),'b');
}
});
casper.run();
我认为问题可能是我的cachePath在cache.js中不正确导致的
exports.cachePath = 'C:/Users/username/AppData/Local/Ofi Labs/PhantomJS';
除了反斜杠之外,我还应该使用其他东西来定义路径吗?
当我尝试
casperjs --disk-cache=true export_script.js
没有下载任何东西。经过一些调试后,我发现 cache.cachedResources 总是空的。
我也愿意接受 phantomjs/casperjs 之外的解决方案。
更新
我不再试图用 CasperJS/PhantomJS 来完成这个。 我正在使用 dandavis 建议的 chrome 扩展 Tampermonkey。 Tampermonkey 非常容易识别。 我安装了 Tampermonkey,导航到带有下载链接的页面,然后单击 tampermonkey 下的新建脚本并添加了我的 javascript 代码。
document.getElementById("download_button").click();
现在,每次我在浏览器中导航到该页面时,都会下载该文件。然后我创建了一个看起来像这样的批处理脚本
set date=%DATE:~10,4%_%DATE:~4,2%_%DATE:~7,2%
chrome "http://www.example.com/page-with-dl-button"
timeout 10
move "C:\Users\user\Downloads\export.csv" "C:\path\to\dir\export_%date%.csv"
我使用 Windows 任务计划程序将该批处理脚本设置为每晚运行。
成功!
最佳答案
您的按钮很可能向服务器发出 POST 请求。 为了跟踪它:
- 在 Chrome developer tools 中打开网络 选项卡
- 导航到页面并点击按钮。
- 注意导致文件下载的请求。右键单击它并复制为 cURL
- 运行复制的 cURL
一旦 cURL 开始工作,您就可以使用 cron 或 Task Scheduler 来安排下载,具体取决于您使用的操作系统。
关于javascript - 自动从网站按钮单击每日 csv 文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36045745/