C# WebClient - 从 URI 获取 HTML 而不是从 OBIEE 获取 CSV
Posted
技术标签:
【中文标题】C# WebClient - 从 URI 获取 HTML 而不是从 OBIEE 获取 CSV【英文标题】:C# WebClient - Getting an HTML from URI instead of CSV from OBIEE 【发布时间】:2020-06-21 15:39:11 【问题描述】:关注这篇文章:
C# WebClient - Getting an html from URI instead of CSV_
问题在于 csv 是在浏览器中使用 javascript 编译的。在同一篇文章中,推荐使用 Casperjs,但也有使用 c# 的选项,或者如何使用 casperjs 从 OBIEE 获取 csv?
有人有这样的例子吗?
其他信息:
我找到了一个包含以下链接的网页: xls、xml、csv
例如,当我单击每个链接时,将获取 .csv 文件,但如果我尝试使用 WebClient c# 获取带有 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()
下载功能,似乎是用所选格式的数据重写当前页面的内容:
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;");
如果我使用 WebClient c# 选项,我只使用 javascript 代码获取此 HTML...我尝试使用“CasperJS”但我得到相同的结果,我不知道如何调用“下载”函数或者可能是获取“datos”变量。
我将在 CasperJS 中尝试以下代码:
casper.start('URL').thenEvaluate(
function()
data= datos;
);
casper.run(function()
this.echo('my data:' + data);
this.exit(); );
但我觉得我错了,我需要知道如何获得 webpate 的最后结果。
【问题讨论】:
您没有从 WebClient 获取 CSV。您将获得一个 HTML 响应,其中响应的正文包含 csv。所以你已经得到了 HTML。 嗨,我有一个 HTML 代码,但它具有生成输出文件(csv、xml)的 javascript 函数,我找到了一个包含使用这些转换函数的值的数组,我可以抓取它,但我读了可能使用“casperjs”来预处理(我怀疑)URL并直接获取CSV文件的另一篇文章......但我需要一些帮助来了解如何使用“casperjs”来做到这一点:) 如果您进行预处理而不是直接获取数据?您正在处理数据,不会直接获取。预处理和直接作为 OPOSITE。你不能两者都做。 我添加了“附加信息” 【参考方案1】:我用 CasperJS 解决了我的问题,这不是理想的解决方案,但它是一个解决方案。我抓取了代码以获取变量“datos”(带有数据的数组):
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();
使用上面的代码,我在控制台中获取 CSV,我将输出重定向到 Windows 中的文件,并使用命令行创建一个 BATCH 文件。比如:
casperjs.exe sample.js > result.csv
【讨论】:
以上是关于C# WebClient - 从 URI 获取 HTML 而不是从 OBIEE 获取 CSV的主要内容,如果未能解决你的问题,请参考以下文章
无法从 C# Rest 服务获取 WebClient.UploadFile
使用 C# 以编程方式向 MVC 控制器验证 Azure Ad/OpenId 并获取重定向 uri