Python自動刷網課

人在學校,身不禁己。總有一些奇奇怪怪的學習任務,須要咱們刷夠必定的時長去完成,但這不少都是不太使人感興趣的文字或是視頻,而這些課都有共同的特色就是會間隔必定時間發出彈窗,確認屏幕前的咱們是否還在瀏覽頁面。每次靠人工去點擊,會嚴重影響咱們作其餘正事的效率。編程

最近小李也須要刷夠必定的學習時長。因而乎,我便找了好兄弟Python來幫忙。下面咱們就用Python來實現自動化刷課吧!
說到自動化,Selenium這個瀏覽器自動化測試框架就派上了用場,整個自動刷課的主角即是它。瀏覽器

網站登陸

那麼爲了實現自動刷課,咱們須要先實現網站登陸,才能在指定的帳號內進行操做。常規的,咱們須要在對應的位置,找到網頁上對應的元素,並經過程序寫入。app

而這裏有個相對麻煩的東西,即驗證碼,而這個驗證碼是白底黑字,是簡單的字母數字形式,天然而然地就想到了Python的OCR庫 tesserocr 。
把網站登陸界面的驗證碼圖片下載下來,調用 tesserocr 進行識別。輸出result 即爲讀出的字符串序列。框架

def ocr():
        image=Image.open('captcha.jpg')
        image=image.convert('L')
        threshold=127
        table=[]
        for i in range(256):
            if i<threshold:
                table.append(0)
            else:
                table.append(1) 
        image=image.point(table,'1')
        result=tesserocr.image_to_text(image)
        return result

解決了驗證碼,咱們直接用selenium模擬點擊 登陸 按鈕,便完成了登陸過程。學習

進入課程

咱們須要進入的是這個實驗室准入頁面,完成相關課程的學習。測試

在編寫代碼的過程當中一直遇到報錯,信息以下:ElementNotInteractableException ,即這個頁面元素不能交互。我一度懷疑這個元素是由於 style 裏的display屬性設置成了none。通過觀察發現,這個元素並無隱藏。網站

在面向Google編程中我發現了問題的所在,有大佬總結了這一類錯誤發生的緣由。spa

首先查看是否須要切換 iframe, 而後看看是否須要用js的方法來scroll滾動條,接着看看是否須要加等待時間,最後check下這個元素是不是能夠點擊的。
由於selenium操做頁面切換可能沒有那麼塊,sleep延時一下等頁面切換了再進行元素的查找。code

彈出框處理

問題解決以後咱們就來到了課程學習的頁面。orm

而這個頁面每一個5分鐘就會彈出提醒框,而後暫停課程的學習,所以咱們須要利用selenium自動完成關閉提醒框的操做。

def answer_confirm(self):
        # 每隔5分鐘彈出確認窗口
        count=1
        while 1:
            try:
                confirm=self.browser.switch_to_alert()
                print(confirm.text)
                confirm.accept()
                print("您已經完成時長爲{}分鐘的閱讀!".format(count*5))
                count+=1
                time.sleep(300)
            except:
                time.sleep(2)

這樣咱們的程序就能夠操做瀏覽器並完成必定時長的學習任務啦~
源代碼我已經上傳至後臺,回覆「自動刷課」便可得到

相關文章
相關標籤/搜索