使用 JavaScript/GreaseMonkey 存储到文件中

问题描述 投票:0回答:5

我已经使用 Greasemonkey 从页面捕获了数据列表。

GM脚本

var hit = GM_getValue("hit") || 0;
var _url = "http://localhost:8080/test?p=$$pageNo$$";
_url = _url.replace("$$pageNo$$", hit);
GM_setValue("hit", ++hit); 
if(hit <= 100) {
window.location.href = _url;
}

该脚本将运行第 n 次并捕获 <10K data, now i facing the issue in storing the captured data in some file. Anyone has any idea about how we can store the captured data into file/repo?

谢谢 - 维斯瓦纳坦 G

javascript greasemonkey
5个回答
21
投票

一个非常快速且简单的解决方案是使用 FileSaver.js
1) 将以下行添加到 Greasemonkey 脚本的 ==UserScript== 部分

// @require     https://raw.githubusercontent.com/eligrey/FileSaver.js/master/dist/FileSaver.min.js
  1. 将以下 2 行代码添加到 GM 脚本中

    var blob = new Blob(["你好,世界!"], {type: "text/plain;charset=utf-8"});

    saveAs(blob, "hello world.txt");
    此代码示例将显示一个对话框,用于下载名为“hello world.txt”的文件,其中包含文本“Hello, world!”。只需将其替换为您选择的文件名和文本内容即可!


14
投票

不,无法将其写入文件,但如果您真的很无聊,可以将其发布到 http://pastebin.com(或任何其他接受带有一堆数据的 POST 请求的 URL) .

GM_xmlhttpRequest({
  method: "POST",
  url: "http://pastebin.com/post.php",
  data: <your data here>,
  headers: {
    "Content-Type": "application/x-www-form-urlencoded"
  },
  onload: function(response) {
    alert("posted");
  }
});

请注意,您需要有一个pastebin帐户才能使用该API。


如果您确实需要将文件写入本地文件系统,请在桌面上运行Web服务器,然后将http PUT请求的结果保存到磁盘。


8
投票

我使用这个技巧从 Tampermonkey 脚本下载文件:

var saveData = (function () {
    var a = document.createElement("a");
    document.body.appendChild(a);
    a.style = "display: none";
    return function (data, fileName) {
        var blob = new Blob([data], {type: "octet/stream"});
        var url = window.URL.createObjectURL(blob);
        a.href = url;
        a.download = fileName;
        a.click();
        window.URL.revokeObjectURL(url);
    };
}());

然后调用它:

saveData("this data will be written in the file", "file.txt");

它的工作原理是创建一个隐藏元素并模拟该元素被单击。其行为就像用户单击下载链接一样,因此浏览器将下载该文件,并保存在浏览器放置下载文件的任何位置。


0
投票

是的,您可以写入文件。 但出于明显的安全原因,并非系统中的所有地方, 你可以在cookies目录中写入

  var cookie_name="YourCookie";
  var cookie_value="What you want to save inside your cookie";
  var d = new Date();
  d.setTime(d.getTime() + (28*24*60*60*1000));
  var expires = "expires="+ d.toUTCString();
  document.cookie = cookie_name +"=" + cookie_value + ";" + expires + ";path=/";

那么你可以

  • 编写一个从 cookie 目录到桌面的文件副本脚本,具体取决于 你的操作系统

  • 或从 Chrome Inspect -> Application -> Cookies 读取值

  • 或检索 Cookie 并使用

    在控制台中打印它

    decodeURIComponent(document.cookie);


0
投票
// @grant        GM_download

function saveData(data, filename) {
    const blob = new Blob([data], { type: "text/plain" });
    const url = URL.createObjectURL(blob);
    GM_download({
        url: url,
        name: filename,
        saveAs: false,
    });
}

saveData("hello world", "hello.txt");
© www.soinside.com 2019 - 2024. All rights reserved.