C# WebClient - Получение HTML из URI вместо CSV из OBIEE - PullRequest
0 голосов
/ 21 июня 2020

После этого сообщения:

C# WebClient - Получение HTML из URI вместо CSV _

Проблема в том, что csv был скомпилирован с javascript в браузере. В том же сообщении рекомендуется использовать Casper js, но есть варианты, использующие c# или как можно использовать casper js для получения csv от OBIEE?

У кого-то есть пример?

Дополнительная информация:

Я нашел веб-страницу со следующими ссылками: xls, xml, csv

Когда я cli c каждая ссылка получает файл .csv, например, но если я попытаюсь использовать WebClient c# a got HTML с функциями javascript, я понял, что страница представляет собой что-то вроде шаблона со следующими функциями:

массив заполнены данными, которые мне нужны:

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#, я получаю этот HTML только с кодом javascript ... Я пытался использовать «Casper JS», но получаю тот же результат и не знаю, как вызвать функцию "загрузить" или получить переменную "datos".

Я попробую в Casper JS следующий код:

casper.start('URL').thenEvaluate(
function(){
    data= datos;
});

casper.run(function() {
    this.echo('my data:'    + data);
    this.exit();        });

Но я думаю, что ошибаюсь и мне нужно чтобы знать, как получить последний результат веб-страницы.

1 Ответ

0 голосов
/ 23 июня 2020

Я решаю свою проблему с помощью Casper JS, это не идеальное решение, а решение. Я отбрасываю код, чтобы получить переменную «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
...