casperjs не может загрузить CSV из приложения APEX - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь автоматизировать загрузку CSV-файла из приложения APEX.

var casper = require('casper').create({verbose: true, logLevel: "debug", viewportSize: { width: 1600, height: 400 } });
var url = "https://example.com"
casper.start(url);

casper.then(function () {
this.fill('#wwvFlowForm', {'P101_USERNAME': 'user', 'P101_PASSWORD': 'password'}, false);
});

casper.then(function () {
   this.click('#P101_LOGIN');
}).wait(5000).then(function () {
   this.echo('downloading file');
   this.download('https://example/apex/f?p=1002:173:10072525691961:CSV','report.csv')
});

casper.run();

Я могу войти в систему, но когда я пытаюсь скачать файл, я получаю html страницы входа.Я пытался использовать метод getBase64 с тем же результатом.Casper.download использует другой сеанс?Снимки экрана до и после загрузки показывают, что я вошел в систему.

1 Ответ

0 голосов
/ 18 июня 2018

Проблема заключалась в том, что это приложение Apex использует instance_id в URL, поэтому рабочий код:

var casper = require('casper').create({verbose: true, logLevel: "debug", 
viewportSize: { width: 1600, height: 400 } });
var url = "https://example.com"
casper.start(url);

casper.then(function () {
this.fill('#wwvFlowForm', {'P101_USERNAME': 'user', 'P101_PASSWORD': 'password'}, false);
});
casper.then(function () {
    this.click('#P101_LOGIN');
}).wait(5000).then(function () {
   this.echo('downloading file');
   var instance_id = this.getCurrentUrl().split(':')[3];
   var download_url = url + '/apex/f?p=1002:173:' + instance_id;
   this.download('download_url' + ':CSV','report.csv')
});

casper.run();
...