// ==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
// @downloadURL https://update.greasyfork.icu/scripts/521684/%E7%BD%91%E9%A1%B5%E5%86%85%E5%AE%B9%E8%BD%ACMarkdown%EF%BC%88%E5%86%85%E5%AE%B9%E4%BC%98%E5%8C%96%E7%89%88%EF%BC%89.user.js
// @updateURL https://update.greasyfork.icu/scripts/521684/%E7%BD%91%E9%A1%B5%E5%86%85%E5%AE%B9%E8%BD%ACMarkdown%EF%BC%88%E5%86%85%E5%AE%B9%E4%BC%98%E5%8C%96%E7%89%88%EF%BC%89.meta.js
// ==/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 = `
`;
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() {
// 优先选择 标签
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;
}
})();