首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

微信群总有人发广告?用Python写一个自动化机器人消灭他

作者 | 刘早起

出品 | 早起Python(ID: zaoqi-python)

或者是一声不吭的去骚扰每一个群成员。

虽然不清楚是什么能够驱使他们这样不折不扣的努力成为最强微信群牛皮癣(可能是钞能力),但在经历太多次的骚扰之后,我开始思考是否可以用Python消灭他们。

第一回合

其实一开始的思路很简单,总共分两步,首先成功识别出这些人再用Python将他们踢出去即可。

但是这两步,每一步都不简单,先来说说第一步如何准确的识别这些用户,网上没有数据也没有一个好的鉴别标准,只能用我的大脑完成特征识别。经过这几个月,近百份发广告用户的样本训练,我这个“人工智能”基本可以判断一个非正常用户至少满足下面几条中的三条以上

没有设置微信号

头像为网红女生

微信名为特殊符号或者表情

没发过朋友圈

没有朋友圈背景图

通过后不会有除进群申请外的其他回复

不知从何时起,虽然这些库还能安装使用但是微信基本已经禁止了大部分人的网页版微信登陆权限,因此当我使用多个微信号分别扫完登陆微信的二维码之后,无一例外的提示我

为了你的帐号安全,此微信号已不允许登录网页微信。

你可以使用Windows微信或Mac微信在电脑端登录。

第二回合

如果你经常写Python爬虫,那么你会知道在有些情况下,与其使用对付一些恶心的反爬措施,不如操作起来方便。所以在发现想使用基于微信API的思路失效后,我将目光转向了相对笨一点的方法————

pynput是一款使用Python来控制和监控电脑鼠标、键盘的第三方库,说到这里你大概明白我想怎么做了,直接用API取数据搞不定,那么我就像Selenium一样,模拟点击一个一个好友来实现我想要的操作。

下面简单说一下这个库,因为没有太多依赖库所以安装起来很简单,直接即可,使用起来也很简单,对于鼠标操作只依赖坐标,看个demo

就像上面GIF演示的一样,先导入并实例一个鼠标控制器,接着将微信在状态栏的位置提交给,这样鼠标就会移动到该位置,再使用来模拟鼠标点击即可自动打开微信。那么问题来了,如何获得我想要的位置的坐标?总不能一点一点试吧!

pynput除了使可以使用来控制鼠标,也可以监控鼠标,比如使用下面的代码就可以记录下程序启动后鼠标的每一个点击操作所在的位置

from pynput import mouse

def on_move(x, y ):

print('鼠标移动至 '.format(

(x,y)))

def on_click(x, y , button, pressed):

print(' 在坐标 '.format('鼠标点击' if pressed else '鼠标释放', (x, y)))

if not pressed:

return False

while True:

with mouse.Listener(on_move = on_move,on_click = on_click) as listener:

listener.join()

那么接下来的任务就简单了,我们只需要保持微信窗口不移动,在记录下每一个关键位置的坐标(微信图标位置,群聊窗口位置,单个群成员头像位置)之后,比如我们想对上面说的第一条规则进行判断即获取每一个群成员微信号是否设置,就可以按照模拟以下操作实现:

点击微信app

点击需要的群聊

依次点击每一个群成员头像

移动到微信号的位置

双击该微信号

复制该微信号判断是否为初始微信号

from pynput.keyboard import Key

from pynput.keyboard import Controller as Controller1

keyboard = Controller1()

with keyboard.pressed(Key.cmd):

keyboard.press('c')

keyboard.release('c')

但是粘贴则不需要使用pynput通过模拟来粘贴到另一个编辑中复杂过程,我们可以使用第三方库,直接通过下面两行代码即可将复制好的文字转为字符串

import pyperclip

pyperclip.paste()

在将群成员的微信号转换为字符串后,不论我们是通过判断字符串的长度还是用正则表达式或者是其他的方法都可以轻松的判断该成员的微信号是否为初始微信号,实现规则1的判断,下面的代码与动态图就是获取第一个群成员微信号的完整过程

可以看到成功将早小起的微信从广告号中排除

那么接下来只需要记录下每两个群成员之间间隔的坐标距离,之后循环去模拟滚动或者下拉来实现上述过程,就可以将群里所有成员的微信号根据规则1进行判断,找到异常的那些成员单独进行判断

可以看到最终是找到了6个疑似广告号的微信,接下来通过其他规则的手动判断最终将两个用户判定为广告高风险用户并移除。

写在最后

通过上面的操作,虽然成功的踢出了两个疑似广告号,但总体来说还是败了。因为依旧很难去判断是否真的踢对了人,如果踢错了,那么则粉丝-1,同时也可以发现想用Python准确找到群里的牛皮癣还是非常困难的,使用pynput最多可以完成微信名、微信号及头像(使用识图API)的判断,但是朋友圈隐藏的更多信息却很难提取挖掘。

同时有着和同样的缺点,那就是由于模拟真人操作而导致的速度慢,并且它的定位方式仅支持坐标,所以还需要保证在操作的过程中微信窗口不可以被移动,否则之前记录的元素将全部失效,此处建议开发者可以升级更多的定位方式。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200909A0N7HI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券