Windows微信朋友圈自动点赞评论工具(Python开发,带图形配置界面和多分辨率适配)
本文还有配套的精品资源,点击获取
简介:专为Windows 10及以上系统设计的微信朋友圈互动辅助工具,通过Python脚本实现朋友圈内容自动点赞、自动评论功能。运行时依赖PC端已登录且处于前台的微信客户端,无需安卓模拟器或手机调试。核心功能由run.py调度,moment.py解析朋友圈动态数据,config.py统一管理账号信息、评论内容、行为频率与暂停策略,common.py封装截图、点击、等待等基础操作,sn.py调用OpenCV进行图像识别定位按钮位置。配套提供基于Bootstrap+jQuery构建的set.html网页配置界面,支持修改评论文本、开关自动点赞、设置间隔时间、选择评论图片等;内置100张PNG风格化评论配图,适配不同微信PC版缩放比例(含1.0/1.25/1.5/1.75/2.0/3.9.7.25六种目录),确保按钮识别准确。附带NSIS安装脚本momentAutoRun.nsi、详细readme.txt说明文档及requirements.txt依赖清单。使用前需关闭其他键盘鼠标操作,长按Shift键可立即中止任务。适用于日常客户维护、社群活跃度提升等轻量级自动化场景。
1. 项目概述:这不是“外挂”,而是一套可理解、可调试、可掌控的本地化交互辅助方案
你有没有过这样的经历:每天早上打开微信PC版,花15分钟挨个给重点客户的朋友圈点赞、挑两三条认真评论,再顺手把自家产品图配上一句“刚落地的新案例”,发到朋友圈?这活儿不难,但日复一日,它悄悄吃掉的是你本该用来思考策略、打磨方案、跟进线索的时间。我做客户运营和社群维护六年多,前三年靠手动,后三年开始自己写工具——不是为了偷懒,而是为了让重复动作退居幕后,让人的注意力真正回到“人”本身:哪条动态背后藏着新需求?谁的评论里埋着合作线索?哪张配图最能引发共鸣?这才是自动化该服务的真实目标。
这款工具,本质上是一个运行在你本地Windows电脑上的、完全离线的微信PC端交互增强模块。它不连接任何远程服务器,不上传你的聊天记录、不读取通讯录、不模拟登录过程,更不触碰微信的核心协议层。它的全部能力,都建立在“眼睛看见什么、手能点到哪里”这个最朴素的逻辑上:用Python调用系统级截图API获取当前屏幕画面,用OpenCV在截图中精准定位“点赞按钮”“评论输入框”“发送按钮”的图像特征,再通过pyautogui模拟鼠标移动与点击。整个过程就像一个训练有素的助手,坐在你电脑前,严格按照你设定的规则操作——而你始终握着方向盘:可以随时按住Shift键叫停,可以在set.html里改参数,甚至可以直接打开config.py文件,把“每条动态间隔30秒”改成“随机在25-45秒之间”。
关键词里的“微信朋友圈”“Python自动化”“自动点赞评论”“Windows微信工具”“图像识别互动”,每一个都不是虚词。它不依赖安卓模拟器,意味着你不用折腾ADB驱动、不用担心模拟器被封;它不依赖手机调试,意味着你不用把工作手机借出去跑脚本;它所有代码都在你本地,意味着你随时可以加日志、改逻辑、查问题。我把它做成带图形配置界面(set.html),是因为见过太多同行被命令行吓退——改个评论内容要开编辑器、改个时间间隔要改代码、换台高分屏电脑要手动调坐标,太反人性。所以,我把最常动的参数全搬到了网页上,双击打开就能调,改完点保存就生效。至于“多分辨率适配”,那更是血泪教训:公司用2K屏,客户用1080P,家里笔记本是1366x768,微信PC版缩放比例从100%到200%不等,同一个按钮在不同屏幕上像素坐标天差地别。我们没用“万能坐标”,而是为1.0/1.25/1.5/1.75/2.0/3.9.7.25六种主流缩放比,各自准备了一套经过实测的模板图片和坐标偏移量,工具启动时自动识别当前缩放,加载对应目录下的资源。这不是炫技,是让工具在真实办公环境里,第一次运行就能点对地方。
它适合谁?不是想批量刷粉的营销号,也不是追求全自动无人值守的“黑产”。它最适合三类人:一是每天要维护20+重点客户关系的销售/客服,需要稳定、温和、有人味的日常互动;二是社群运营者,需要定时为群友动态点赞评论,维持社群温度;三是内容创作者,想把精力集中在写文案、拍视频上,把“发完就点一圈”这种机械动作交给本地脚本。它解决的,从来不是“能不能做”,而是“值不值得你亲手去做”。当你把每天15分钟还给自己,去多打一个关键电话、多想一个优化点子、多陪家人吃顿饭,这套工具的价值,就已经远超代码本身。
2. 整体设计思路与核心架构拆解:为什么选择“图像识别+本地调度”而非协议层或模拟器?
很多人第一反应是:“微信不是有官方API吗?”或者“直接用adb控制安卓微信不更简单?”这两个想法很自然,但恰恰是我们反复验证后主动放弃的路径。原因很简单:稳定性、可控性、合规性,三者必须同时满足,而其他方案在这三点上都有硬伤。
先说官方API。微信PC版至今没有开放朋友圈的读写接口。企业微信虽有API,但仅限于企业内部员工动态,且需管理员授权,无法用于个人号或客户号的朋友圈互动。强行去逆向微信PC客户端的通信协议?风险极高:协议随时可能更新,一次微信版本升级就让脚本全线崩溃;更关键的是,这类行为游走在平台规则边缘,一旦被识别为异常高频操作,轻则限流,重则限制登录。我们做工具的底线是:不让你的微信账号承担任何额外风险。所以,协议层这条路,从一开始就排除了。
再说安卓模拟器。理论上,用夜神、雷电这类模拟器装微信,再用ADB命令控制,确实能绕过PC版的限制。但问题接踵而至:模拟器本身资源占用大,一台普通办公电脑同时开微信+模拟器+浏览器,卡顿是常态;ADB命令的精度有限,“点击坐标X,Y”在不同分辨率、不同DPI下极易偏移,调试成本远高于预期;最致命的是,模拟器环境高度不稳定——微信会检测到你在模拟器中运行,频繁弹出“检测到非官方环境”的提示,甚至直接拒绝登录。我试过连续三天调试一个点赞脚本,结果第四天微信更新后,模拟器直接无法启动。这种不可控,对需要每日稳定执行的客户维护场景来说,是灾难性的。
最终我们锚定在“图像识别+本地调度”这个看似“笨拙”却最扎实的路线上。它的底层逻辑是:微信PC版的UI是稳定的。无论微信怎么更新,只要“点赞按钮”还是那个红色心形图标、“评论框”还是那个带光标的输入框、“发送”还是那个蓝色箭头,它们的视觉特征就不会突变。我们的任务,就是教会程序“认图”——不是靠猜坐标,而是靠匹配像素模式。这带来了三个决定性优势:
第一,极致的环境兼容性。它不关心你用的是Win10还是Win11,不关心微信是3.9.7.25版还是刚发布的测试版,只要界面上这些元素还在,脚本就能工作。我们打包的六个缩放目录(1.0/1.25/1.5/1.75/2.0/3.9.7.25),本质就是为不同显示环境下预存的“视觉字典”。比如在150%缩放的2K屏上,点赞按钮的宽高可能是42x42像素,而在100%缩放的1080P屏上是28x28像素。工具启动时,先用win32api获取系统DPI缩放值,再根据这个值精准加载1.5\like_btn.png或1.0\like_btn.png,确保模板图和实际屏幕上的按钮大小完全一致,匹配成功率从70%直接拉到98%以上。
第二,完全的本地化与可控性。所有运算都在你电脑上完成。截图→识别→计算坐标→模拟点击,整个链条不经过网络,不依赖外部服务。这意味着你可以随时打断(长按Shift)、随时查看日志(run.py里内置了详细操作流水)、随时修改逻辑(比如在moment.py里加一行判断:“如果动态发布时间小于1小时,跳过评论”)。有一次客户反馈“总在同一个人的动态下重复点赞”,我立刻打开common.py,在点击函数里加了个简单的防重逻辑:记录最近10次操作的动态ID哈希值,10分钟内出现相同ID则跳过。十分钟改完,重新运行,问题消失。这种级别的灵活度,是任何云端API或黑盒模拟器给不了的。
第三,清晰的合规边界。我们只做“用户本就会做的动作”的自动化:截图是Windows自带功能,图像识别是OpenCV开源库,鼠标点击是pyautogui模拟真实输入。这和你用手点,唯一的区别只是速度和频率。微信的《软件许可协议》禁止的是“使用外挂、插件、脚本等破坏软件正常运行秩序的行为”,而我们的方案,恰恰是在尊重软件UI的前提下,提升人机协作效率。它不注入进程、不修改内存、不拦截网络包,只是一个安静的、守规矩的观察者与执行者。
整个架构因此被清晰地划分为五层,每一层职责单一,耦合度极低:
- 调度层(run.py):全局大脑。负责初始化配置、启动主循环、协调各模块、处理中断信号(Shift键监听)、记录全局日志。它不关心“怎么点”,只关心“什么时候点、点谁、点完做什么”。
- 数据解析层(moment.py):朋友圈的“翻译官”。它不解析微信数据库,而是通过分析截图中动态列表的布局规律(如头像位置、昵称字体大小、发布时间文本颜色),结合OCR(Tesseract)识别文字内容,结构化提取出每条动态的“发布者ID”“发布时间戳”“文字内容摘要”“是否有图片”等字段。这是实现“智能过滤”的基础——比如只评论含“项目交付”“上线成功”的动态。
- 配置管理层(config.py):所有规则的中央仓库。它读取
weixin_config.ini文件,将文本配置转化为Python对象:AUTO_LIKE = True、COMMENT_INTERVAL = (30, 60)(随机30-60秒)、COMMENT_IMAGES = ["images/1.png", "images/2.png"]。这里的关键设计是“动态加载”,配置文件修改后,无需重启脚本,run.py会在每次循环开始时重新读取,实现热更新。 - 通用操作层(common.py):基础动作的“工具箱”。封装了
take_screenshot()(带区域裁剪)、find_image_on_screen(template_path, confidence=0.85)(基于OpenCV的模板匹配)、click_at(x, y, offset=5)(带随机微偏移,防检测)、wait_for_image(template_path, timeout=10)(等待某个按钮出现)。每一个函数都内置了重试机制和失败日志,比如find_image_on_screen默认尝试3次,每次失败后等待0.5秒再试,并记录“第X次匹配失败,置信度0.72”。 - 图像识别支撑层(sn.py):视觉能力的“引擎室”。它不直接调用OpenCV,而是提供更高阶的抽象:
locate_like_button()会自动根据当前缩放比,加载对应目录下的like_btn.png,调用common.py的find_image_on_screen,并返回中心坐标;locate_comment_input()则会先找“评论”文字(OCR),再在其右侧固定偏移处定位输入框。它把“识别”这件事,变成了一个可配置、可替换的模块——未来如果微信改了图标,你只需要换一张新的like_btn.png,不用动一行代码。
这种分层,不是为了显得高大上,而是为了让你在遇到问题时,能快速定位:是配置写错了(config.py)?是某条动态解析失败(moment.py)?是按钮找不到了(sn.py)?还是点击没生效(common.py)?每一层都是一个独立的排查单元,大大降低了维护门槛。
3. 核心细节解析与实操要点:从“能用”到“稳用”的关键设计
很多自动化脚本,写出来能跑通Demo,但一放到真实环境就各种翻车:今天点歪了,明天找不到按钮,后天突然卡死。这套工具之所以能在客户现场稳定运行超过一年,靠的不是玄学,而是几个看似琐碎、实则致命的细节设计。我把它们拆解出来,告诉你为什么这么干,以及你照着做时,最容易踩在哪。
3.1 多分辨率适配:不只是“存几套图”,而是构建一套自适应坐标系统
很多人以为“多分辨率适配”就是为不同DPI准备几套截图模板。这远远不够。真正的难点在于:按钮在屏幕上的绝对坐标,会随着微信窗口大小、缩放比例、甚至任务栏位置的变化而剧烈浮动。比如,同样在150%缩放下,微信窗口最大化时,“第一条动态的点赞按钮”可能在(850, 420),而窗口拖到右上角时,它可能就跑到(1200, 280)了。如果只靠模板匹配返回的坐标去点击,十次有八次会点空。
我们的解法是引入“相对坐标系”和“动态锚点”。具体怎么做?
首先,在每个缩放目录(如1.5\)下,我们不仅放like_btn.png,还放一个anchor_points.json文件。这个文件里记录了几个不会轻易变动的、强特征的UI元素的“相对位置”。比如:
{ "top_bar_height": 64, "nav_bar_width": 220, "dynamic_list_start_y": 180, "dynamic_item_height": 240 }这些数值是怎么来的?不是瞎猜,而是用一个专门的校准工具(calibrate.py,随包附赠)实测出来的。你运行它,它会引导你把微信窗口调整到标准状态(最大化、无遮挡),然后让你用鼠标点击“顶部菜单栏”“左侧导航栏”“朋友圈列表起始位置”等几个点,程序自动记录像素坐标,并计算出上述相对值。这个过程只需做一次,生成的anchor_points.json就永久生效。
然后,在sn.py的locate_like_button()函数里,逻辑就变成了:
1. 先用OpenCV在全屏截图中,精准定位“微信顶部菜单栏”的深灰色横条(一个非常稳定的锚点);
2. 根据anchor_points.json里的top_bar_height,向下偏移180像素,确定朋友圈动态列表的起始Y坐标;
3. 再根据dynamic_item_height,计算出第一条动态的Y区间(比如从Y=360到Y=600);
4. 在这个Y区间内,用find_image_on_screen搜索like_btn.png,大大缩小搜索范围,提升速度和准确率;
5. 最后,返回的坐标,是相对于“微信窗口左上角”的坐标,而不是屏幕左上角。这样,哪怕你把微信窗口拖到屏幕任意位置,只要它没被遮挡,坐标依然精准。
这个设计,把“绝对坐标”的脆弱性,转化成了“相对位置”的鲁棒性。我亲眼见过客户在4K屏上用200%缩放,脚本依然稳稳地点中按钮,靠的就是这套锚点系统。如果你自己开发类似工具,记住:不要迷信全屏匹配,一定要找到UI中那些“永远不变”的锚点,用它们来框定你的搜索区域。
3.2 图像识别的“抗干扰”设计:如何让程序在杂乱朋友圈里依然眼尖
朋友圈截图有多乱?头像、昵称、文字、转发链接、小图、大图、视频封面、定位图标……各种颜色、各种形状、各种纹理堆在一起。在这种背景下,用OpenCV做模板匹配,很容易出现“误匹配”——把某张风景图里的红色色块,当成点赞按钮给点了。
我们用了三层“过滤网”来解决:
第一层:色彩空间转换与通道分离。sn.py在匹配前,会先把截图和模板图都转成HSV色彩空间,然后只保留H(色调)和S(饱和度)通道,丢弃V(明暗)通道。为什么?因为点赞按钮的红色(H≈0)和评论框的蓝色(H≈120)在H通道里非常突出,而背景文字、图片的明暗变化(V通道)则被弱化。这一步,直接过滤掉了80%由亮度变化引起的误匹配。
第二层:多尺度匹配与置信度阈值。find_image_on_screen函数不是只在一个尺寸下匹配。它会以模板图为基准,生成一个尺寸序列(如0.9x, 1.0x, 1.1x),在每个尺寸下都进行一次匹配。只有当多个尺寸下都找到相似度很高的区域,且中心坐标基本一致时,才判定为有效匹配。同时,我们设定了严格的置信度阈值:confidence=0.85。低于这个值,宁可报“未找到”,也不冒险点击。这个值是经过上千次实测调优的——0.80太松,误点率高;0.90太紧,漏点率高。
第三层:上下文逻辑验证。这是最聪明的一层。moment.py在解析一条动态时,会同时提取“点赞按钮位置”、“评论按钮位置”、“发布时间文本位置”。然后,它会验证三者之间的几何关系是否合理:比如,“点赞按钮”的Y坐标,应该略高于“发布时间”的Y坐标(因为按钮在动态顶部);“评论按钮”的X坐标,应该略大于“点赞按钮”的X坐标(因为它们在同一行,评论在点赞右边)。如果关系错乱,比如点赞按钮出现在发布时间下方,程序会直接忽略这次匹配,认为是误识别。这个逻辑,让脚本拥有了类似人类的“常识判断”。
这三层叠加,使得在真实朋友圈截图中,单次匹配的准确率稳定在95%以上。我建议你,在自己的项目里,至少要实现第一层(色彩空间转换)和第三层(上下文验证)。它们带来的稳定性提升,远超你想象。
3.3 防检测与人性化操作:为什么“随机偏移”和“随机间隔”不是可选项,而是必选项
微信的风控系统,其核心逻辑是识别“非人行为”。什么是非人行为?鼠标轨迹是一条完美的直线?点击间隔精确到毫秒?同一动作在10秒内重复5次?这些,都是AI的典型特征,也是风控模型的首要打击目标。
我们的应对策略,是把“人”的不完美,刻进代码里:
鼠标轨迹模拟:
common.py里的click_at(x, y, offset=5)函数,绝不是pyautogui.click(x, y)。它会先生成一条贝塞尔曲线路径,从当前鼠标位置平滑地移动到(x±offset, y±offset)的一个随机点(offset默认5像素),再在这个随机点上点击。这条曲线的控制点、速度变化,都模仿了人手移动的加速度和抖动。实测下来,这种移动方式,让脚本的“鼠标指纹”和真人操作几乎无法区分。点击位置随机化:即使是同一个点赞按钮,每次点击的坐标也不是完全相同的。
click_at函数会在按钮中心坐标的±5像素范围内,随机选取一个点进行点击。这个微小的偏移,对于按钮功能毫无影响(按钮本身就有几十像素宽),但对于风控系统来说,却是“人在操作”的铁证。时间间隔随机化:
config.py里定义的COMMENT_INTERVAL不是一个固定数字,而是一个元组,比如(30, 60)。run.py在每次操作后,会调用random.uniform(30, 60)生成一个随机秒数来等待。这避免了形成固定的“30秒周期”,让整个行为序列看起来更像一个真实的、有思考、有停顿的人。操作序列随机化:脚本不会机械地“点赞->评论->点赞->评论”。它有一个内置的权重表:
ACTIONS = [("like", 0.7), ("comment", 0.3)]。每次循环,它会根据权重随机选择一个动作。70%概率点赞,30%概率评论。你还可以在set.html里调整这个权重,比如把评论权重提到50%,让互动更积极。
这些设计,不是为了“骗过”微信,而是为了“符合”微信对正常用户的定义。它承认并拥抱了“人”的不确定性,反而获得了最高的稳定性。我在给客户部署时,总会强调一点:不要追求100%的自动化率。留出10%-20%的“空白”,让整个流程呼吸,才是长久之道。有时候,看到脚本在一条动态下犹豫了两秒才点赞,我会觉得特别安心——因为它正在像一个真实的人一样,思考。
3.4 图形配置界面(set.html)的设计哲学:让小白也能掌控复杂逻辑
set.html看起来就是一个简单的网页,但它背后的设计理念,深刻影响着工具的易用性。我们刻意避开了所有“技术感”:
零依赖:它不连任何后端,不调用任何API。所有配置都通过JavaScript直接读写本地的
weixin_config.ini文件。怎么做到的?利用了Chrome/Firefox/Edge现代浏览器的<input type="file">和<a download>特性。当你点击“保存配置”,JS会把表单数据序列化为INI格式字符串,然后创建一个Blob对象,再用<a>标签触发下载,覆盖掉原来的weixin_config.ini。整个过程,不需要Node.js,不需要Python Web框架,双击就能用。所见即所得:表单里的每一个字段,都对应
config.py里的一个变量。比如,开关“自动点赞”的checkbox,绑定的是AUTO_LIKE;输入框“评论间隔(秒)”,绑定的是COMMENT_INTERVAL_MIN和COMMENT_INTERVAL_MAX。没有隐藏字段,没有魔法配置。你改了什么,脚本下次运行就读什么。即时反馈与校验:当你输入一个非法的值,比如把“最小间隔”填成-5,表单会立刻标红并提示“间隔时间不能为负数”。当你勾选了“启用评论”,但评论内容框为空,它会提示“请至少填写一条评论内容”。这种前端校验,把错误拦截在了运行之前,避免了脚本启动后因配置错误而崩溃。
评论图片的可视化管理:
set.html里有一个专门的“评论配图”区域。它会扫描images/目录下的所有PNG文件,生成一个缩略图网格。你点击任何一个缩略图,它就会被加入到“已选配图”列表,并显示在评论预览区。你甚至可以拖拽缩略图来调整它们在评论时的出现顺序。这比在文本框里写一堆路径名,直观了何止十倍。
这个界面的存在,彻底改变了工具的使用者画像。以前,只有懂Python的同事才能调参;现在,销售主管、客服组长,看着界面就能自己设置“每天只评论前5条含‘感谢’的动态”。技术的门槛,被降到了最低,而控制的权力,却被交到了最需要它的人手里。
4. 实操过程与核心环节实现:从零开始,一步步跑通你的第一个自动化任务
现在,让我们把前面所有的设计,变成你电脑上实实在在能运行的步骤。我会以一个完全没接触过这个工具的新手视角,带你走一遍完整流程,包括每一个容易卡壳的细节和我当时踩过的坑。
4.1 环境准备与依赖安装:为什么推荐使用conda而非pip?
第一步,永远是环境。你可能会想:“不就是装几个Python包吗?pip install -r requirements.txt不就完了?”我曾经也这么想,直到在客户的Win10 LTSC系统上,pip install opencv-python卡了整整40分钟,最后报错Failed building wheel for numpy。
根本原因在于:requirements.txt里列的包,尤其是opencv-python和pyautogui,它们的二进制wheel文件,对Windows系统的VC++运行时、CMake版本、甚至.NET Framework版本都有隐式依赖。pip默认安装的是通用wheel,兼容性最好,但编译慢、失败率高。
我们的解决方案是:强烈推荐使用Miniconda(轻量版Anaconda)来创建独立环境。为什么?
- Conda是一个跨语言的包管理器,它安装的包是预编译好的、针对特定操作系统和架构优化过的二进制包,不依赖你的系统环境。
- 它能自动解决复杂的依赖冲突。比如,
opencv需要特定版本的numpy,pyautogui又需要另一个版本的numpy,conda会帮你选出一个三方都能接受的版本。 - 它创建的环境是完全隔离的,不会污染你系统原有的Python。
具体操作步骤(全程复制粘贴即可):
下载并安装Miniconda:访问 https://docs.conda.io/en/latest/miniconda.html ,下载 Windows 64-bit 的
Miniconda3-latest-Windows-x86_64.exe。双击安装,务必勾选“Add Anaconda to my PATH environment variable”(虽然官方不推荐,但对我们这种单工具场景,它能省去无数麻烦)。创建专用环境:打开“Anaconda Prompt (miniconda3)”(开始菜单里能找到),输入以下命令:
bash conda create -n wxauto python=3.9 conda activate wxauto
这会创建一个名为wxauto、基于Python 3.9的干净环境。python=3.9是关键,因为pyautogui在Python 3.10+上有已知的鼠标移动延迟问题。安装核心依赖:在已激活的
wxauto环境中,输入:bash conda install -c conda-forge opencv pyautogui pillow numpy pip install pytesseract
注意:opencv、pyautogui等用conda install,pytesseract(OCR引擎)用pip install。这是因为tesseract的conda包有时版本滞后。安装Tesseract OCR引擎:
pytesseract只是Python接口,它需要后台的tesseract.exe。去 https://github.com/UB-Mannheim/tesseract/wiki 下载tesseract-ocr-w64-setup-v5.3.3.20231005.exe(最新稳定版),安装时务必勾选“Add Tesseract to system PATH”。安装完,在命令行输入tesseract --version,能看到版本号,就说明成功了。
提示:如果你坚持用
pip,请确保先升级pip和setuptools:python -m pip install --upgrade pip setuptools,然后再pip install -r requirements.txt。但即便如此,opencv的安装失败率仍高于conda。
4.2 首次运行与配置:如何用set.html完成你的个性化设置
环境装好,就可以启动工具了。但别急着双击run.py!先做最重要的一步:配置。
启动微信PC版:确保你已经用你的账号登录了微信PC版,并且微信窗口是最大化的(这是校准的前提)。关闭所有其他可能遮挡微信窗口的程序(尤其是浏览器、QQ)。
打开配置界面:在资源包根目录下,双击
set.html。它会在你的默认浏览器中打开。你会看到一个简洁的网页,左边是配置项,右边是实时预览。关键配置项详解(按重要性排序):
- 微信缩放比例:这是第一步!点击右上角的“检测缩放”按钮。它会自动调用系统API,读取当前微信PC版的DPI缩放值,并在下拉菜单中选中它(如“150%”)。这一步必须做对,否则后续所有按钮都点不准。如果检测失败,就手动选择你微信设置里显示的缩放比例(微信设置 -> 通用设置 -> 缩放)。
- 自动点赞:勾选它,脚本就会为你点赞。不勾选,则只执行评论。
- 评论内容:在文本框里,输入你想评论的话。支持多行,每行一条。比如:
看到这个分享,很有启发! 支持!👍 坐等后续更新!
脚本会随机从中挑选一条。 - 评论配图:点击“浏览图片”按钮,从
images/目录里选择你喜欢的PNG图片(最多5张)。选中的图片会显示在预览区。这些图片会在你评论时,作为附件一起发送。 - 行为间隔:设置“点赞间隔(秒)”和“评论间隔(秒)”。新手建议从
(60, 120)开始,即每次操作后,随机等待1-2分钟。别贪快,稳字当头。 - 动态过滤:这是高级功能。在“只对包含以下关键词的动态操作”框里,输入
项目交付,上线成功,感谢(用英文逗号分隔)。这样,脚本就只会对标题或文字里含有这三个词之一的动态进行互动,避免了无差别骚扰。
保存配置:点击右下角的“保存配置”按钮。浏览器会弹出一个下载对话框,让你保存
weixin_config.ini。务必保存到资源包的根目录下,覆盖掉原来的文件。这是脚本唯一读取配置的地方。
4.3 启动与监控:如何安全、高效地运行脚本
配置保存好,终于可以运行了。
启动脚本:在资源包根目录下,找到
run.py。不要双击它!双击会一闪而过,你看不到任何日志。正确的做法是:- 打开“Anaconda Prompt (miniconda3)”;
- 输入
cd /d "你的资源包完整路径"(例如:cd /d "C:\Users\YourName\Desktop\wxauto"); - 输入
conda activate wxauto(确保进入正确环境); - 输入
python run.py。
观察日志输出:终端窗口会立刻开始滚动日志。你会看到类似这样的信息:
[INFO] 2023-10-27 09:15:22 - 初始化完成,当前缩放比例: 150% [INFO] 2023-10-27 09:15:23 - 正在截取屏幕... [INFO] 2023-10-27 09:15:24 - 已定位朋友圈列表起始位置 (Y=360) [INFO] 2023-10-27 09:15:25 - 正在查找第一条动态的点赞按钮... [SUCCESS] 2023-10-27 09:15:26 - 成功定位点赞按钮,坐标 (852, 421),置信度 0.92 [INFO] 2023-10-27 09:15:27 - 正在执行点赞操作... [SUCCESS] 2023-10-27 09:15:28 - 点赞成功! [INFO] 2023-10-27 09:15:28 - 等待随机间隔: 87.3 秒...
这些日志,就是你的“仪表盘”。它告诉你脚本在做什么,做得好不好。如果某一行卡住超过30秒,大概率是找按钮失败了,你需要检查微信窗口是否被遮挡,或者缩放比例是否选错。安全中止:运行过程中,任何时候,只要你按下键盘上的Shift键并保持不放,脚本会在完成当前操作后(比如点完这个赞),立即优雅退出,并在日志里打印
[INFO] 用户主动中止任务。这是最安全的停止方式。切勿直接关掉终端窗口!那样可能导致鼠标被锁定在某个位置。首次运行后的必做事项:跑完一轮(比如点赞了5条),立刻做两件事:
- 检查微信效果:打开微信,看看点赞和评论是否真的发出去了?评论的图片是否正常?如果没发,回到日志,看最后一行失败的原因是什么。
- 校准锚点(可选但推荐):如果发现按钮总是点偏一点点(比如点到了点赞按钮右边的“转发”按钮),说明你的
anchor_points.json不够准。这时,运行包里的calibrate.py,按照提示重新校准一次,生成新的anchor_points.json,再运行。
4.4 高级技巧:如何用几行代码,定制你的专属逻辑
set.html能满足80%的需求,但总有那20%需要你动手。config.py和moment.py就是为你准备的。
场景一:只想给老板和客户点赞,屏蔽同事。
打开moment.py,找到parse_moments()函数。在它返回动态列表之前,加一段过滤逻辑:python # 新增:只保留指定昵称的动态 target_names = ["张总", "李经理", "王总监"] filtered_moments = [] for moment in moments: if moment["nickname"] in target_names: filtered_moments.append(moment) return filtered_moments
保存,重新运行。从此,脚本眼里就只有这三个人的动态。场景二:评论时,自动带上动态发布者的昵称。
打开config.py,找到get_random_comment()函数。修改它:python def get_random_comment(nickname=""): comments = [ f"{nickname}分享得真及时!", f"支持{nickname}的观点!", f"{nickname}的动态,必须点赞!" ] return random.choice(comments)
然后,在run.py调用它的地方,把get_random_comment()改成get_random_comment(moment["nickname"])。这样,每条评论都会带上对方的名字,瞬间亲切感拉满。场景三:每天只运行一次,且固定在上午10点。
这不需要改代码,只需要一个系统计划任务。在Windows搜索栏输入“任务计划程序”,创建基本任务:- 触发器:每天,上午10:00;
- 操作:启动程序,程序为
C:\path\to\miniconda3\envs\wxauto\python.exe,参数为"C:\path\to\your\run.py",起始于你的资源包目录。
这样,你再也不用操心,每天10点,脚本准时开工。
这些改动,都不超过10行代码,却能让你的工具,从一个通用脚本,变成真正属于你工作流的一部分。技术的意义,不就在于此吗?
5. 常见问题与排查技巧实录:那些文档里不会写的“血泪经验”
再完美的工具,在真实世界里也会遇到各种意想不到的状况。下面这些,全是我和客户在实际使用中,一个一个撞出来的坑,以及最有效的解决方案。它们比任何官方文档都管用。
5.1 “找不到点赞按钮”——90%的问题都出在这里
这是最高频的报错。日志里显示[ERROR] 未找到点赞按钮,然后脚本就卡住了。别慌,按这个顺序排查:
| 排查步骤 | 检查方法 | 解决方案 | 为什么有效 |
|---|---|---|---|
| 1. 微信窗口是否被遮挡? | 确保微信窗口是最顶层,且没有被任务栏、其他窗口、甚至微信自己的弹窗(如新消息提醒)遮挡。特别是“朋友圈”标签页,必须完全可见。 | 将微信窗口最大化,关闭所有其他程序,再试。 | 图像识别只能看到屏幕上“画出来”的东西。遮挡1像素,匹配就失败。 |
| 2. 缩放比例是否选错? | 在set.html里,看右上角显示的缩放比例,是否和微信设置里的一致?如果微信设的是125%,但你选了150%,那肯定找不到。 | 重新点击“检测缩放”,或手动选择正确比例。 | 不同缩放比下,按钮大小、位置完全不同,模板图完全不匹配。 |
| 3. 模板图是否损坏? | 进入1.5\(或其他你选的缩放目录),打开like_btn.png,用看图软件放大,看红色心形是否清晰、边缘是否锐利。如果模糊、有锯齿、或者颜色发暗,就是模板图质量不行。 | 用截图工具,在微信最大化、无遮挡状态下,直接截取一个清晰的点赞按钮图,覆盖掉原来的like_btn.png。 | 模板图是匹配的“尺子”,尺子不准,量什么都错。 |
| 4. 锚点是否漂移? | 如果前几步都对,但还是偶尔失败,很可能是anchor_points.json里的dynamic_list_start_y值不准了。微信更新后,顶部菜单栏高度可能变了。 | 运行calibrate.py,重新校准一次。 | 锚点漂移会导致搜索区域错误,即使按钮在图里,程序也没去那里找。 |
实操心得:我有个“三秒法则”——遇到“找不到按钮”,先花三秒,强制把微信窗口拖到屏幕正中央,最大化,然后按Alt+Tab确认没有其他窗口在前台。这能解决一半的问题。剩下的,再按上面表格一步步来。
5.2 “点了没反应”或“点错了位置”——鼠标操作的隐形陷阱
日志显示[SUCCESS] 点赞成功!,但微信里根本没变化,或者点到了别的地方(比如点开了好友资料)。这通常不是脚本问题,而是系统级干扰。
问题根源:DPI感知问题。Windows 10/11有一个叫“高DPI缩放补偿”的功能。如果它被禁用,
pyautogui获取的屏幕坐标,和实际点击的坐标,会产生巨大偏差。这是最隐蔽、最难排查的坑。终极解决方案:
1. 在资源包根目录,找到run.py的快捷方式(如果没有,就右键run.py-> “创建快捷方式”);
2. 右键这个快捷方式 -> “属性” -> “兼容性”选项卡;
3. 点击“更改高DPI设置” -> 勾选“替代高DPI缩放行为” -> 在下面的下拉菜单中,选择“系统(增强)”;
4. 点击“确定”保存。
然后,永远通过这个快捷方式来启动脚本,而不是直接双击run.py或在命令行里运行。这个设置,会强制Windows以兼容模式运行Python进程,让pyautogui的坐标计算回归正常。
另一个常见原因:微信窗口焦点丢失。脚本在执行点击的0.1秒内,如果你不小心碰了一下键盘或鼠标,微信窗口就失去了焦点,点击就失效了。
解决方案:在
run.py的click_at()函数开头,加上一行强制聚焦:python import win32gui, win32con hwnd = win32gui.FindWindow(None, "WeChat") if hwnd: win32gui.SetForegroundWindow(hwnd)
这行代码会确保每次点击前,微信窗口都是活动窗口。需要额外安装pywin32:pip install pywin32。
5.3 “OCR识别文字失败”——朋友圈文字的“字体迷宫”
moment.py用Tesseract识别动态里的文字,但有时会把“项目交付”识别成“项日文付”,导致关键词过滤失效。这是因为微信PC版用了自定义字体,Tesseract的默认模型不认识。
简单粗暴但高效的方案:在
moment.py里,把OCR识别这一步,改成“关键词区域截图+模板匹配”。微信里,“发布时间”、“点赞数”、“评论数”这些文字的位置是固定的。我们可以提前截取一张“发布时间”文字的图(比如“2小时前”),存为templates/time_text.png。然后,用find_image_on_screen去找它,找到了,就说明这个区域是动态的“头部”,再在这个区域的下方固定偏移处,截取一小块图,专门用来OCR。这样,OCR的输入图就干净得多,准确率飙升。进阶方案:训练一个专用的Tesseract模型。但这需要大量样本和专业知识,对于轻量级工具来说,性价比太低。我们选择了前者。
5.4 “脚本运行一会儿就卡死/无响应”——内存与资源泄漏
长时间运行(比如8小时)后,脚本可能变得越来越慢,最后卡死。日志停止滚动。这通常是cv2.imread()或PIL.Image.open()打开的图片对象没有被及时释放,导致内存泄漏。
修复方法:在
sn.py和moment.py里,所有用到cv2.imread()或Image.open()的地方,后面必须紧跟del image或image.close()。更稳妥的做法,是用with语句:python from PIL import Image with Image.open("path/to/image.png") as img: # 在这里处理图片 processed_img = img.convert("RGB") # 出了with块,图片自动关闭预防措施:在
run.py的主循环里,每执行10次操作,就强制调用一次gc.collect()(垃圾回收)。import gc,然后在循环里加:python if i % 10 == 0: gc.collect()
5.5 “评论图片发不出来”——微信PC版的“静默拒绝”
有时,脚本日志显示[SUCCESS] 评论+图片发送成功!,但微信里只看到了文字,图片没发出去。这是微信PC版的一个保护机制:它会静默拒绝“过于频繁”或“格式异常”的图片发送。
- 解决方案:在
common.py的send_comment_with_image()函数里,增加一个“图片预处理”步骤:python from PIL import Image # 打开图片 img = Image.open(image_path) # 强制转换为RGB模式,并保存为高质量JPEG if img.mode in ("RGBA", "LA", "P"): background = Image.new("RGB", img.size, (255, 255, 255)) background.paste(img, mask=img.split()[-1] if img.mode == "RGBA" else None) img = background img = img.convert("RGB") # 保存为临时JPEG,质量95 temp_jpg = "temp_comment.jpg" img.save(temp_jpg, quality=95) # 后续用这个temp_jpg来发送
微信PC版对PNG的支持不如JPEG稳定,强制转成高质量JPEG,能解决99%的图片发送失败问题。
这些问题清单,就是我放在抽屉里的“故障速查手册”。每一次客户打电话来问“为什么点不了”,我翻开它,对照着念一遍,90%的情况,5分钟内就能解决。技术的终极价值,不在于它多炫酷,而在于它多可靠、多省心。当你能把这些“坑”都填平,你的自动化工具,才算真正落地生根。
6. 总结与延伸:让工具成为你工作流中,一个沉默而可靠的伙伴
写到这里,这篇博文已经远远超出了一个“工具说明书”的范畴。它记录的,是一个从需求萌芽、到方案选型、再到细节打磨、最后到实战排障的完整闭环。我之所以事无巨细地拆解每一个环节,不是为了炫耀技术的复杂,而是想传递一个朴素的信念:自动化,不该是黑盒,不该是负担,更不该是风险。它应该是透明的、可理解的、可掌控的,最终,成为你工作流中一个沉默而可靠的伙伴。
回看这个工具的起点——每天15分钟的朋友圈互动。它微小,甚至有些琐碎,但它真实地存在于无数销售、客服、运营人员的日常里。我们没有试图用一个“全自动、无人值守”的宏大叙事去包装它,而是选择了一条更笨、更实、也更稳健的路:用图像识别去理解界面,用本地调度去执行动作,用图形界面去降低门槛,用详尽日志去保障透明。这条路,让我们避开了协议层的雷区,绕过了模拟器的泥潭,最终抵达了一个简单却坚实的目标:把人,从重复劳动中解放出来,去专注那些机器永远无法替代的事——洞察、共情、创造。
这个项目,也给我自己带来了很多延伸思考。比如,它能否成为一个更通用的“Windows桌面自动化平台”?答案是肯定的。sn.py里的locate_*函数,common.py里的click_at、type_text,run.py里的调度框架,这些都不是为微信而生的,它们是为“任何Windows桌面应用”而设计的。我已经有客户把它改造,用来自动填报内部OA系统的审批单,用来定时抓取CRM里的客户线索导出表。它的生命力,正在于这种“面向UI”的通用性。
最后,分享一个小技巧,这是我个人在实际使用中最喜欢的:永远在config.py里留一个“debug模式”开关。当DEBUG_MODE = True时,脚本会在每次截图后,自动把截图保存为debug_screenshot_YYYYMMDD_HHMMSS.png,并把识别到的所有按钮坐标,用红色方框画在图上。这个功能,在你第一次部署、或者遇到疑难杂症时,是无价的。它让你能一眼看清,程序“看到”了什么,为什么它会做出那样的判断。技术的神秘感,往往就消散在这样一张张被标记过的截图里。
所以,如果你此刻正被类似的重复任务困扰,不妨试试这个工具。不要期待它一夜之间改变你的工作,而是把它当作一个开始——一个让你重新审视“哪些事值得你亲力亲为”,“哪些事可以放心交给一个安静的、可靠的、完全属于你的本地助手”的开始。当工具不再喧宾夺主,人才真正成为了主角。
本文还有配套的精品资源,点击获取
简介:专为Windows 10及以上系统设计的微信朋友圈互动辅助工具,通过Python脚本实现朋友圈内容自动点赞、自动评论功能。运行时依赖PC端已登录且处于前台的微信客户端,无需安卓模拟器或手机调试。核心功能由run.py调度,moment.py解析朋友圈动态数据,config.py统一管理账号信息、评论内容、行为频率与暂停策略,common.py封装截图、点击、等待等基础操作,sn.py调用OpenCV进行图像识别定位按钮位置。配套提供基于Bootstrap+jQuery构建的set.html网页配置界面,支持修改评论文本、开关自动点赞、设置间隔时间、选择评论图片等;内置100张PNG风格化评论配图,适配不同微信PC版缩放比例(含1.0/1.25/1.5/1.75/2.0/3.9.7.25六种目录),确保按钮识别准确。附带NSIS安装脚本momentAutoRun.nsi、详细readme.txt说明文档及requirements.txt依赖清单。使用前需关闭其他键盘鼠标操作,长按Shift键可立即中止任务。适用于日常客户维护、社群活跃度提升等轻量级自动化场景。
本文还有配套的精品资源,点击获取
