Greasy Fork

Greasy Fork is available in English.

网页内容转Markdown(内容优化版)

提取网页主要文章内容并转换为 Markdown 格式,避免垃圾内容干扰

当前为 2024-12-24 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         网页内容转Markdown(内容优化版)
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  提取网页主要文章内容并转换为 Markdown 格式,避免垃圾内容干扰
// @author       YourName
// @match        *://*/*
// @grant        GM_setClipboard
// @require      https://cdnjs.cloudflare.com/ajax/libs/turndown/7.1.1/turndown.min.js
// @run-at       context-menu
// ==/UserScript==

(function () {
    'use strict';




        // 初始化 Turndown
        const turndownService = new TurndownService();

        // 自定义代码块规则
        turndownService.addRule('codeBlock', {
            filter: function (node) {
                return (
                    node.nodeName === 'PRE' ||
                    (node.nodeName === 'CODE' && node.parentNode.nodeName !== 'PRE')
                );
            },
            replacement: function (content, node) {
                return `\n\`\`\`\n${node.textContent}\n\`\`\`\n`;
            },
        });

        // 自动检测主要内容
        const contentElement = detectMainContent();
        if (!contentElement) {
            alert('未检测到主要内容,请手动检查网页结构。');
            return;
        }

        // 提取内容并转换为 Markdown
        const contentHTML = contentElement.innerHTML;
        const markdown = turndownService.turndown(contentHTML);

        // 显示结果
        const resultDiv = document.createElement('div');
        resultDiv.innerHTML = `
            <textarea style="width: 90%; height: 300px;">${markdown}</textarea>
            <button id="copyMarkdown" style="margin-top: 10px; padding: 10px;">复制到剪贴板</button>
        `;
        resultDiv.style.position = 'fixed';
        resultDiv.style.top = '20%';
        resultDiv.style.left = '5%';
        resultDiv.style.width = '90%';
        resultDiv.style.zIndex = '10000';
        resultDiv.style.backgroundColor = '#fff';
        resultDiv.style.border = '1px solid #ccc';
        resultDiv.style.borderRadius = '5px';
        resultDiv.style.boxShadow = '0 0 10px rgba(0,0,0,0.2)';
        resultDiv.style.padding = '20px';
        resultDiv.style.overflowY = 'auto';
        document.body.appendChild(resultDiv);

        // 添加复制到剪贴板功能
        document.getElementById('copyMarkdown').addEventListener('click', () => {
            GM_setClipboard(markdown);
            alert('Markdown 已复制到剪贴板');
            document.body.removeChild(resultDiv); // 自动关闭弹窗
        });


    // 自动识别主要内容的方法
    function detectMainContent() {
        // 优先选择 <article> 标签
        let mainContent = document.querySelector('article');
        if (mainContent) return mainContent;

        // 检查常见的内容容器
        const selectors = [
            '#content',           // 通用内容容器
            '.article',           // 常见文章类
            '.post',              // 博客文章
            '.main-content',      // 主内容类
            '.entry-content',     // Wordpress 常用类
        ];
        for (const selector of selectors) {
            mainContent = document.querySelector(selector);
            if (mainContent) return mainContent;
        }

        // 尝试直接返回 body 的主要部分
        return document.body;
    }
})();