微信群总是有人发广告?我用Python写个机器人消灭他!
恋习Python
共 3622字,需浏览 8分钟
· 2020-09-18
序幕
或者是一声不吭的去骚扰每一个群成员?虽然不清楚是什么能够驱使他们这样不折不扣的努力成为最强微信群牛皮癣(可能是钞能力),但在经历太多次的骚扰之后,我开始思考是否可以用Python消灭他们。
第一回合
没有设置微信号 头像为网红女生 微信名为特殊符号或者表情 没发过朋友圈 没有朋友圈背景图 通过后不会有除进群申请外的其他回复
wxpy
还是itchat
操作起来应该都不复杂,但是事实确证明我还是太年轻了1203
为了你的帐号安全,此微信号已不允许登录网页微信。
你可以使用Windows微信或Mac微信在电脑端登录。
第二回合
Requests
对付一些恶心的反爬措施,不如Selenium
操作起来方便。所以在发现想使用基于微信API的思路失效后,我将目光转向了相对笨一点的方法————pynput
pip install pynput
即可,使用起来也很简单,对于鼠标操作只依赖坐标,看个demo?pynput
并实例一个鼠标控制器,接着将微信在状态栏的位置提交给mouse.position
,这样鼠标就会移动到该位置,再使用mouse.press
来模拟鼠标点击即可自动打开微信。那么问题来了,如何获得我想要的位置的坐标?总不能一点一点试吧!Controller
来控制鼠标,也可以监控鼠标,比如使用下面的代码就可以记录下程序启动后鼠标的每一个点击操作所在的位置?from pynput import mouse
def 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 False
while 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()
from pynput.mouse import Button, Controller
import time
from pynput.keyboard import Key
from pynput.keyboard import Controller as Controller1
import pyperclip
mouse = 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}不是广告号")
可以看到成功将早小起的微信从广告号中排除
可以看到最终是找到了6个疑似广告号的微信,接下来通过其他规则的手动判断最终将两个用户判定为广告高风险用户并移除。
写在最后
pynput
有着和selenium
同样的缺点,那就是由于模拟真人操作而导致的速度慢,并且它的定位方式仅支持坐标,所以还需要保证在操作的过程中微信窗口不可以被移动,否则之前记录的元素将全部失效,此处建议开发者可以升级更多的定位方式。关注恋习Python,Python都好练
好文章,我在看❤️
评论
某大公司为逼迫员工离职,竟然把他的工位安排到厕所旁,没想到他直接开始记录领导的如厕时间,还发到公司大群...
上一篇:字节的跳动职级与薪资(2024年)我们与公司间的合作,宛如两艘船只在茫茫大海上相互依靠,共同抵御风浪,携手驶向成功的彼岸。然而,当航向开始产生分歧,或是波涛汹涌的风浪改变了我们的初衷,我们或许应当冷静地选择和平分手,而非在风雨中硬撑。最近,一位网友的遭遇引起了广大职场人的关注和热议。这位网友
开发者全社区
0
金融研究 | 使用Python测量关键审计事项的「信息含量」
Tips: 公众号推送后内容只能更改一次,且只能改20字符。如果内容出问题,或者想更新内容, 只能重复推送。为了更好的阅读体验,建议阅读本文博客版, 链接地址https://textdata.cn/blog/2023-01-13-information-content-of-critical-aud
大邓和他的Python
0
我看阿里的年终奖总算发了!
到4月底了,这两天看朋友圈,发现阿里的年终奖终于发了,问了问老同学,也从网上检索了不少信息,基本搞清楚了阿里今年的年终奖情况。近来来阿里一些集团对绩效等级做了较大的调整,以前的旧绩效系统中,绩效分为3.25、3.5、3.75、4和5五个等级,其中4和5是较高绩效等级,较少见。而且之前3.5绩效内部划
公子龙
0
金融研究(更新) | 使用Python构建关键审计事项的「信息含量」
Tips: 公众号推送后内容只能更改一次,且只能改20字符。如果内容出问题,或者想更新内容, 只能重复推送。为了更好的阅读体验,建议阅读本文博客版, 链接地址https://textdata.cn/blog/2023-01-13-information-content-of-critical-aud
大邓和他的Python
0
偷偷告诉你如何一台电脑开多个微信!
大家好,我是轩辕。前几天在粉丝群里,有人问我是怎么在一台电脑上同时登录两个微信的?正好之前写过一篇文章,分析过原理,分享给没看过的小伙伴学习一下。手机端多开微信估计很多人都知道,像华为、小米等手机系统都对此做了支持,不过在运行Windows系统的电脑上怎么启动两个微信呢?其实很简单,你只需要写一个批
编程技术宇宙
0
老爸嘲讽我了,写破代码一年就挣十几万,他在工地带50个工人,一个月光人头费就3万,让我滚回去跟他干!
点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接,进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群来自:网络,侵删有个网友的父亲是做工程的,天天就嘲笑他,说他天天写着破代码有啥用,一年就拿个十多万的死工资,然后告诉他自己在工地里面带了50个工人,一个月能抽三万
程序源代码
0
谷歌员工爆料 Python 基础团队原地解散
转自 | 机器之心编辑 | 蛋酱什么?谷歌解雇了整个 Python 基础团队?「当与你直接共事的每个人,包括你的主管,都被裁员 —— 哦,是职位被削减,而你被要求安排他们的替代者入职,这些人被告知在不同的国家担任同样的职位,但他们并不为此感到高兴,这是很艰难的一天。」发布这一动态的 Tho
机器学习算法与Python实战
0
我发现 Lombok的几个骚操作,哈哈好用
大家好,我是小富~前言本文不讨论对错,只讲骚操作。有的方法看看就好,知道可以这么用,但是否应用到实际开发中,那就仁者见仁,智者见智了。一万个读者就会有一万个哈姆雷特,希望这篇文章能够给您带来一些思考。耐心看完,你一定会有所收获。@onX例如 onConstructor, oMet
程序员内点事
0