[英]C# WebClient - Getting an HTML from URI instead of CSV from OBIEE
按照這個帖子:
C# WebClient - 從 URI 而不是 CSV 獲取 HTML _
問題是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 中嘗試以下代碼:
casper.start('URL').thenEvaluate(
function(){
data= datos;
});
casper.run(function() {
this.echo('my data:' + data);
this.exit(); });
但我想我錯了,我需要知道如何獲得網頁的最后結果。
我用 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.