如何使用计算机视觉自动化Instagram互动(并因此被封禁)
摘要
一份技术指南,介绍如何利用计算机视觉通过视觉查找UI元素来自动化Instagram的点赞和评论,绕过DOM选择器。讨论了模板匹配以及通过使用地标来减少误报。
暂无内容
查看缓存全文
缓存时间: 2026/06/12 14:54
# 如何用计算机视觉自动化 Instagram 互动(并因此被封号)
来源:https://blog.florianherrengt.com/how-to-automate-instagram-engagements.html
显然,Instagram 不想让你自动化互动。他们的 HTML 是一堆随机生成的类名和深度嵌套的 div。每次部署结构都会变化。任何依赖 DOM 选择器的脚本都会在几周内失效,因为类名已经不存在了。
但这其实无所谓。Instagram 可以随意混淆他们的代码,因为代码是给机器看的。但**UI**……UI 是给人看的。心形图标必须看起来像个心形。评论按钮必须在用户期望的位置。布局必须足够一致,让人能轻松浏览。
所以,与其跟 DOM 较劲,不如直接绕过它。截个屏,根据视觉特征找到心形,获取坐标,移动光标到那里,点击,完成。
这对任何渲染成像素的东西都有效:网页应用、原生应用、游戏、终端。只要人能看见并点击,电脑也能做到。不需要选择器、API 或平台特定的钩子。只需要计算机视觉和光标自动化。
不幸的是,你不能硬编码位置。东西总在移动。长评论会把操作栏往下推。位置标签会多出一行。轮播图会占用更多垂直空间。每篇帖子的布局压缩或展开方式都不同。
在两篇帖子之间导航,看看心形的位置发生了什么变化:
心形在帖子之间移动,位置从不相同。计算机视觉解决了这个问题。不用猜测心形*应该*在哪里,而是看着屏幕,找到它们*实际*在哪里。
## 屏幕太大,误检太多
天真的方法很简单:把心形图标作为模板,在屏幕上找到它。匹配的地方就是心形。这是你能做的最基本的计算机视觉操作。
但效果不太好。
全屏截图非常大。典型屏幕上有超过 700 万像素。而心形很小,大约 70x60 像素。要搜索的表面积太大了。在那片像素海洋里,有很多东西隐约像心形。你会得到太多误检。
检测技术没问题。**搜索空间**才是问题。屏幕上充满了噪声。搜索的区域越大,找到的噪声就越多。
## 缩小搜索空间
解决方法是停止搜索整个屏幕。相反,**找到屏幕上容易检测的东西**,并用它们来确定心形必须在什么地方。
在 Instagram 上,有两样东西始终容易找到:
- 每篇帖子右上角的**三点菜单**(⋯)。它很小,对比度高,视觉上独特。始终存在。
- 每篇帖子底部的**操作栏**(点赞/评论/分享)。它是一个宽而可预测的图标模式。
两者都可以用基本的模板匹配在毫秒内找到。但我们关心的不是它们本身。我们关心它们告诉我们什么:三点菜单直接位于心形列的上方。操作栏直接位于心形列的下方。如果我们知道这两个地标的位置,我们就确切知道心形在哪里。它们就在两者之间的垂直条带中。
``
crop.x = triple_dots.x
crop.y = triple_dots.y + triple_dots.height
crop.width = triple_dots.width
crop.height = action_bar.y - crop.y - action_bar.height x 0.2
``
搜索区域中剩下的只有真正的心形和恰好出现在那列中的东西。
由于裁剪区域是从地标在屏幕上的实际位置推导出来的,而不是硬编码的,它会自动适应每篇帖子。地标可能根据帖子内容上下移动,但它们与心形之间的几何关系始终不变。
## 滑动窗口
现在搜索空间又小又干净,你可以运行滑动窗口。将心形模板按像素滑动扫过搜索区域。对每个位置评分。匹配越好,越可能是心形。
滑动窗口故意设置得宽松,以捕捉每一个可能的心形。但这也意味着它会捕捉到不是心形的东西。
Instagram 上的心形都在一个垂直列中。每一个都是。大多数检测结果都在那条线上。不在线上的都是离群值:
``
· · · · · · · ·
· · · · · ♡ · · ← 大多数检测结果在这里
· · · · · · · ·
· · · · · ♡ · · ← 同一列
· ✕ · · · · · · ← 离群值(偏左)
· · · · · ♡ · · ← 同一列
· · · · · · · ·
· · · · · ♡ · · ← 同一列
· · · · · · · ·
· · · · · · ✕ · ← 离群值(偏右)
· · · · · ♡ · · ← 同一列
· · · · · · · ·
``
心形(♡)聚集在一个 X 坐标上。误检(✕)分散在各处。滑动窗口认为它们看起来像心形,但它们不在那一列。
所以我们找出所有检测结果中最常见的 X,即共识线,并丢弃任何偏离超过 10 像素的结果。这其实就是找 X 值的众数,然后把其余的都当作噪声。几行代码就能消除几乎所有误检。滑动窗口故意设得宽松以捕捉每个可能的心形,而这个过滤器则很严格,以移除所有不是心形的东西。
## 完整检测流程
``
截图
→ 通过模板匹配找到三点菜单和操作栏
→ 根据它们的位置计算裁剪区域
→ 裁剪成 60 像素宽的条带
→ 以多尺度运行滑动窗口模板匹配
→ 垂直对齐过滤
→ 去重,从上到下排序
→ 返回 [{x, y}, ...]
``
演示视频展示了整个过程:
每个检测到的心形变成一个点击坐标。服务器以 JSON 形式返回它们。客户端将光标移动到每个位置并点击。
## 封号
账户在几天内就被封了。
我尝试了一些让它不那么明显的方法:贝塞尔曲线实现自然光标移动、随机化点击时机、在操作之间闲逛、在关注按钮上添加随机偏移。所有常见的技巧。
当然,这没用。Instagram 在机器人检测上花了很多钱,他们的团队全职在搞这个。
但这次实验仍然有趣。你能把摄像头对准任何屏幕,仅用计算机视觉和光标自动化来与之交互吗?答案是肯定的。
## 备注
阅读代码 (https://github.com/florianherrengt/instabot)
如果你只想让某个东西工作起来,看看 Oculix (https://github.com/oculix-org) 吧。
相似文章
@sairahul1: https://x.com/sairahul1/status/2066809666592718879
一份关于构建AI驱动内容机器的详细指南,该机器从TikTok和Instagram等平台抓取热门内容,使用AI生成平台原生帖子,并利用ScrapeCreators、Kie.ai和Postiz等工具自动安排发布计划。
Instagram 的 Adam Mosseri:如果你不喜欢 AI,“那它就不该出现在你的信息流里”
Instagram 负责人 Adam Mosseri 认为,不喜欢 AI 内容的用户应该能够避免在信息流中看到它,但平台不会过滤掉这些内容,只会打上 AI 生成的标签。他承认检测存在挑战,并建议改为标记非 AI 的“相机拍摄内容”。
Meta在遭到强烈反对后移除Instagram上具争议的AI功能
Meta移除了一项在Instagram上具有争议的AI功能,该功能允许用户在未经通知的情况下,通过引用公开的Instagram账户生成图像,此前该功能遭到广泛反对和审查。
AI在现实世界中的部署
Reddit已部署AI/LLM实时分析所有帖子和评论中的仇恨言论与有害内容,能在几秒内自动封禁用户,这与Instagram和Facebook形成对比,后两者并未如此严格地应用此类分析。
如何屏蔽部分机器人账户
一份关于在不同平台上屏蔽自动机器人账户方法的指南。