Javascript C#WebClient-从URI获取HTML,而不是从OBIEE获取CSV
在这篇文章之后: _ 问题是csv是在浏览器中用javascript编译的。在同一篇文章中,推荐使用Casperjs,但也有使用c#的选项,或者如何使用Casperjs从OBIEE获得csv 有人举过这样的例子吗 其他信息: 我发现了一个包含以下链接的网页: xls、xml、csv 例如,当我点击每个链接时,我会得到一个.csv文件,但如果我尝试使用WebClient c#a,它会得到带有javascript函数的HTML,我知道该页面类似于一个具有以下函数的模板: 填充了我需要的数据的数组:Javascript C#WebClient-从URI获取HTML,而不是从OBIEE获取CSV,javascript,c#,csv,casperjs,obiee,Javascript,C#,Csv,Casperjs,Obiee,在这篇文章之后: _ 问题是csv是在浏览器中用javascript编译的。在同一篇文章中,推荐使用Casperjs,但也有使用c#的选项,或者如何使用Casperjs从OBIEE获得csv 有人举过这样的例子吗 其他信息: 我发现了一个包含以下链接的网页: xls、xml、csv 例如,当我点击每个链接时,我会得到一个.csv文件,但如果我尝试使用WebClient c#a,它会得到带有javascript函数的HTML,我知道该页面类似于一个具有以下函数的模板: 填充了我需要的数据的数组:
var datos = [];
函数填充该数组:
function llenaArreglo(){
var serie = new Array("12/01/1984", "18/01/1984", "DTF", "36,45%");
datos.push(serie);
。。。它对每个数据元组重复相同的代码(很有趣),填充数据数组
从请求中选择下载类型的函数:
function downloadByType(){
var type = gup("download_type", location.href);
if(type=="csv"){
downloadCsv()
}
if(type=="xml"){
downloadXml()
}
}
函数下载时,似乎要使用choosen格式的数据重新写入当前页面的内容:
function download(data, filename, type) {
var a = document.createElement("a"),
//textEncoder = new TextEncoder('utf-16');
//var contentEncoded = textEncoder.encode([data]);
file = new Blob([data], {type: type});
if (window.navigator.msSaveOrOpenBlob) // IE10+
window.navigator.msSaveOrOpenBlob(file, filename);
else { // Others
var url = URL.createObjectURL(file);
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
setTimeout(function() {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
}
以及csv格式的功能:
function downloadCsv(){
var dataCsv = "\ufeff"+"fecha_inicio;fecha_final;tasa_interes;valor_tasa\n";
for(var i=0; i<datos.length;i++){
serie = datos[i];
var fecha_inicio = serie[0];
var fecha_final = serie[1];
var tasa_interes = serie[2];
var valor_tasa = validarNulo(serie[3]);
dataCsv += fecha_inicio+";"+fecha_final+
";"+tasa_interes+
";"+valor_tasa+"\n";
}
download(dataCsv, "Tasas_captacion_semanales_DTF_CDT_TCC.csv", "data:text/txt;charset=windows-1252;");
}
但我觉得我错了,我需要知道如何获得网页的最后结果。我用CasperJS解决了我的问题,这不是理想的解决方案,但它是一个解决方案。我对代码进行了删减以获得变量“datos”(带数据的数组):
您无法从网络客户端获取CSV。您将得到一个HTML响应,其中响应体包含csv。所以你已经得到了HTML.hi,我得到了一个HTML代码,但是它有生成输出文件(csv,xml)的javascript函数,我发现了一个数组,其中的值使用了这些转换函数,我可以将其删除,但我在另一篇文章中读到,可以使用“casperjs”预处理(我使用它)URL并直接获取csv文件。。。但是我需要一些关于如何使用“casperjs”来实现这一点的帮助:)如果您正在进行预处理,那么如何直接获取数据呢?您正在处理数据,无法直接获取。预处理与直接相反。你不能两者都做。我已经添加了“附加信息”
casper.start('URL').thenEvaluate(
function(){
data= datos;
});
casper.run(function() {
this.echo('my data:' + data);
this.exit(); });
var casper = require('casper').create();
casper.start('uri', function() {
//this code copied from other post about casperjs
var myVarInCasper = this.evaluate(function() {
var myVarInBrowser;
myVarInBrowser = datos;
return myVarInBrowser;
});
var dataCsv = "\ufeff"+"col001;col002;col003;col003\n";
//the same code, copied from HTML
for(var i=0; i<myVarInCasper.length;i++){
serie = myVarInCasper[i];
var col1 = serie[0];
var col2 = serie[1];
var col4 = serie[2];
var col5 = serie[3];
dataCsv += col1+";"+col2+";"+col3+";"+col4+"\n";
}
this.echo(dataCsv);
});
casper.run();
casperjs.exe sample.js > result.csv