怎么用Python写一个自动化机器人消灭广告
这篇文章主要介绍"怎么用Python写一个自动化机器人消灭广告",在日常操作中,相信很多人在怎么用Python写一个自动化机器人消灭广告问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用Python写一个自动化机器人消灭广告"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
第一回合
其实一开始的思路很简单,总共分两步,首先成功识别出这些人再用Python将他们踢出去即可。
但是这两步,每一步都不简单,先来说说第一步如何准确的识别这些用户,网上没有数据也没有一个好的鉴别标准,只能用我的大脑完成特征识别。经过这几个月,近百份发广告用户的样本训练,我这个"人工智能"基本可以判断一个非正常用户至少满足下面几条中的三条以上:
没有设置微信号
头像为网红女生
微信名为特殊符号或者表情
没发过朋友圈
没有朋友圈背景图
通过后不会有除进群申请外的其他回复
并且根据历史数据,符合1、3条的用户有极大概率为小广告爱好者,那么接下来要做的就是用Python写代码找出微信里面的这些人。在总结出这一规律后很乐观的认为实现这一需求并不困难,因为我在几年前就曾拿过Python研究微信好友,不论是wxpy还是itchat操作起来应该都不复杂,但是事实确证明我还是太年轻了
不知从何时起,虽然这些库还能安装使用但是微信基本已经禁止了大部分人的网页版微信登陆权限,因此当我使用多个微信号分别扫完登陆微信的二维码之后,无一例外的提示我
1203 为了你的帐号安全,此微信号已不允许登录网页微信。 你可以使用Windows微信或Mac微信在电脑端登录。
这就让人头疼了,总不能手动的去一个一个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 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_moveon_move = on_move,on_clickon_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 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}不是广告号")
可以看到成功将早小起的微信从广告号中排除
那么接下来只需要记录下每两个群成员之间间隔的坐标距离,之后循环去模拟滚动或者下拉来实现上述过程,就可以将群里所有成员的微信号根据规则1进行判断,找到异常的那些成员单独进行判断。
可以看到最终是找到了6个疑似广告号的微信,接下来通过其他规则的手动判断最终将两个用户判定为广告高风险用户并移除。
到此,关于"怎么用Python写一个自动化机器人消灭广告"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!