簡體   English   中英

C# WebClient - 從 URI 獲取 HTML 而不是從 OBIEE 獲取 CSV

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM