【问题标题】:How to write to CSV file in Javascript如何在 Javascript 中写入 CSV 文件
【发布时间】:2014-07-23 16:09:37
【问题描述】:

我有一个脚本(使用 PhantomJS)来测试加载网页需要多长时间。我想弄清楚的是如何将加载页面所花费的时间结果写入 .csv 文件。然后,如果我要再次重新运行测试以将另一个结果添加到 .csv 文件中。

代码:

var page = require('webpage').create(),
    system = require('system'),
    t, address;
var pageLoadArray = [];
var csvContents = "";
fs = require('fs');

if (system.args.length === 1) {
    console.log('Usage: loadspeed.js <some URL>');
    phantom.exit(1);
} else {
    t = Date.now();
    address = system.args[1];
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('FAIL to load the address');
        } 
        else {
            t = Date.now() - t;
            console.log('Page title is ' + page.evaluate(function () {
                return document.title;
            }));

            if(t>7000){
                console.log('Loading time was too long... ' + t + "msec");
                pageLoadArray.push(t);
                console.log(pageLoadArray.length);
                console.log(pageLoadArray[0]);
                //store the time value to the .csv file
                phantom.exit(1);
            }
            else{
                console.log('Loading time ' + t + ' msec');
                pageLoadArray.push(t);
                console.log(pageLoadArray.length);
                console.log(pageLoadArray[0]);
                //store the time value to the .csv file
            }
        }
        phantom.exit();
    });

}

【问题讨论】:

    标签: javascript csv jenkins phantomjs


    【解决方案1】:

    您可以在附加模式下使用fs 模块和write(path, content, mode) 方法。

    var fs = require('fs');
    fs.write(filepath, content, 'a');
    

    其中filepath 是字符串形式的文件路径,content 是包含您的 CSV 行的字符串。

    类似:

    address+";"+(new Date()).getTime()+";"+t
    

    【讨论】:

    • 使用节点 6.x,现在是 fs.writeFileSync(filepath,content,'a');
    • 哦,我的错,没有注意到它正在使用 PhantomJS。忘记我的评论吧。
    【解决方案2】:

    如果您可以控制 Jenkins 环境,则可以使用浏览器特定的方法之一来触发下载,如 This Question 中建议的那样

    function download(strData, strFileName, strMimeType) {
        var D = document,
            A = arguments,
            a = D.createElement("a"),
            d = A[0],
            n = A[1],
            t = A[2] || "text/plain";
    
        //build download link:
        a.href = "data:" + strMimeType + "charset=utf-8," + escape(strData);
    
        if (window.MSBlobBuilder) { // IE10
            var bb = new MSBlobBuilder();
            bb.append(strData);
            return navigator.msSaveBlob(bb, strFileName);
        } /* end if(window.MSBlobBuilder) */
    
        if ('download' in a) { //FF20, CH19
            a.setAttribute("download", n);
            a.innerHTML = "downloading...";
            D.body.appendChild(a);
            setTimeout(function() {
                var e = D.createEvent("MouseEvents");
                e.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                a.dispatchEvent(e);
                D.body.removeChild(a);
            }, 66);
            return true;
        }; /* end if('download' in a) */
    
        //do iframe dataURL download: (older W3)
        var f = D.createElement("iframe");
        D.body.appendChild(f);
        f.src = "data:" + (A[2] ? A[2] : "application/octet-stream") + (window.btoa ? ";base64" : "") + "," + (window.btoa ? window.btoa : escape)(strData);
        setTimeout(function() {
            D.body.removeChild(f);
        }, 333);
        return true;
    }
    

    也许你可以使用this URL SCM插件来获取下载。
    或者使用 Selenium 自动化一些事情并抓取下载文件

    【讨论】:

    • 我认为你在这里问错了问题。这不是下载问题。
    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2018-07-29
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多