其他
微信群总有人发广告?用Python写一个自动化机器人消灭他
The following article is from 早起Python Author 刘早起
第一回合
没有设置微信号 头像为网红女生 微信名为特殊符号或者表情 没发过朋友圈 没有朋友圈背景图 通过后不会有除进群申请外的其他回复
wxpy
还是itchat
操作起来应该都不复杂,但是事实确证明我还是太年轻了为了你的帐号安全,此微信号已不允许登录网页微信。
你可以使用Windows微信或Mac微信在电脑端登录。
</message></error>
第二回合
Requests
对付一些恶心的反爬措施,不如Selenium
操作起来方便。所以在发现想使用基于微信API的思路失效后,我将目光转向了相对笨一点的方法————pynput
pip install pynput
即可,使用起来也很简单,对于鼠标操作只依赖坐标,看个demo👇pynput
并实例一个鼠标控制器,接着将微信在状态栏的位置提交给mouse.position
,这样鼠标就会移动到该位置,再使用mouse.press
来模拟鼠标点击即可自动打开微信。那么问题来了,如何获得我想要的位置的坐标?总不能一点一点试吧!Controller
来控制鼠标,也可以监控鼠标,比如使用下面的代码就可以记录下程序启动后鼠标的每一个点击操作所在的位置👇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 点击需要的群聊 依次点击每一个群成员头像 移动到微信号的位置 双击该微信号 复制该微信号判断是否为初始微信号
Command + C
完成复制操作from pynput.keyboard import Controller as Controller1
keyboard = Controller1()
with keyboard.pressed(Key.cmd):
keyboard.press('c')
keyboard.release('c')
command+c
来粘贴到另一个编辑中复杂过程,我们可以使用第三方库pyperclip
,直接通过下面两行代码即可将复制好的文字转为字符串pyperclip.paste()
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}不是广告号")
写在最后
pynput
有着和selenium
同样的缺点,那就是由于模拟真人操作而导致的速度慢,并且它的定位方式仅支持坐标,所以还需要保证在操作的过程中微信窗口不可以被移动,否则之前记录的元素将全部失效,此处建议开发者可以升级更多的定位方式。更多精彩推荐