1. 程式人生 > >selenium製作——Q寵大樂鬥輔助指令碼

selenium製作——Q寵大樂鬥輔助指令碼

前段時間,騰訊宣佈停止樂鬥Ⅱ和QQ寵物的運營,然後就訂閱號裡就被各種回憶殺的推文刷屏了。今天也來稱蹭一下”熱點”,雖然有點晚。 都說“陪伴是最長情的告白”,那些陪我們走過年少時光的小遊戲,你還記得多少? 可能很多90後都玩過樂鬥Ⅱ。但是很遺憾,今天的主角不是它,而是它的兄弟——“Q寵大樂鬥”。今天分享的是:如何使用前幾天分享的selenium的奇淫技巧,讓“Q寵大樂鬥”自動執行,自動打遊戲。

具體步驟

第一步:分析連結,因為直接使用網頁動畫版(也就是上圖)的網址的話,會Flash動畫,可能會因為網路的問題,導致延遲,從而影響程式的執行。所以選擇直接關注微信公眾號“Q寵大樂鬥”,從開始遊戲的介面進去,這樣就可以進入文字版的遊戲,減少不必要的網速佔用。

第二步:通過審查元素找到相應的元素,使用selenium進行定位控制

第三步:設定定時任務,讓遊戲指令碼每天定時執行,遊戲自動化,實現躺贏的最終理想,哈哈

注意事項:

  1. 因為等級原因,有一些功能可能對低等級不開放,所以這個遊戲需要“私人訂製”
  2. 有一些獎勵是需要等到了一定的活躍度才可以完領取,所以需要一定的遊戲策略,否則就需要在程式中進行多次判斷

程式碼書寫

因為這個遊戲的任務有點多,所以分模組來寫比較好,這樣邏輯不會亂,程式碼的可讀性也更強一點

登入模組: 通過上圖可以找出登入的元素位置,直接使用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