当前位置: 首页 > 后端技术 > Python

使用Python实现微信自动抢红包,再也不用担心抢不到红包了

时间:2023-03-25 21:51:21 Python

1。概述刚收到两个消息,一个好消息,一个坏消息。先说好消息吧。好消息是微信群里有人要发红包。开心~不过想想前几次红包都没领到。这次???他不由自主地叹了口气……片刻之后,他内心的情绪才渐渐平复下来。我想:“我就这么放弃了吗?我晚餐还吃方便面(感觉被方便面冒犯了)?但是手动抓肯定是没用的,毕竟没有人能做到!然后我只能试试能不能编程了,自动抢红包的方式实现了!现在,我们想一想,微信群发红包的基本情况是:每次发红包和上次发红包之间会有一定的时间间隔,自动抢红包的基本思路如下:手动清除上一个微信群执行红包记录的自动抢红包程序,进入发红包的微信群(可以暂时置顶),查看群内是否有红包,并点击红包查看是否收到红包(点击开子后判断红包是否出现),如果没有收到红包,点击开子领取红包,然后返回群聊界面删除收到的红包记录;如果已经领取了红包,则返回群聊界面删除收到的红包记录,依次类推2.Environment主环境文章如下:Win7小米5sPython3.7Appium1.5WeChat7.0.20环境搭建不熟悉的可以看一下:Python+Appium自动化运行微信入门和我用Python发现删我大家上微信,自动删除。3.实现接下来我们开始手动敲代码,一起来看看具体的实现。先看配置信息,代码实现如下:desired_caps={"platformName":"Android",#system"platformVersion":"8.0.0",#系统版本号"deviceName":"m5s",#devicename"appPackage":"com.tencent.mm",#packagename"appActivity":".ui.LauncherUI",#app启动时的主要activity'unicodeKeyboard':True,#使用内置输入法'noReset':True#保留session信息,可以避免重新登录}因为点击红包后,需要判断点击的红包是否收到,即是否有openword,如图:所以我们定义一个判断元素是否存在的方法,代码实现如下:#judgingelementDoesdefis_element_exist(driver,by,value):try:driver.find_element(by=by,value=value)exceptexceptionase:returnFalseelse:returnTrue因为红包是自己收到的还是别人收到的,红包reco之后收到红包后的rd一定要删除,所以我们定义一个删除收到的红包的方法。代码实现如下:#删除收到的红包记录defdel_red_envelope(wait,driver):#长按收到的红包r8=wait.until(EC.element_to_be_clickable((By.ID,"com.tencent.mm:id/r8")))TouchAction(driver).long_press(r8).perform()#长按后点击删除wait.until(EC.element_to_be_clickable((By.ID,"com.tencent.mm:id/gam"))).click()#点击弹出框的删除选项wait.until(EC.element_to_be_clickable((By.ID,"com.tencent.mm:id/doz"))).click()长按领取红包效果图如下:被删除的物品点击后显示效果图长按如下:我们接下来看一下进入红包群后主程序的实现。代码如下:whileTrue:#如果有红包,点击wait.until(EC.element_to_be_clickable((By.ID,"com.tencent.mm:id/r8"))).click()打印("点击红包")#判断是否收到红包is_open=is_element_exist(driver,"id","com.tencent.mm:id/den");print("是否收到红包:",is_open)ifis_open==True:#没有收到红包,打开红包wait.until(EC.element_to_be_clickable((By.ID,"com.tencent.mm:id/den"))).click()#返回群聊wait.until(EC.element_to_be_clickable((By.ID,"com.tencent.mm:id/dm"))).click()#删除收到的红包记录del_red_envelope(wait,driver)else:#返回群聊driver.keyevent(4)#删除收到的红包记录