利用Python腳本實(shí)現(xiàn)自動(dòng)刷網(wǎng)課
人在學(xué)校,身不由己??傆幸恍┢嫫婀止值膶W(xué)習(xí)任務(wù),需要我們刷夠一定的時(shí)長(zhǎng)去完成,但這很多都是不太令人感興趣的文字或是視頻,而這些課都有共同的特點(diǎn)就是會(huì)間隔一定時(shí)間發(fā)出彈窗,確認(rèn)屏幕前的我們是否還在瀏覽頁(yè)面。每次靠人工去點(diǎn)擊,會(huì)嚴(yán)重影響我們做其他正事的效率。

最近小李也需要刷夠一定的學(xué)習(xí)時(shí)長(zhǎng)。于是乎,我便找了好兄弟Python來(lái)幫忙。下面我們就用Python來(lái)實(shí)現(xiàn)自動(dòng)化刷課吧!
說(shuō)到自動(dòng)化,Selenium這個(gè)瀏覽器自動(dòng)化測(cè)試框架就派上了用場(chǎng),整個(gè)自動(dòng)刷課的主角便是它。
網(wǎng)站登錄
那么為了實(shí)現(xiàn)自動(dòng)刷課,我們需要先實(shí)現(xiàn)網(wǎng)站登錄,才能在指定的賬號(hào)內(nèi)進(jìn)行操作。常規(guī)的,我們需要在對(duì)應(yīng)的位置,找到網(wǎng)頁(yè)上對(duì)應(yīng)的元素,并通過(guò)程序?qū)懭搿?/p>

而這里有個(gè)相對(duì)麻煩的東西,即驗(yàn)證碼,而這個(gè)驗(yàn)證碼是白底黑字,是簡(jiǎn)單的字母數(shù)字形式,自然而然地就想到了Python的OCR庫(kù) tesserocr 。
把網(wǎng)站登錄界面的驗(yàn)證碼圖片下載下來(lái),調(diào)用 tesserocr 進(jìn)行識(shí)別。輸出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
解決了驗(yàn)證碼,我們直接用selenium模擬點(diǎn)擊 登錄 按鈕,便完成了登錄過(guò)程。
進(jìn)入課程
我們需要進(jìn)入的是這個(gè)實(shí)驗(yàn)室準(zhǔn)入頁(yè)面,完成相關(guān)課程的學(xué)習(xí)。

在編寫代碼的過(guò)程中一直遇到報(bào)錯(cuò),信息如下:ElementNotInteractableException ,即這個(gè)頁(yè)面元素不能交互。我一度懷疑這個(gè)元素是因?yàn)?style 里的display屬性設(shè)置成了none。經(jīng)過(guò)觀察發(fā)現(xiàn),這個(gè)元素并沒(méi)有隱藏。

在面向Google編程中我發(fā)現(xiàn)了問(wèn)題的所在,有大佬總結(jié)了這一類錯(cuò)誤發(fā)生的原因。

首先查看是否需要切換 iframe, 然后看看是否需要用js的方法來(lái)scroll滾動(dòng)條,接著看看是否需要加等待時(shí)間,最后check下這個(gè)元素是否是可以點(diǎn)擊的。
因?yàn)閟elenium操作頁(yè)面切換可能沒(méi)有那么塊,sleep延時(shí)一下等頁(yè)面切換了再進(jìn)行元素的查找。
彈出框處理
問(wèn)題解決之后我們就來(lái)到了課程學(xué)習(xí)的頁(yè)面。

而這個(gè)頁(yè)面每個(gè)5分鐘就會(huì)彈出提醒框,然后暫停課程的學(xué)習(xí),因此我們需要利用selenium自動(dòng)完成關(guān)閉提醒框的操作。

def answer_confirm(self):
# 每隔5分鐘彈出確認(rèn)窗口
count=1
while 1:
try:
confirm=self.browser.switch_to_alert()
print(confirm.text)
confirm.accept()
print("您已經(jīng)完成時(shí)長(zhǎng)為{}分鐘的閱讀!".format(count*5))
count+=1
time.sleep(300)
except:
time.sleep(2)
這樣我們的程序就可以操作瀏覽器并完成一定時(shí)長(zhǎng)的學(xué)習(xí)任務(wù)啦~

總結(jié)
以上所述是小編給大家介紹的利用Python腳本實(shí)現(xiàn)自動(dòng)刷網(wǎng)課,希望對(duì)大家有所幫助!
相關(guān)文章
python實(shí)現(xiàn)讀取命令行參數(shù)的方法
這篇文章主要介紹了python實(shí)現(xiàn)讀取命令行參數(shù)的方法,涉及Python中sys模塊的相關(guān)使用技巧,需要的朋友可以參考下2015-05-05
Python的Django框架中forms表單類的使用方法詳解
用戶表單是Web端的一項(xiàng)基本功能,大而全的Django框架中自然帶有現(xiàn)成的基礎(chǔ)form對(duì)象,Python的Django框架中forms表單類的使用方法詳解2016-06-06
Python實(shí)現(xiàn)自動(dòng)清理電腦垃圾文件詳解
經(jīng)常存在在我們的電腦中的垃圾文件主要是指系統(tǒng)在運(yùn)行過(guò)程中產(chǎn)生的tmp臨時(shí)文件、日志文件、臨時(shí)備份文件等。本文將利用Python實(shí)現(xiàn)自動(dòng)清理這些垃圾文件,需要的可以參考一下2022-03-03
python基礎(chǔ)--除法(/,//,%)的應(yīng)用說(shuō)明
這篇文章主要介紹了python基礎(chǔ)--除法(/,//,%)的應(yīng)用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
python按照行來(lái)讀取txt文件全部?jī)?nèi)容(去除空行處理掉\t,\n后以列表方式返回)
這篇文章主要介紹了python按照行來(lái)讀取txt文件全部?jī)?nèi)容 ,去除空行,處理掉\t,\n后,以列表方式返回,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06

