咸鱼鱼 发表于 2025-12-27 05:29:57

【垃圾圣女】TT1069帖子提取工具

本帖最后由 咸鱼鱼 于 2025-12-27 05:31 编辑

最近在TT1069看小说,有些喜欢的文想复制存下来

但是直接复制有乱码,于是看了一下代码
乱码以白色文字的形式出现在以下地方
<font class="jammer">.*?<\/font>
<span style="display:none">.*?<\/span>
全局替换一下即可

又因为有些帖子好几页,于是弄了一个直接下载所有页数的
记得点击只看作者下载,
不过因为作者可能还会聊天互动什么的,下载完了还是要删一删
如果你还需要修改其他功能
找AI改比我快

@Name
@name
@match
@match

// ==UserScript==
// @name         多页帖子提取器
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description提取多页postmessage内容,过滤乱码,使用页面标题
// @author       You
// @match      https://www.tt1069.com/bbs/forum.php?mod=viewthread*
// @match      https://www.tt1069.com/bbs/thread-*
// @grant      GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    // 创建按钮
    const btn = document.createElement('button');
    btn.innerHTML = '提取全部内容';
    btn.style.cssText = `
      position: fixed;
      top: 20px;
      right: 20px;
      z-index: 9999;
      padding: 10px;
      background: #2196F3;
      color: white;
      border: none;
      border-radius: 5px;
      cursor: pointer;
    `;
    document.body.appendChild(btn);

    // 获取标题
    function getTitle() {
      const titleElement = document.querySelector("#thread_subject");
      return titleElement ? titleElement.textContent.trim() : document.title;
    }

    // 过滤乱码
    function cleanText(text) {
      return text
            .replace(/<font class="jammer">.*?<\/font>/g, '')
            .replace(/<span style="display:none">.*?<\/span>/g, '')
            .replace(/<[^>]*>/g, '')
            .replace(/&lt;/g, '<')
            .replace(/&gt;/g, '>')
            .replace(/&nbsp;/g, ' ')
            .trim();
    }

    // 获取总页数
    function getTotalPages() {
      const pageElement = document.querySelector("#pgt > div > div > label > span");
      if (pageElement) {
            const title = pageElement.getAttribute('title');
            if (title && title.includes('頁')) {
                const match = title.match(/(\d+)/);
                return match ? parseInt(match) : 1;
            }
      }
      return 1;
    }

    // 获取当前页面内容
    function getCurrentPageContent() {
      const elements = document.querySelectorAll('');
      let content = '';

      elements.forEach((el, i) => {
            const cleanContent = cleanText(el.innerHTML);
            if (cleanContent) {
                content += `=== 第${i + 1}楼 ===\n${cleanContent}\n\n`;
            }
      });

      return content;
    }

    // 获取其他页面内容
    function getPageContent(pageNum, currentTotalPosts) {
      return new Promise((resolve) => {
            const currentUrl = window.location.href;
            const baseUrl = currentUrl.split('&page=');
            const pageUrl = `${baseUrl}&page=${pageNum}`;

            GM_xmlhttpRequest({
                method: "GET",
                url: pageUrl,
                onload: function(response) {
                  const parser = new DOMParser();
                  const doc = parser.parseFromString(response.responseText, "text/html");
                  const elements = doc.querySelectorAll('');
                  let content = '';

                  elements.forEach((el, i) => {
                        const cleanContent = cleanText(el.innerHTML);
                        if (cleanContent) {
                            const floorNumber = currentTotalPosts + i + 1;
                            content += `=== 第${floorNumber}楼 ===\n${cleanContent}\n\n`;
                        }
                  });

                  resolve({
                        content: content,
                        postCount: elements.length
                  });
                },
                onerror: function() {
                  resolve({ content: '', postCount: 0 });
                }
            });
      });
    }

    // 点击事件
    btn.addEventListener('click', async function() {
      btn.innerHTML = '提取中...';
      btn.disabled = true;

      const title = getTitle();
      const totalPages = getTotalPages();
      let allContent = `标题:${title}\n总页数:${totalPages}\n\n`;

      // 获取当前页面内容
      const currentPageContent = getCurrentPageContent();
      allContent += currentPageContent;

      // 计算当前页面已处理的帖子数量
      const currentPagePosts = document.querySelectorAll('').length;
      let totalProcessedPosts = currentPagePosts;

      // 获取其他页面内容
      for (let page = 2; page <= totalPages; page++) {
            const result = await getPageContent(page, totalProcessedPosts);
            allContent += result.content;
            totalProcessedPosts += result.postCount;
      }

      // 添加统计信息
      allContent += `\n=== 统计 ===\n总楼层数:${totalProcessedPosts}\n提取时间:${new Date().toLocaleString()}`;

      // 下载文件
      const blob = new Blob(, { type: 'text/plain;charset=utf-8' });
      const a = document.createElement('a');
      a.href = URL.createObjectURL(blob);
      a.download = `${title}.txt`;
      a.click();

      btn.innerHTML = '提取全部内容';
      btn.disabled = false;
    });
})();

2302594 发表于 2025-12-27 05:48:38

这种乱码本质也算是一种防盗措施吧

wsnbb250 发表于 2025-12-27 06:45:07

哇好牛啊,之前有想保存的小说就是复制了之后有乱码完全看不了

凯诺斯 发表于 2025-12-27 07:52:01

直接下载所有页数方便很多呀,不用一页一页的弄:loveliness:

李苏 发表于 2025-12-27 08:06:13

学会了。之前真是各种复制,慢慢删

davidliau 发表于 2025-12-27 08:10:35

好工具,我可以來拿存長篇了

you9632587 发表于 2025-12-27 08:10:53

有了这么方便的扒文脚本泥潭文学区帖子应该能更多吧

长衫赵纸龙 发表于 2025-12-27 08:12:58

好方便的工具欸 以后遇到好看的文章可以一步到位了

哇啦哇啦 发表于 2025-12-27 08:36:59

好用,之前存文的时候都是手动删乱码的(不堪回首),谢谢分享

点击输入文字 发表于 2025-12-27 08:45:27

https://img.gamemale.com/album/202512/21/025159lywkirfumgftwuww.jpeg好耶,以后存文就不用自己手动一点一点删惹{:6_167:}

油漆王 发表于 2025-12-27 09:08:18

之前因为懒得保存,痛失了帅同的很多好文。好东西啊!

Burry 发表于 2025-12-27 09:15:20

这个插件对多页数的帖子提取特别方便呢,谢谢分享。

thesametime 发表于 2025-12-27 09:21:57

虽然但是tt1069是什么网站?想要看小说楼主能分享下么?

娱乐法师火布偶 发表于 2025-12-27 09:47:35

一键式下载所有内容真是非常方便了

时间之朔 发表于 2025-12-27 10:07:32

感觉能看到更多TT上搬运下来的优质文章了呢

LionHeart 发表于 2025-12-27 10:45:12

确实好牛呢,终于有人解决这个问题了,不用一页页弄了

reober3 发表于 2025-12-27 11:14:18

ai工具出来以后删乱码方便多了,之前搜的一些工具教程还素有点理解成本的,感谢分享~

icery521 发表于 2025-12-27 11:22:53

代码小白还是不懂怎么办:Q

毛茸茸兽兽 发表于 2025-12-27 11:34:42

挺有用的(´×ω×`)咱以前都是一个个删,弄得都烦了,记得泥潭一些小说还是直接带着这些代码当预览的

赴约波波 发表于 2025-12-27 11:57:49

真的挺不错呢,估计能方便不少搬文的坛友,不过搬文之前最好先找作者授权
页: [1] 2 3 4
查看完整版本: 【垃圾圣女】TT1069帖子提取工具