web-article-extractor

Web Article Extractor

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "web-article-extractor" with this command: npx skills add dongbeixiaohuo/writing-agent/dongbeixiaohuo-writing-agent-web-article-extractor

Web Article Extractor

使用 Chrome DevTools MCP 服务器从网页中提取干净的文章内容,支持绕过常见的安全限制。

快速开始

前置条件

确保已配置 chrome-devtools MCP 服务器:

添加 chrome-devtools 服务器(带安全绕过参数)

claude mcp add chrome-devtools npx -y chrome-devtools-mcp@latest --
--disable-blink-features=AutomationControlled
--disable-web-security
--disable-features=IsolateOrigins,site-per-process

基本使用流程

// 1. 获取标签页 const context = await tabs_context_mcp({ createIfEmpty: true }); const tabId = context.availableTabs[0].tabId;

// 2. 导航到目标页面 await navigate({ tabId, url: targetUrl });

// 3. 等待页面加载 await javascript_tool({ tabId, action: "javascript_exec", text: new Promise(r => { if (document.readyState === 'complete') r(); else window.addEventListener('load', r); }) });

// 4. 使用 Readability 提取(推荐) const readabilityScript = await fs.readFile( '~/.claude/skills/web-article-extractor/scripts/readability_extractor.js', 'utf8' );

const result = await javascript_tool({ tabId, action: "javascript_exec", text: readabilityScript });

const article = JSON.parse(result);

微信公众号专用流程

微信公众号有多层安全防护,需要特殊处理:

完整提取脚本

async function extractWeChatArticle(articleUrl) { // 1. 连接到浏览器 const tabs = await tabs_context_mcp({ createIfEmpty: true }) const tabId = tabs.availableTabs[0].tabId

// 2. 设置微信 User-Agent(关键步骤) await javascript_tool({ tabId, action: "javascript_exec", text: Object.defineProperty(navigator, 'userAgent', { get: () => 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.38(0x18002633) NetType/WIFI Language/zh_CN' }); 'User-Agent set to WeChat'; })

// 3. 导航到文章页面 await navigate({ tabId, url: articleUrl })

// 4. 等待页面加载完成 await javascript_tool({ tabId, action: "javascript_exec", text: await new Promise((resolve) => { const check = () => { const content = document.querySelector('#js_content, .rich_media_content') if (content && content.innerText.length > 100) { resolve() } else if (document.readyState === 'complete') { setTimeout(resolve, 2000) } else { setTimeout(check, 100) } } check() }) 'Content loaded'; })

// 5. 提取文章内容 const article = await javascript_tool({ tabId, action: "javascript_exec", text: ` (() => { const titleEl = document.querySelector('#activity-name, .rich_media_title') const title = titleEl ? titleEl.innerText.trim() : document.title

    const authorEl = document.querySelector('#js_name, .rich_media_meta_text')
    const author = authorEl ? authorEl.innerText.trim() : ''

    const dateEl = document.querySelector('#publish_time, .publish_time')
    const publishTime = dateEl ? dateEl.innerText.trim() : ''

    const contentEl = document.querySelector('#js_content, .rich_media_content')
    let content = ''
    if (contentEl) {
      const clone = contentEl.cloneNode(true)
      clone.querySelectorAll('script, style, noscript').forEach(el => el.remove())
      content = clone.innerText.trim()
    }

    const images = Array.from(document.querySelectorAll('#js_content img'))
      .map(img => img.getAttribute('data-src') || img.src)
      .filter(src => src && !src.includes('placeholder'))

    return JSON.stringify({
      title,
      author,
      publishTime,
      content,
      images,
      url: window.location.href,
      wordCount: content.length
    }, null, 2)
  })()
`

})

return JSON.parse(article) }

提取方法选择

本技能提供三种提取方法:

Readability.js(推荐) - Mozilla 的成熟提取算法,处理复杂布局更准确

  • 详细说明:references/readability-guide.md

  • 配置选项:references/config-options.md

简化算法 - 自定义轻量级算法,速度更快但准确度稍低

  • 使用脚本:scripts/extract_article.js

自定义选择器 - 针对特定平台的选择器

  • 平台指南:references/platform-specific.md

输出格式

Markdown 格式

文章标题

作者: 作者名称 发布时间: 2024-01-15

文章正文内容...


来源:链接

JSON 格式

{ "title": "文章标题", "author": "作者名称", "publishDate": "2024-01-15", "content": "完整文章内容...", "images": ["url1", "url2"], "metadata": { "url": "https://example.com/article", "wordCount": 1500, "readTime": 5 } }

进阶主题

  • 最佳实践与优化:references/best-practices.md

  • 特定平台处理:references/platform-specific.md

  • Readability 详解:references/readability-guide.md

  • 配置选项:references/config-options.md

常见问题

Q: 如何处理需要登录的内容?

A: 使用已登录的浏览器实例,或者在代码中实现登录流程。

Q: 微信文章显示"请在微信中打开"?

A: 需要设置微信 User-Agent(见上面的微信专用流程)。

Q: 如何提高提取成功率?

A: 使用最新版本的 Chrome DevTools MCP,设置正确的启动参数,模拟真实浏览器行为。

技术栈

  • Chrome DevTools MCP - 浏览器控制和页面操作

  • Readability.js v0.6.0 - Mozilla 文章提取算法

  • 自定义提取器 - 特殊网站支持(微信、知乎等)

版本更新

v2.0.0 (2025-12-28)

  • 升级 Readability.js 至 v0.6.0

  • 新增 isProbablyReaderable 快速预检测

  • 增强 SEO 元数据提取

  • 完善文档结构

v1.0.0 (2025-11-15)

  • 初始版本

  • 集成 Mozilla Readability.js

  • 支持微信公众号

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

style-modeler

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

workflow-producer

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

title-designer

No summary provided by upstream source.

Repository SourceNeeds Review