// ==UserScript== // @name 小红书帖子内容下载为TXT // @namespace http://tampermonkey.net/ // @version 1.0 // @description 在页面右上角添加按钮,点击后提取帖子内容并下载为TXT文件 // @author schweigen // @match *://*.xiaohongshu.com/* // @grant none // @run-at document-end // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/533415/%E5%B0%8F%E7%BA%A2%E4%B9%A6%E5%B8%96%E5%AD%90%E5%86%85%E5%AE%B9%E4%B8%8B%E8%BD%BD%E4%B8%BATXT.user.js // @updateURL https://update.greasyfork.icu/scripts/533415/%E5%B0%8F%E7%BA%A2%E4%B9%A6%E5%B8%96%E5%AD%90%E5%86%85%E5%AE%B9%E4%B8%8B%E8%BD%BD%E4%B8%BATXT.meta.js // ==/UserScript== (function() { 'use strict'; // 创建右上角下载按钮 const downloadBtn = document.createElement("button"); downloadBtn.innerText = "下载帖子TXT"; // 设置按钮样式(固定定位于右上角) Object.assign(downloadBtn.style, { position: "fixed", top: "10px", right: "10px", zIndex: "9999", padding: "8px 12px", backgroundColor: "#007bff", color: "#fff", border: "none", borderRadius: "4px", cursor: "pointer", boxShadow: "0 2px 6px rgba(0,0,0,0.2)" }); document.body.appendChild(downloadBtn); // 从帖子中提取内容文本的函数 function extractPostContent() { // 尝试获取帖子主体所在的容器 const descContainer = document.getElementById("detail-desc"); if (!descContainer) { alert("未找到帖子内容,请确认页面已加载完毕!"); return null; } // 这里直接取 innerText,包含了所有的文本信息 return descContainer.innerText || descContainer.textContent; } // 点击按钮时执行下载动作 downloadBtn.addEventListener("click", function() { const content = extractPostContent(); if (!content) return; // 创建一个 Blob 对象保存文本内容 const blob = new Blob([content], { type: "text/plain;charset=utf-8" }); // 动态创建一个临时链接用于下载 const downloadLink = document.createElement("a"); downloadLink.href = URL.createObjectURL(blob); // 文件名可以使用页面标题或固定名称 const filename = (document.title || "xiaohongshu_post") + ".txt"; downloadLink.download = filename; document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); // 释放 URL 对象 setTimeout(() => { URL.revokeObjectURL(downloadLink.href); }, 1000); }); })();