点击上方“菜鸟学Python”,选择“星标”公众号

超级无敌干货第一时间推给你!!!

序幕

微信群牛皮癣,指的是在微信群里毫无下限的群发小广告的用户,是微信群主最痛恨的一波人。如果熟悉早起的读者可以知道我有一个技术交流群,但是自从建群以来就饱受小广告的困扰。他们伪装成正常人混进群然后不停的发送广告轰炸,严重的打乱了群内的技术交流气氛????

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

第一回合

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

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

  • 没有设置微信号

  • 头像为网红女生

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

  • 没发过朋友圈

  • 没有朋友圈背景图

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

并且根据历史数据,符合1、3条的用户有极大概率为小广告爱好者,那么接下来要做的就是用Python写代码找出微信里面的这些人。在总结出这一规律后很乐观的认为实现这一需求并不困难,因为我在几年前就曾拿过Python研究微信好友,不论是wxpy还是itchat操作起来应该都不复杂,但是事实确证明我还是太年轻了

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

<error><ret>1203</ret><message>
为了你的帐号安全,此微信号已不允许登录网页微信。你可以使用Windows微信或Mac微信在电脑端登录。
</message></error>

这就让人头疼了,总不能手动的去一个一个check我的几千个微信好友吧,于是我开始思考是否有其他的解决办法。

第二回合

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

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

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

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

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

from pynput import mousedef on_move(x, y ):print('鼠标移动至 {0}'.format((x,y)))def on_click(x, y , button, pressed):print('{0} 在坐标 {1}'.format('鼠标点击' if pressed else '鼠标释放', (x, y)))if not pressed:return Falsewhile True:with mouse.Listener(on_move = on_move,on_click = on_click) as listener:listener.join()

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

  • 点击微信app

  • 点击需要的群聊

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

  • 移动到微信号的位置

  • 双击该微信号

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

在上面的过程中,值得说的是最后一步,复制我们可以使用pynput中的键盘控制器,在双击选中对应微信号之后通过下面的代码实现模拟键盘输入Command + C完成复制操作

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通过模拟command+c来粘贴到另一个编辑中复杂过程,我们可以使用第三方库pyperclip,直接通过下面两行代码即可将复制好的文字转为字符串

import pyperclip
pyperclip.paste()

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

from pynput.mouse import Button, Controller
import time
from pynput.keyboard import Key
from pynput.keyboard import Controller as Controller1
import pyperclipmouse = Controller()# 点击微信
mouse.position = (1046.14453125, 4.546875)
time.sleep(2)
mouse.press(Button.left)
mouse.release(Button.left)#点击头像
mouse.position = (1194.140625, 441.05859375)
time.sleep(1)
mouse.press(Button.left)
mouse.release(Button.left)# 点击选中文本
mouse.position = (965.60546875, 284.0390625)
time.sleep(1)
mouse.click(Button.left, 2)keyboard = Controller1()with keyboard.pressed(Key.cmd):keyboard.press('c')keyboard.release('c')time.sleep(1)wechatid = pyperclip.paste()
print(f"微信号{wechatid}疑似广告号" if len(wechatid) > 20 else f"微信号{wechatid}不是广告号")

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

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

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

写在最后

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

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

需要源码,在后台回复 【机器人】 获取。

end

近期八大热门:发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片!
盗墓热再起!我爬取了6万条《重启之极海听雷》的评论,发现了这些秘密
用Python一键生成炫酷九宫格图片,火了朋友圈
菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记
Github获8300星!用Python开发的一个命令行的网易云音乐
一道Python面试题,硬是没憋出来,最后憋出一身汗!卧槽!Pdf转Word用Python轻松搞定!教你6招,不错的Python代码技巧!
由 菜鸟学Python 原班人马打造的公众号:程序员GitHub,现已正式上线!
接下来我们将会在该公众号上,为大家分享GitHub上优质的开源神器,程序员圈的趣事,坚持每天一篇原创文章的输出,感兴趣的小伙伴可以关注一下哈!

长按 2 秒,输入【福利】

获取程序员必读好书

点这里,领取新手福利

微信群总是有人发广告?我用Python写个机器人消灭他!相关推荐

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

    作者 | 刘早起 出品 | 早起Python(ID: zaoqi-python) 微信群牛皮癣,指的是在微信群里毫无下限的群发小广告的用户,是微信群主最痛恨的一波人.如果熟悉早起的读者可以知道我有一个 ...

  2. python自动发微信新闻_微信群总有人发广告?用Python写一个自动化机器人消灭他...

    作者 | 刘早起 出品 | 早起Python(ID: zaoqi-python) 或者是一声不吭的去骚扰每一个群成员. 虽然不清楚是什么能够驱使他们这样不折不扣的努力成为最强微信群牛皮癣(可能是钞能力 ...

  3. 微信群有人发广告?用 Python 写自动化机器人消灭他!

    作者 | 刘早起 来源 | 早起Python( ID:zaoqi-python ) 序幕 微信群牛皮癣,指的是在微信群里毫无下限的群发小广告的用户,是微信群主最痛恨的一波人.如果熟悉早起的读者可以知道 ...

  4. python训练营微信广告_微信群总是有人发广告?看我用Python写一个自动化机器人消灭他!...

    序幕 微信群牛皮癣,指的是在微信群里毫无下限的群发小广告的用户,是微信群主最痛恨的一波人.如果熟悉早起的读者可以知道我有一个技术交流群,但是自从建群以来就饱受小广告的困扰.他们伪装成正常人混进群然后不 ...

  5. 微信群裂变引流文案技巧,这样写文案更吸引粉丝!

    我前面一直强调一句话:人脉即钱脉,不管是做自媒体还是社群,引流的能力等于钱,尤其现在对微商和互联网运营商而言,人脉是一切开始的根基,有的人干这行干的风声水起,有的人确实怎么都撑不上去,里面最主要的原因 ...

  6. python自动回复微信群的消息_程序员用python实现微信消息群发和微信自动回复

    程序员用python实现微信消息群发和微信自动回复 每当逢年过节的时候, 你是否会遇到要给亲朋好友发祝福而不得不重复复制.改名.发送的麻烦, 还有收到许多好友祝福又来不及回复的情况.如果有,这篇文章正 ...

  7. python社区微信群_30行Python代码,打造一个简单的微信群聊助手,简单方便

    大家都知道,最近代码君迷上了Python,一直在研究这门语言,还是那句话,人生苦短,我学Python,今天代码君要教大家一个黑科技,30行代码实现自己定制的微信群聊助手,这个助手有什么用呐,就是用来活 ...

  8. 30行Python代码,打造一个微信群聊助手~

    大家都知道,最近代码君迷上了Python,一直在研究这门语言,还是那句话,人生苦短,我学Python,今天代码君要教大家一个黑科技,30行代码实现自己定制的微信群聊助手,这个助手有什么用呐,就是用来活 ...

  9. 为什么的你的微信群被屏蔽了,这些原因你知道吗?

    近年来,随着微信的兴起,微信群被越来越多的人看重.于是,大大小小的微信群应运而生.自从微信出现了消息免打扰功能,很多群都难逃被屏蔽的厄运. 当你在100人群里发个通知只有极少数人回应的时候,那么可能已 ...

  10. python程序30行_30行Python代码,打造一个简单的微信群聊助手,简单方便

    大家都知道,最近代码君迷上了Python,一直在研究这门语言,还是那句话,人生苦短,我学Python,今天代码君要教大家一个黑科技,30行代码实现自己定制的微信群聊助手,这个助手有什么用呐,就是用来活 ...

最新文章

  1. R语言rep函数重复向量或者列表元素实战
  2. 皮一皮:谈恋爱一定要谨慎...
  3. C#中的DBNull、Null、String.Empty和“”
  4. 5阶无向完全图_运动轿跑风 全新上汽名爵5预告图发布
  5. 一个关于反序列化的小问题
  6. dataguard类型转换与模式转化
  7. 从yield 到yield from再到python协程
  8. HDU2008 数值统计【入门】
  9. python nltk —— 文本预处理
  10. qt mysql驱动不能用了,Qt使用msvc编译MySQL驱动_MySQL
  11. 标 题: 三维游戏里面的自动寻路的算法可能是什么样的?
  12. usb转ttl测试软件,usb转ttl驱动
  13. c++ opencv数字图像处理:频率域滤波--同态滤波
  14. 电脑计算机显示向程序发送命令时出现问题,word提示向程序发送命令时出现问题怎么解决 wo...
  15. 网络数据采集技术snmp/netflow/sflow/network telemetry简介
  16. 程序员如何创新?逆工程师思维
  17. 正则表达式包含某字符串且不包含某些字符串
  18. 塞班s60v3手电筒sisx_塞班s60v3闪光灯手电筒软件可以发给我吗?谢谢!
  19. PC端使用百度地图查询经纬度
  20. 2022字节跳动数仓实习面经(2、3面、hr面)

热门文章

  1. 灵飞经5龙生九子 第二十一章 危机四伏 3
  2. POJ 3233 Matrix Power Series(java)
  3. 在window10中怎样连接扫描仪,扫描证件
  4. layui树形组件渲染
  5. Synaptics 蠕虫病毒
  6. 《CSS 揭秘》每章详细读书笔记
  7. BT500-BT1788主观质量评价
  8. 数据建模: 金融保险数据模型FSDM
  9. matlab图像去毛刺_MATLAB数字图像处理
  10. python猜拳小游戏