Phantomjs 从POST附件下载带有CasperJS的文件

Phantomjs 从POST附件下载带有CasperJS的文件,phantomjs,casperjs,Phantomjs,Casperjs,我几乎有这个工作,我只是不能下载文件时,它出现了。我做错了什么?当单击“下载销售报告”按钮时,CSV应该通过我的控制台下载。log()甚至从不触发 var casper = require('casper').create(); casper.start('http://www.waynecountyauditor.org/Reports.aspx?ActiveTab=Sales') .waitForText("Accept") .thenClick('#ctl00_ContentPlaceHo

我几乎有这个工作,我只是不能下载文件时,它出现了。我做错了什么?当单击“下载销售报告”按钮时,CSV应该通过我的控制台下载。log()甚至从不触发

var casper = require('casper').create();
casper.start('http://www.waynecountyauditor.org/Reports.aspx?ActiveTab=Sales')
.waitForText("Accept")
.thenClick('#ctl00_ContentPlaceHolder1_btnDisclaimerAccept')
.waitForText("View Sales")
.thenClick('#ctl00_ContentPlaceHolder1_WeeklySales_fvSalesReport_btnViewSales')
.waitForText("Download Sales Report")
.thenClick(x('//*[@id="ctl00_blSearchLinks"]/li[4]/a'))
.wait(1000)
.on('page.resource.received', function(resource) {
console.log('here');
if (resource.stage !== "end") {
    return;
}
if (resource.url.indexOf('results.csv') > -1) {
    this.download(resource.url, 'D:\Jobs\Currency\testing\ExportData.csv');
}

});
casper.run();

我终于明白了。瓦维洛夫拥有我所需要的99%。我只是缺少2个post变量。谢谢你的帮助,瓦维洛夫

    // http://stackoverflow.com/questions/33903418/downloading-a-file-with-casperjs-from-post-attachment
    var casper = require('casper').create({
        verbose: true,
        logLevel: 'debug',
        pageSettings: {
              loadImages:  false         // The WebPage instance used by Casper will
            , loadPlugins: false         // use these settings
            ,  userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4'
        }
    });
    var x = require('casper').selectXPath;
    var utils = require('utils');

    casper.on('remote.message', function(message) {
        this.echo('LOG: ' + message);
    });

    casper.start()
    .open('http://clintonoh.ddti.net/Reports.aspx?ActiveTab=Sales')
    .waitForText("Accept")
    .thenClick('#ctl00_ContentPlaceHolder1_btnDisclaimerAccept')
    .waitForText("View Sales")
    .thenClick('#ctl00_ContentPlaceHolder1_WeeklySales_fvSalesReport_btnViewSales')
    .waitForText("Download Sales Report", function(){

        // Adapted from: http://stackoverflow.com/questions/16144252/downloading-a-file-that-comes-as-an-attachment-in-a-post-request-response-in-pha
        var res = this.evaluate(function() {

            document.getElementById('__EVENTTARGET').value='ctl00$blSearchLinks' /* Was missing these 2 */
            document.getElementById('__EVENTARGUMENT').value='4'

            var res={};
            f=document.getElementById("aspnetForm");
            var previous_onsubmit = f.onsubmit;
            f.onsubmit = function() {

                //previous_onsubmit();

                //iterate the form fields
                var post={};
                for(i=0; i<f.elements.length; i++) {
                   //console.log(f.elements[i].name + " = " + f.elements[i].value);
                   post[f.elements[i].name]=f.elements[i].value;
                }
                res.action = f.action;
                res.post = post;
                return false; //Stop form submission
            }

            // Trigger the click on the link.
            var link = document.evaluate('//*[@id="ctl00_blSearchLinks"]/li[5]/a', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
            try {

                var e = document.createEvent('MouseEvents');
                e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                link.dispatchEvent(e);

            } catch(error){
                console.log(error);
            }

            return res; //Return the form data to casper
        });

        //Start the download
        casper.download(res.action, "./ExportData.csv", "POST", res.post);    
        //casper.capture("./image.png");    

    })

    casper.run();
//http://stackoverflow.com/questions/33903418/downloading-a-file-with-casperjs-from-post-attachment
var casper=require('casper')。创建({
没错,
日志级别:“调试”,
页面设置:{
loadImages:false//Casper使用的网页实例将
,loadPlugins:false//使用这些设置
,userAgent:'Mozilla/5.0(Macintosh;Intel Mac OS X 10_7_5)AppleWebKit/537.4(KHTML,类似Gecko)Chrome/22.0.1229.94 Safari/537.4'
}
});
var x=require('casper')。选择XPath;
var utils=require('utils');
casper.on('remote.message',函数(message){
this.echo('LOG:'+消息);
});
casper.start()
.open('http://clintonoh.ddti.net/Reports.aspx?ActiveTab=Sales')
.waitForText(“接受”)
。然后单击(“#ctl00_content placeholder 1_btnDisclaimerAccept”)
.waitForText(“查看销售”)
。然后单击(“#ctl00_content placeholder 1_WeeklySales_fvSalesReport_btnViewSales”)
.waitForText(“下载销售报告”,函数()){
//改编自:http://stackoverflow.com/questions/16144252/downloading-a-file-that-comes-as-an-attachment-in-a-post-request-response-in-pha
var res=this.evaluate(函数(){
document.getElementById(“UU事件目标”).value='ctl00$blSearchLinks'/*缺少这2个*/
document.getElementById(“UU事件参数”).value='4'
var res={};
f=document.getElementById(“aspnetForm”);
var previous_onsubmit=f.onsubmit;
f、 onsubmit=函数(){
//上一次提交();
//迭代表单字段
var post={};

对于(i=0;i我经过长时间的RD终于得到了答案,我们可以使用
下载
节点模块下载附件,如下所示

const fs = require('fs');

const download = require('download');

download('http://unicorn.com/foo.pdf').then(data => {
    fs.writeFileSync('dist/foo.pdf', data);
});`

您是否在最后一次
然后单击
然后单击
回调之前尝试注册到“page.resource.received”或在
然后单击
回调的内部?我想您的意思是这样的?不,这也不起作用。
。然后单击(x('/*[@id=“ctl00\blSearchLinks”]/li[4]/a'),function(){casper.on('page.resource.received',function(resource)){console.log('here'),而是下载页面的地址。因此最好这样做:`if(resource.contentType.indexOf('text/csv')>-1){this.download(resource.url,./ExportData.csv');}“但是它也不起作用,因为要接收文件,你必须发布表单,而casper.download默认会得到它。我试图适应用POST下载,但由于某些原因,它就是不起作用:请求只会重新加载页面。正在进行的工作:如果我们能从CasperJS/PhantomJS获得原始响应体就好了。谢谢你查看它。我已经试着去适应我能找到的几乎每一个答案,我一直在努力。希望我们能得到一些东西。