selenium製作——Q寵大樂鬥輔助指令碼
前段時間,騰訊宣佈停止樂鬥Ⅱ和QQ寵物的運營,然後就訂閱號裡就被各種回憶殺的推文刷屏了。今天也來稱蹭一下”熱點”,雖然有點晚。 都說“陪伴是最長情的告白”,那些陪我們走過年少時光的小遊戲,你還記得多少? 可能很多90後都玩過樂鬥Ⅱ。但是很遺憾,今天的主角不是它,而是它的兄弟——“Q寵大樂鬥”。今天分享的是:如何使用前幾天分享的selenium的奇淫技巧,讓“Q寵大樂鬥”自動執行,自動打遊戲。
具體步驟
第一步:分析連結,因為直接使用網頁動畫版(也就是上圖)的網址的話,會Flash動畫,可能會因為網路的問題,導致延遲,從而影響程式的執行。所以選擇直接關注微信公眾號“Q寵大樂鬥”,從開始遊戲的介面進去,這樣就可以進入文字版的遊戲,減少不必要的網速佔用。
第二步:通過審查元素找到相應的元素,使用selenium進行定位控制
第三步:設定定時任務,讓遊戲指令碼每天定時執行,遊戲自動化,實現躺贏的最終理想,哈哈
注意事項:
- 因為等級原因,有一些功能可能對低等級不開放,所以這個遊戲需要“私人訂製”
- 有一些獎勵是需要等到了一定的活躍度才可以完領取,所以需要一定的遊戲策略,否則就需要在程式中進行多次判斷
程式碼書寫
因為這個遊戲的任務有點多,所以分模組來寫比較好,這樣邏輯不會亂,程式碼的可讀性也更強一點
登入模組: 通過上圖可以找出登入的元素位置,直接使用selenium進行登入操作。
from time import sleep from selenium import webdriver URL = 'http://ui.ptlogin2.qq.com/cgi-bin/login?appid=614038002&style=9&s_url=http%3A%2F%2Fdld.qzapp.z.qq.com%2Fqpet%2Fcgi-bin%2Fphonepk%3Fcmd%3Dindex%26channel%3D0' username = '賬號' pwd = '密碼' driver = webdriver.Chrome() driver.implicitly_wait(5) #設定隱式等待,5秒 #登入模組 def login(url, username, pwd): driver.get(url) driver.find_element_by_id('u').clear() driver.find_element_by_id('u').send_keys(username) driver.find_element_by_id('p').clear() driver.find_element_by_id('p').send_keys(pwd) driver.find_element_by_id('go').click() sleep(2) #入口函式 if __name__ == "__main__": login(URL, username, pwd) # 登入
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
上面程式碼中的第10行是設定等待。直白一點就是:如果 WebDriver沒有在 DOM中找到元素,將繼續等待,超出設定時間後則丟擲找不到元素的異常
其他模組
之前說過,等級不同,任務也不同。所以我這裡就放上幾個共同的模組。具體的任務看下圖
每日獎勵模組:
from selenium.common.exceptions import NoSuchElementException # 每日獎勵 def mei_ri_jing_yan(): try: driver.find_element_by_link_text('每日獎勵').click() except NoSuchElementException: print('沒有找到每日獎勵') sleep(1) try: for i in range(0, 2): driver.find_element_by_xpath('//*[@id="id"]/p[1]/a[2]').click() sleep(1) except NoSuchElementException: print('沒有找到每日獎勵領取按鈕') driver.find_element_by_link_text('返回大樂鬥首頁').click()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
樂鬥好友模組:
# 樂鬥好友
def flight():
for i in range(6, 16):
myfriend = driver.find_element_by_link_text('好友')
myfriend.click()
driver.find_element_by_link_text("下頁").click()
sleep(1)
driver.find_element_by_xpath(' // *[ @ id = "id"] / a[{}]'.format(i)).click()
sleep(1)
driver.find_element_by_link_text('返回大樂鬥首頁').click()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
其他的模組我這裡就不放程式碼了,畢竟等級不一樣,程式碼可能沒有通用性。而且主要的方法就是定位元素,前篇推文已經詳細介紹了,主要是設定等待時長和注意異常情況的判斷處理就可以了。
計劃任務
具體的計劃任務教程,參考:selenium定位元素。設定好時間,因為這個遊戲的寵物是靠體力來進行的並且每天只能進行一次任務,所以每天定時打一次就可以了。
最後
今天這個自動打遊戲的demo,只是單純的練習一下selenium操作;當然也順便回憶一下90後的生活,相信有一部分90後小時候還是會玩過這個遊戲的。
可能有人就覺得這遊戲有點low(確實有點low),那我只能昧著良心回一句:哥玩的不是遊戲,是情懷,懂不懂 github地址:點選跳轉
--------------------- 本文來自 DonLex 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/stormdony/article/details/81358909?utm_source=copy