GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 225|回复: 19
收起左侧

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

[复制链接] |关注本帖

GM活动员

组件大师

『召唤好运的角笛』河豚寿司荧光水母

     楼主| 咸鱼鱼 发表于 6 小时前 | 显示全部楼层 |阅读模式 <
    本帖最后由 咸鱼鱼 于 2025-12-27 05:31 编辑

    最近在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.1
    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 baseUrl = currentUrl.split('&page=')[0];
    74.             const pageUrl = `${baseUrl}&page=${pageNum}`;

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

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

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

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

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

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

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

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

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

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

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

    评分

    参与人数 3血液 +5 追随 +3 堕落 +2 收起 理由
    reober3 + 5 + 1 + 1 三连献上
    荫尸人 + 1
    哇啦哇啦 + 1 + 1 圣诞快乐

    查看全部评分

    回复

    使用道具 举报

    荧光水母百相千面-戏艾吉奥岛田半藏诺克提斯·路西斯·伽拉姆萨菲罗斯岛田源氏BIG BOSS康纳/ConnorDoc

      2302594 发表于 5 小时前 | 显示全部楼层 <
      回复

      使用道具 举报

        wsnbb250 发表于 5 小时前 | 显示全部楼层 <
        回复

        使用道具 举报

        漂洋小船冒险用指南针破损的旧书人鱼之泪雪王的心脏苏格兰圆脸胖鸡[Pro Max]丛林的鸟飞走了不曾寄出的信件幽灵竹筒『随时随地开启!』

          凯诺斯 发表于 3 小时前 | 显示全部楼层 <
          回复

          使用道具 举报

          鎏彩万幢阿列克西欧斯(Alexios)克莱夫・罗兹菲尔德尼克‧贝特曼百相千面-晦自由羅素·托維离去的尤利西斯

            李苏 发表于 3 小时前 | 显示全部楼层 <
            回复

            使用道具 举报

            『还乡歌』双重身份雄躯的昇格约翰-117贝优妮塔发条八音盒远行雾都血医

              davidliau 发表于 3 小时前 | 显示全部楼层 <
              回复

              使用道具 举报

              缘起星空虚空之海的鲸

                you9632587 发表于 3 小时前 | 显示全部楼层 <
                回复

                使用道具 举报

                牧羊人海螺号角土豆发芽了黄色就是俏皮

                  长衫赵纸龙 发表于 3 小时前 | 显示全部楼层 <
                  回复

                  使用道具 举报

                  金钱马车The End人鱼之泪破损的旧书元灵化法杖启程赛博朋克2077

                    哇啦哇啦 发表于 3 小时前 | 显示全部楼层 <
                    回复

                    使用道具 举报

                    呆猫元灵化法杖隔墙有眼里昂‧S‧甘乃迪不灭的蓝宝石风雪之家召唤古代战士

                      点击输入文字 发表于 3 小时前 | 显示全部楼层 <
                      回复

                      使用道具 举报

                        火可神刺 发表于 2 小时前 | 显示全部楼层 <
                        回复

                        使用道具 举报

                        炽焰咆哮虎裸体克里斯弗雷迪玩偶果体76发条八音盒猫化弩哥王者之盾自定义男从Homunculus肥皂

                          油漆王 发表于 2 小时前 | 显示全部楼层 <
                          回复

                          使用道具 举报

                          肉乖乖旧日支配者—克苏鲁業火死鬥魔法不朽·传奇不熄十年一梦炙热的格拉迪欧拉斯卡洛斯·奥利维拉男巫之歌永浴爱河虚空之海的鲸

                            Burry 发表于 2 小时前 | 显示全部楼层 <
                            回复

                            使用道具 举报

                            海螺号角血石远古石碑寻觅特殊-家园卫士Ⓛ特殊-家园卫士Ⓡ

                              thesametime 发表于 2 小时前 | 显示全部楼层 <
                              回复

                              使用道具 举报

                              荧光水母河豚寿司『召唤好运的角笛』鎏彩万幢女巫之路虚空之海的鲸永远的克叔業火死鬥实现梦想官复原职

                                娱乐法师火布偶 发表于 1 小时前 | 显示全部楼层 <
                                回复

                                使用道具 举报

                                收到情书没有梦想的咸鱼永远的克叔Dante我的路从时间蜿蜒而出卡利亚权杖炽天使之拥月亮提灯破碎的圣水瓶被释放的灵魂

                                  时间之朔 发表于 1 小时前 | 显示全部楼层 <
                                  回复

                                  使用道具 举报

                                  羽毛胸针隔墙有眼漂洋小船龙腾世纪:审判赛博朋克2077都市:天际线2火斑喵不灭狂雷

                                    LionHeart 发表于 1 小时前 | 显示全部楼层 <
                                    回复

                                    使用道具 举报

                                    禽兽扒手相约于群星流行巨星GMHoney Bee黑暗封印龙头的宝玉

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

                                      使用道具 举报

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

                                        icery521 发表于 24 分钟前 | 显示全部楼层 <
                                        回复

                                        使用道具 举报

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

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

                                          使用道具 举报

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

                                          本版积分规则

                                          关闭

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

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

                                          GMT+8, 2025-12-27 11:47 , Processed in 0.214689 second(s), 142 queries , Redis On.

                                          Copyright © 2013-2025 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表