Python自动化:3分钟搞定微信收藏链接批量导出到TXT(附完整代码)
Python自动化:3分钟搞定微信收藏链接批量导出到TXT(附完整代码)
每次打开微信收藏夹,看到堆积如山的文章链接却无从下手?作为技术爱好者,我们完全可以用Python让这个繁琐过程变得优雅。今天要分享的不仅是一个脚本,更是一套模拟人类操作的完整解决方案——无需破解微信协议,绕过防自动化检测,真正实现"无痛"批量导出。
1. 为什么需要自动化导出微信收藏?
微信收藏夹像是个"数字黑洞"——我们不断往里扔链接,却很少真正消化它们。手动操作导出100条链接需要:
- 右键点击每条收藏
- 选择"复制链接地址"
- 切换窗口粘贴到文本文件
- 重复以上步骤...
按照每次操作5秒计算,100条链接需要8分钟不间断操作。而使用我们的Python脚本:
# 示例:单条链接处理时间 manual_time_per_link = 5 # 秒 auto_time_per_link = 0.3 # 秒 links_count = 100 total_manual = links_count * manual_time_per_link / 60 # 转换为分钟 total_auto = links_count * auto_time_per_link / 60 print(f"手动操作需{total_manual:.1f}分钟,自动化仅需{total_auto:.1f}分钟")输出结果:
手动操作需8.3分钟,自动化仅需0.5分钟2. 核心工具链与技术选型
这套方案采用模拟操作+OCR辅助的双保险策略:
| 技术组件 | 作用 | 替代方案 | 优势对比 |
|---|---|---|---|
| PyAutoGUI | 鼠标/键盘模拟 | selenium | 无需浏览器驱动 |
| Baidu OCR API | 识别收藏标题 | Tesseract | 中文识别准确率高 |
| OpenCV | 图像预处理 | PIL | 处理速度更快 |
| pyperclip | 剪贴板操作 | 无 | 必需组件 |
提示:百度OCR免费版每日有500次调用限额,对大多数用户完全够用
安装所需库只需一行命令:
pip install pyautogui baidu-aip opencv-python numpy pyperclip3. 完整代码实现与逐行解析
以下是经过实战检验的增强版脚本,新增了异常重试机制和速度调节:
import pyautogui from aip import AipOcr import pyperclip import cv2 import numpy as np import time import random # 配置区域 ================================ APP_ID = '你的百度APP_ID' API_KEY = '你的百度API_KEY' SECRET_KEY = '你的百度SECRET_KEY' # 坐标配置(需根据自己屏幕调整) COORDINATES = { 'first_item': (400, 100), # 第一条收藏位置 'copy_btn': (450, 200), # 复制按钮位置 'delete_btn': (450, 225), # 删除按钮位置 'confirm_btn': (900, 550) # 删除确认按钮 } OUTPUT_FILE = 'weixin_links.txt' DELAY_RANGE = (0.1, 0.3) # 随机延迟范围 # ======================================== def human_click(pos, button='left'): """模拟人类点击:随机延迟+微小位移""" x, y = pos pyautogui.moveTo(x + random.randint(-2, 2), y + random.randint(-2, 2), duration=random.uniform(0.1, 0.3)) pyautogui.click(button=button) time.sleep(random.uniform(*DELAY_RANGE)) def capture_title_area(): """捕获标题区域图像""" timestamp = time.strftime("%Y%m%d%H%M%S") img = pyautogui.screenshot(region=[360, 80, 1340, 120]) # x,y,w,h img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR) filename = f"temp_{timestamp}.png" cv2.imwrite(filename, img) return filename def extract_text(image_path, client): """使用百度OCR提取文字""" with open(image_path, 'rb') as f: result = client.basicAccurate(f.read()) return ' '.join([item['words'] for item in result['words_result']]) def process_single_item(client, count): """处理单条收藏""" try: # 右键点击收藏项 human_click(COORDINATES['first_item'], 'right') # 点击复制链接 human_click(COORDINATES['copy_btn']) link = pyperclip.paste() # 捕获标题区域 img_path = capture_title_area() title = extract_text(img_path, client) # 删除已处理的收藏 human_click(COORDINATES['first_item'], 'right') human_click(COORDINATES['delete_btn']) human_click(COORDINATES['confirm_btn']) return title, link except Exception as e: print(f"处理失败: {str(e)}") return None, None if __name__ == '__main__': # 初始化OCR客户端 ocr_client = AipOcr(APP_ID, API_KEY, SECRET_KEY) processed_count = 0 with open(OUTPUT_FILE, 'a', encoding='utf-8') as f: while True: title, url = process_single_item(ocr_client, processed_count) if not title: print("未检测到有效收藏,程序终止") break f.write(f"{title}\t{url}\n") f.flush() # 实时写入 processed_count += 1 print(f"已处理 {processed_count} 条: {title[:20]}...") # 随机暂停防止检测 time.sleep(random.uniform(0.5, 1.5))关键改进点:
- 人类行为模拟:加入随机延迟和微小鼠标位移
- 容错机制:自动跳过处理异常的收藏项
- 实时保存:处理一条保存一条,避免数据丢失
- 速度调节:通过DELAY_RANGE参数控制操作速度
4. 实战避坑指南
在50+次实际运行中,总结出这些血泪经验:
4.1 坐标校准技巧
- 使用PyAutoGUI的显示功能获取准确坐标:
import pyautogui print(pyautogui.displayMousePosition()) - 微信窗口必须保持固定位置(建议最大化)
- 不同分辨率屏幕需要调整region参数
4.2 防封禁策略
微信会检测自动化操作,建议:
- 每次操作间隔加入随机延迟
- 模拟人类操作的不精确性(如鼠标微小偏移)
- 单次运行不要处理超过200条收藏
- 最佳实践:分多次运行,间隔2小时以上
4.3 常见错误处理
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 点击位置偏移 | 窗口位置变化 | 锁定窗口位置/重新校准坐标 |
| OCR识别失败 | 文字区域捕获不准确 | 调整screenshot的region参数 |
| 链接复制为空 | 剪贴板被其他程序占用 | 添加剪贴板清空操作 |
| 删除确认按钮没点到 | 微信界面更新 | 更新confirm_btn坐标 |
注意:如果频繁出现操作失败,建议重启微信客户端再试
5. 扩展应用场景
这套方法稍作修改即可用于:
批量导出聊天记录中的链接
- 修改坐标定位到聊天窗口
- 添加滚动翻页逻辑
自动化整理收藏夹
# 示例:按类型分类收藏 def categorize_item(title): if '教程' in title: return '学习资料' elif '新闻' in title: return '资讯' else: return '其他'定时自动备份
- 添加schedule库定时运行
- 配合Git自动版本控制
# 示例:每周一早上自动备份 import schedule def backup_job(): # 运行导出脚本 ... schedule.every().monday.at("09:00").do(backup_job) while True: schedule.run_pending() time.sleep(60)实际项目中,我将这个脚本与Notion API结合,实现了收藏链接的自动归类+智能标签系统。处理800+条收藏仅需25分钟,准确率达到92%——这效率,手动操作简直不敢想象。
