話說又要過年了,現在過年可沒有小時候的味道了,小時候只顧著放鞭炮,現在只顧著各個群里蹲紅包,

但是手動搶肯定沒戲,畢竟手can誰也沒辦法!
那就只能試試能不能通過編程的方式實作自動化搶紅包了!

跟小編一樣財迷的鐵汁們 可以往下滑了????
正文
現在捋一下思路,微信群發紅包的基本情況是:每一次發紅包都會與上一次有一些時間間隔,實作自動化搶紅包的基本思路如下:
-
手動清空之前微信群中的紅包記錄
-
執行自動化搶紅包程式,進入發紅包的微信群(可以暫時將其頂置),回圈檢測群中是否有紅包,發現紅包則點擊紅包
-
檢測紅包是否被領取(判斷點擊后的紅包是否出現開字),如果紅包未被領取,則點擊開字領取紅包,再回傳群聊界面洗掉已被領取的紅包記錄;如果紅包已被領取,則回傳群聊界面洗掉已被領取的紅包記錄,之后以此類推
環境準備
本文主要環境如下
-
Win7
-
小米5s
-
Python3.7
-
Appium1.5
-
微信7.0.20
代碼實作
接下來我們開始手動敲代碼,下面一起來看一下具體實作,
首先看一下配置資訊,代碼實作如下:
desired_caps = { "platformName": "Android", # 系統 "platformVersion": "8.0.0", # 系統版本號 "deviceName": "m5s", # 設備名 "appPackage": "com.tencent.mm", # 包名 "appActivity": ".ui.LauncherUI", # app 啟動時主 Activity 'unicodeKeyboard': True, # 使用自帶輸入法 'noReset': True # 保留 session 資訊,可以避免重新登錄 }
因為點擊紅包后需要判斷點擊后的紅包是否被領取,即是否有開字,如圖所示:

所以我們定義一個判斷元素是否存在的方法,代碼實作如下:
# 判斷元素是否存在 def is_element_exist(driver, by, value): try: driver.find_element(by=by, value=https://www.cnblogs.com/hahaa/archive/2023/01/13/value) except Exception as e: return False else: return True
因為紅包無論是被自己領取還是被他人領取,之后都要洗掉領取后的紅包記錄,所以我們再來定義一個洗掉已領取紅包的方法,代碼實作如下:
# 洗掉領取后的紅包記錄 def del_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()
長按領取后紅包的效果圖如下:

點擊長按后顯示的洗掉項之后的效果圖如下:

我們接著來看一下進入紅包群后的主程式實作,代碼如下:
while True: # 有紅包則點擊
# 現在不是都放假了,所以給大家準備了幾百本Python的PDF電子書,什么型別都有,
# 還有Python的視頻教程、原始碼等等,直接在這個Python學習交流q裙:872937351 自取就好了,
wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/r8"))).click() print("點擊了紅包") # 判斷紅包是否被領取 is_open = is_element_exist(driver, "id", "com.tencent.mm:id/den"); print("紅包是否被領取:", is_open) if is_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) # 洗掉領取過的紅包記錄 del_red_envelope(wait, driver)
好了,今天的分享到這里就結束了, 兄弟們快去試試吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/541922.html
標籤:其他
上一篇:aBiu的筆記匯總
