1. 程式人生 > >Python實現自動簽到指令碼

Python實現自動簽到指令碼

實訓課期間忙裡偷閒的學習了python的selenium包,唯一一點不好是要自己去查英文文件,明擺著欺負我這種英語不好的,想著用谷歌翻譯一下,程式碼也給我翻譯了,不知道是幾個意思。

大二的時候就讓我們做自動簽到指令碼,說用JS可以寫一下,但是說著說著就給忘了,現在學了python後又想起來要寫一個自動簽到的指令碼,不得不佩服python的強大,短短二十行左右的程式碼就實現了,雖然說指令碼還需要手動操作去執行,以後還是可以慢慢優化的。

開發環境 : Windows10 + sublime(編輯器裝好python環境)

selenium的開發文件網址(英語好的可以直接看這個,寫的很詳細):http://selenium-python.readthedocs.io/

因為實現的時候使用的是谷歌瀏覽器,在執行指令碼時需要下載一個chromedriver.exe,下載地址為(注意根據自己的谷歌瀏覽器的版本來下載):http://npm.taobao.org/mirrors/chromedriver/

可以在裡面找到符合自己瀏覽器版本的chromedriver,我的谷歌版本為67.0.3396.99,下載的是 2.40/ 下的最新版,下載之後將解壓後的.exe檔案放到PATH中,這裡我直接將檔案放入了我的python36檔案下,這樣就不用配置PATH了。

首先在dos中輸入下面的命令,下載selenium包 :

pip install selenium

然後就可以開始寫具體的程式碼了,首先匯入webdriver與time,其中time用於延時,以保證網頁載入完成。

# 方便延時載入
import time
from selenium import webdriver

# 模擬瀏覽器開啟網站
browser = webdriver.Chrome()
browser.get('https://www.ctguqmx.com')
# 將視窗最大化
browser.maximize_window()

# 根據路徑找到按鈕,並模擬進行點選
browser.find_element_by_xpath('/html/body/div[1]/div/div[4]/span/a[1]').click()
# 延時2秒,以便網頁載入所有元素,避免之後找不到對應的元素
time.sleep(2)

# 格式是PEP8自動轉的
# 這裡是找到輸入框,傳送要輸入的使用者名稱和密碼,模擬登陸
browser.find_element_by_xpath(
    "//*[@id='aw-login-user-name']").send_keys("賬號")
browser.find_element_by_xpath(
    "//*[@id='aw-login-user-password']").send_keys("密碼")
# 在輸入使用者名稱和密碼之後,點選登陸按鈕
browser.find_element_by_xpath("//*[@id='login_submit']").click()
time.sleep(2)

# 點選登陸後的頁面中的簽到,跳轉到簽到頁面
browser.find_element_by_xpath("/html/body/div[1]/div/div[5]/a").click()
time.sleep(2)

# 點選簽到,實現功能
browser.find_element_by_xpath("//*[@id='qd_button']").click()
time.sleep(2)

# 這個print其實沒事什麼用,如果真的要測試指令碼是否執行成功,可以用try來丟擲異常
print("簽到成功")

# 指令碼執行成功,退出瀏覽器
browser.quit()

以上實現了自動簽到的功能,不需要自己動手開啟網頁了,直接執行指令碼就可以實現簽到。

最後就是在寫指令碼的時候遇到的小問題,昨天寫指令碼的時候專門下了一個phantomjs,以前selenium還是支援的,使用phantomjs可以不需要瀏覽器就可以實現自動簽到,昨天寫的時候,上面報錯,說phantomjs被棄用了。

還有就是使用瀏覽器模擬登陸的時候總是報錯 : get() missing 1 required positional argument: 'url' ,然後下載chromedriver之後就好了。

在之前還嘗試過使用火狐瀏覽器去實現自動簽到,火狐也需要下載一個geckodriver.exe,下載之後也是要去編輯PATH,為了方便就直接把geckodriver.exe放在了python36的資料夾下,但是這個要求好像挺多的,我的火狐和geckodriver都是最新版,他還是會報錯,不讓開啟火狐,後來我就選了chrome(還是谷歌大法好)。