GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 3151|回复: 72
收起左侧

[实用工具] 【垃圾圣女】TT1069帖子提取工具

  [复制链接] |关注本帖

GM活动员

组件大师

     楼主| 咸鱼鱼 发表于 2025-12-27 05:29:57 | 显示全部楼层 |阅读模式 <


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

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

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

    @Name
    @Name
    @match
    @match

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

    11. (function() {
    12.     'use strict';

    13.     // 创建按钮
    14.     const btn = document.createElement('button');
    15.     btn.innerHTML = '提取全部内容';
    16.     btn.style.cssText = `
    17.         position: fixed;
    18.         top: 20px;
    19.         right: 20px;
    20.         z-index: 9999;
    21.         padding: 10px;
    22.         background: #2196F3;
    23.         color: white;
    24.         border: none;
    25.         border-radius: 5px;
    26.         cursor: pointer;
    27.     `;
    28.     document.body.appendChild(btn);

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

    34.     // 过滤乱码
    35.     function cleanText(text) {
    36.         return text
    37.             .replace(/<font class="jammer">.*?<\/font>/g, '')
    38.             .replace(/<span style="display:none">.*?<\/span>/g, '')
    39.             .replace(/<[^>]*>/g, '')
    40.             .replace(/&lt;/g, '<')
    41.             .replace(/&gt;/g, '>')
    42.             .replace(/&nbsp;/g, ' ')
    43.             .trim();
    44.     }

    45.     // 获取总页数
    46.     function getTotalPages() {
    47.         const pageElement = document.querySelector("#pgt > div > div > label > span");
    48.         if (pageElement) {
    49.             const title = pageElement.getAttribute('title');
    50.             if (title && title.includes('頁')) {
    51.                 const match = title.match(/(\d+)/);
    52.                 return match ? parseInt(match[1]) : 1;
    53.             }
    54.         }
    55.         return 1;
    56.     }

    57.     // 获取当前页面内容
    58.     function getCurrentPageContent() {
    59.         const elements = document.querySelectorAll('[id^="postmessage"]');
    60.         let content = '';

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

    67.         return content;
    68.     }

    69.     // 获取其他页面内容
    70.     function getPageContent(pageNum, currentTotalPosts) {
    71.         return new Promise((resolve) => {
    72.             const currentUrl = window.location.href;
    73.             const url = new URL(currentUrl);
    74.             url.searchParams.set('page', pageNum);
    75.             const pageUrl = url.toString();

    76.             GM_xmlhttpRequest({
    77.                 method: "GET",
    78.                 url: pageUrl,
    79.                 onload: function(response) {
    80.                     const parser = new DOMParser();
    81.                     const doc = parser.parseFromString(response.responseText, "text/html");
    82.                     const elements = doc.querySelectorAll('[id^="postmessage"]');
    83.                     let content = '';

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

    91.                     resolve({
    92.                         content: content,
    93.                         postCount: elements.length
    94.                     });
    95.                 },
    96.                 onerror: function() {
    97.                     resolve({ content: '', postCount: 0 });
    98.                 }
    99.             });
    100.         });
    101.     }

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

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

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

    112.         // 计算当前页面已处理的帖子数量
    113.         const currentPagePosts = document.querySelectorAll('[id^="postmessage"]').length;
    114.         let totalProcessedPosts = currentPagePosts;

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

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

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

    129.         btn.innerHTML = '提取全部内容';
    130.         btn.disabled = false;
    131.     });
    132. })();
    复制代码

    评分

    参与人数 9血液 +25 追随 +9 堕落 +4 收起 理由
    MuHuang + 5 + 1 + 1 期待回复~
    亚洛斯 + 5 + 1 喜翻儿
    xu33 + 3 + 1 + 1
    被宽恕的色欲 + 1 + 1 圣诞快乐
    星之子 + 5 + 1 (*/ω\*)
    赴约波波 + 1 + 1 圣诞快乐
    reober3 + 5 + 1 + 1 三连献上
    荫尸人 + 1
    哇啦哇啦 + 1 + 1 圣诞快乐

    查看全部评分

    本帖被以下淘专辑推荐:

    回复

    使用道具 举报

    艾吉奥岛田半藏诺克提斯·路西斯·伽拉姆萨菲罗斯岛田源氏BIG BOSS康纳/ConnorDoc普隆普特·阿金塔姆亚当‧简森

      2302594 发表于 2025-12-27 05:48:38 | 显示全部楼层 <
      回复

      使用道具 举报

      奇怪的刮刮卡寻觅牧羊人风雪之家黄色就是俏皮【圣诞限定】心心念念小雪人新手蛋

        wsnbb250 发表于 2025-12-27 06:45:07 | 显示全部楼层 <
        回复

        使用道具 举报

        炼金之心『随时随地开启!』破损的旧书『随时随地开启!』雪王的心脏人鱼之泪苏格兰圆脸胖鸡[Pro Max]位面引航器不曾寄出的信件幽灵竹筒

          凯诺斯 发表于 2025-12-27 07:52:01 | 显示全部楼层 <
          回复

          使用道具 举报

          阿列克西欧斯(Alexios)离去的尤利西斯Chris Mazdzer鎏彩万幢克莱夫・罗兹菲尔德尼克‧贝特曼百相千面-晦鬼王酒吞童子

            李苏 发表于 2025-12-27 08:06:13 | 显示全部楼层 <
            回复

            使用道具 举报

            『还乡歌』塞拉斯物理学圣剑双重身份雄躯的昇格约翰-117双贤辉石头罩贝优妮塔

              davidliau 发表于 2025-12-27 08:10:35 | 显示全部楼层 <
              回复

              使用道具 举报

              缘起星空

                you9632587 发表于 2025-12-27 08:10:53 | 显示全部楼层 <
                回复

                使用道具 举报

                收到情书最终幻想XVI最终幻想XIV史蒂文·格兰特重生之境『炫目的铁塔』适当显灵

                  长衫赵纸龙 发表于 2025-12-27 08:12:58 | 显示全部楼层 <
                  回复

                  使用道具 举报

                  【圣诞限定】心心念念小雪人裸体克里斯You Can Pet Blaidd亭亭如盖金钱马车逆流『天圆地方』Amicus『炫目的铁塔』

                    哇啦哇啦 发表于 2025-12-27 08:36:59 | 显示全部楼层 <
                    回复

                    使用道具 举报

                    元灵化法杖揄人者冠冕『莲花宝灯』火玛瑙SCP-s-1889-第五页背带鸭能量和弦超人

                      点击输入文字 发表于 2025-12-27 08:45:27 | 显示全部楼层 <
                      回复

                      使用道具 举报

                      『住在GM村』揄人者冠冕凯登‧阿兰科炽焰咆哮虎火玛瑙杰森‧斯坦森裸体克里斯猫化弩哥雷夜嘯聲果体76

                        油漆王 发表于 2025-12-27 09:08:18 | 显示全部楼层 <
                        回复

                        使用道具 举报

                        業火死鬥魔法不朽·传奇不熄不舍的挽留帅气的本・比格十年一梦炽焰咆哮虎炙热的格拉迪欧拉斯永浴爱河男巫之歌虚空之海的鲸

                          Burry 发表于 2025-12-27 09:15:20 | 显示全部楼层 <
                          回复

                          使用道具 举报

                          打开又亿个礼物盒知识大典幼年独角兽救命饮料Amicus九尾妖狐·阿狸男用贞操带

                            thesametime 发表于 2025-12-27 09:21:57 | 显示全部楼层 <
                            回复

                            使用道具 举报

                            鎏彩万幢男巫之歌女巫之路虚空之海的鲸業火死鬥实现梦想官复原职缘起星空Zootopia丹雀衔五穗,人间始丰登

                              娱乐法师火布偶 发表于 2025-12-27 09:47:35 | 显示全部楼层 <
                              回复

                              使用道具 举报

                              传说之杖救命饮料成为蝙蝠侠北极星城市的站台(夜)棱霜靴光辉女郎永远的克叔Dante我的路从时间蜿蜒而出

                                时间之朔 发表于 2025-12-27 10:07:32 | 显示全部楼层 <
                                回复

                                使用道具 举报

                                人鱼之泪漂洋小船丛林的鸟飞走了冒险用指南针苏格兰圆脸胖鸡[Pro Max]幽灵竹筒攀缘藤男用贞操带月下的誓言最终幻想XIV

                                  LionHeart 发表于 2025-12-27 10:45:12 | 显示全部楼层 <
                                  回复

                                  使用道具 举报

                                  众志成城鎏彩万幢适当显灵火玛瑙『莲花宝灯』

                                    reober3 发表于 2025-12-27 11:14:18 | 显示全部楼层 <
                                    ai工具出来以后删乱码方便多了,之前搜的一些工具教程还素有点理解成本的,感谢分享~
                                    回复

                                    使用道具 举报

                                    【新手友好】昆進眼镜蛇图腾猎鹰图腾寻觅尤利西斯小菜鸟GM論壇榮譽勛章山猫图腾

                                      icery521 发表于 2025-12-27 11:22:53 | 显示全部楼层 <
                                      回复

                                      使用道具 举报

                                      我的天使GM吸血伯爵吃饱金币的Doge苏格兰圆脸胖鸡小小舞台守卫: 坚守眼位永浴爱河肉垫手套御医神兔『搓粉团珠』

                                        毛茸茸兽兽 发表于 2025-12-27 11:34:42 | 显示全部楼层 <
                                        挺有用的(´×ω×`)咱以前都是一个个删,弄得都烦了,记得泥潭一些小说还是直接带着这些代码当预览的
                                        回复

                                        使用道具 举报

                                        揄人者冠冕『莲花宝灯』火玛瑙神秘商店贵宾卡救命饮料杰森‧斯坦森刺杀者匕首猩红魔鹫位面引航器史莱姆牧场

                                          赴约波波 发表于 2025-12-27 11:57:49 | 显示全部楼层 <
                                          回复

                                          使用道具 举报

                                          您需要登录后才可以回帖 登录 | 立即注册

                                          本版积分规则

                                          关闭

                                          站长公告上一条 /1 下一条

                                          文字版|手机版|小黑屋|GameMale

                                          GMT+8, 2026-4-28 15:02 , Processed in 0.153269 second(s), 149 queries , Redis On.

                                          Copyright © 2013-2026 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表