強大!用 60 行代碼自動搶微信紅包

文 |?某某白米飯
來源:Python 技術「ID: pythonall」

春節(jié)來到,紅包們大概率在微信各大群中肆虐,大家是否都一樣不搶到紅包們心里就感覺錯過了一個億,可總會被這事那事耽誤而遺憾錯過,下面用 Python 寫一個自動搶紅包代碼

啟動入口
啟動程序的配置和公眾號文章《用 Python + Appium 的方式自動化清理微信僵尸好友》的配置一樣
from?appium?import?webdriver
from?selenium.webdriver.common.by?import?By
from?selenium.webdriver.support.ui?import?WebDriverWait
from?appium.webdriver.common.touch_action?import?TouchAction
from?selenium.webdriver.support?import?expected_conditions?as?EC
desired_capabilities?=?{
????'platformName':?'Android',?#?操作系統(tǒng)
????'deviceName':?'2a254a02',?#?設備?ID
????'platformVersion':?'10.0.10',?#?設備版本號,在手機設置中查看
????'appPackage':?'com.tencent.mm',?#?app?包名
????'appActivity':?'com.tencent.mm.ui.LauncherUI',?#?app?啟動時主?Activity
????'noReset':?True?#?是否保留?session?信息?避免重新登錄
}
driver?=?webdriver.Remote('http://localhost:4723/wd/hub',?desired_capabilities)
#?設置等待超時時間
wait?=?WebDriverWait(driver,?60)
點擊進入聊天窗口
微信在一般情況下最新的聊天記錄將被放在第一個,所以只需要打開第一個聊天窗口檢查有沒有紅包就可以了,用 id 為?com.tencent.mm:id/e3x?可以找到所有的聊天信息,我們?nèi)〉谝粋€聊天群的索引

#?進入第一個聊天框
red_packet_group?=?driver.find_elements_by_id('com.tencent.mm:id/e3x')[0]
red_packet_group.click()
找到紅包
進入聊天群后,紅包圖片檢查是否存在紅包,它的 id 為?com.tencent.mm:id/r2

?#?檢查紅包
reds?=?driver.find_elements_by_id('com.tencent.mm:id/r2')
if?len(reds)?==?0:
????driver.keyevent(4)
搶紅包
點擊紅包后會出現(xiàn)以下 3 種情況
紅包已經(jīng)被自己領取了 紅包手慢了沒搶到 紅包未領取
前兩種情況紅包已經(jīng)失效了,最后一種才是可以打開的紅包
紅包已經(jīng)失效了
在上面代碼中都是用 id 檢查元素是否存在,這里使用查找文字已存入零錢和手慢了判斷紅包是否已經(jīng)失效

#?判斷元素是否存在
def?is_element_exist_by_xpath(driver,?text):
????try:
????????driver.find_element_by_xpath(text)
????except?Exception?as?e:
????????return?False
????else:
????????return?True
#?領取了
is_open?=?is_element_exist_by_xpath(driver,?'//android.widget.TextView[contains(@text,?"已存入零錢")]')
#?沒搶到
is_grabbed?=?is_element_exist_by_xpath(driver,?'//android.widget.TextView[contains(@text,?"手慢了")]')
if?is_open?or?is_grabbed:
????driver.keyevent(4)
打開紅包
打開紅包比較簡單,只需要找到?開?字的 id

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()
刪除紅包
最后我們將紅包刪除,防止紅包被重復打開。當長按紅包時,微信紅包會出現(xiàn)刪除按鈕

TouchAction(driver).long_press(red).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()
總結(jié)
這是學習并使用 Appium 的第三篇文章,Appium 可以將手機操作自動化,大家學廢了嗎?
PS:公號內(nèi)回復「Python」即可進入Python 新手學習交流群,一起?100 天計劃!
老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點一下,如果感覺文章內(nèi)容不錯的話,記得分享朋友圈讓更多的人知道!


【代碼獲取方式】
評論
圖片
表情
