网络课程青马在线刷课平台

起首得先安設好python,IDE,selenium,Firefox涉獵器

微信客服

這裏可以供參照

Windows下的python的安設全順叙,分圖詳解

Windows+Firefox(Chrome)+selenium+python設置裝備軍轉辦并轉變源(加速下載杠杆,不然很慢)

安裝相幹的庫

pip install 關連庫的俗稱便可

一般來講,緊要查看time,pytesseract,PIL等庫能否被準确安設

假定呈現報錯,安設上相應的庫就可

保舉使用anconda發展

不必也可,測試狀況在安網絡課程青馬在線刷課平台裝好selenium的anconda下進行

把穩,正本的anconda并不有涵概selenium庫,重要自行安設

其它,咱們還必要Tesseract-OCR這個軟件,用于ocr識别關連考據碼

對于這個軟件的月白請自行百度

總的來講,爲了運行這個非黨員,你必要:

1.一台裝有Windows的電腦和Internet

2.python3及其IDE(如pycharm,vscode等),最好是anconda

3.關系的python庫,如PIL,selenium等

4.運行ocr所重要的軟件Tess網絡課程青馬在線刷課平台eract-OCR

5.Firefox閱讀器及其對應webdriver


關連遵命的完成

import pytest

import time

import json

import pytesseract

import re

import requests

import pyautogui


from time import sleep

from PIL import Image,ImageEnhance,ImageOps

from selenium import webdriver

fr網絡課程青馬在線刷課平台om selenium.webdriver.common.by import By

from selenium.webdriver.co妹妹on.action_chains import ActionChains

from selenium.webdriver.support import expected_conditions

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdrive網絡課程青馬在線刷課平台r.co妹妹on.keys import Keys

from selenium.webdriver.co妹妹on.desired_capabilities import DesiredCapabilities

from selenium.webdriver import FirefoxOptions

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary


class Class:

    #該函數苦守是初始網絡課程青馬在線刷課平台化

    def __init__(self,un,pw,cbe,cen):

        opts = FirefoxOptions()

        # opts.add_argument("--headless")

        option_profile = webdriver.FirefoxProfile()

        option_profile.set_preference("plugin.state.flash",2)

        option_pro網絡課程青馬在線刷課平台file.set_preference("security.insecure_field_warning.contextual.enabled",False)

        #上面的有人丁是對涉獵器的設置,使flash能積極播放

        self.driver = webdriver.Firefox(firefox_profile=option_profile,options=opts)

        self.driver.get('http://hnqmgc.17el.c網絡課程青馬在線刷課平台n/')

        self.driver.set_window_size(1920,1080)

        #創立一個閱讀器對象并掀開遠見,設置經緯尺寸爲1920*1080

        self.un=un

        self.pw=pw

        self.cbe=cbe

        self.cen=cen

        #接收傳攻堅戰的un用日光浴,pw明碼,cbe課程起源刷的id,cen課程完畢刷的id

        print('初始化閱讀器網絡課程青馬在線刷課平台勝利')


    #該函數違抗是措置考據碼

    def processing_pictures(self):

        sleep(1)

        self.driver.find_element(By.ID, "code").click()

        sleep(1)

        #找到考據碼,點一下刷新考證碼。由于這個函數在一個輪回體,一次可能不能登錄告捷。

        self.driver.save_screenshot('pictures.png網絡課程青馬在線刷課平台')

        #留存網頁截圖

        left=1365

        top=319

        right=1365+48

        bottom=319+18

        #下面的是考據碼的腺體

        imge=Image.open("pictures.png").crop((left, top, right, bottom))

        #imge.show() 浸染是運轉時檢查不對用的,把處理後的分配制度輸言談

        i網絡課程青馬在線刷課平台mg = imge.convert("L")

        #庶務員轉采空區度,由于這個驗證碼太腦殘,不重要發展插值等特殊處理

        pixdata = img.load()

        w, h = img.size

        threshold = 160

        # img.show()

        for y in range(h):

            for x in range(w):

                if pixdat網絡課程青馬在線刷課平台a[x, y] < threshold:

                    pixdata[x, y] = 255

                else:

                    pixdata[x, y] = 0

        #取反色

        #img.show()

        pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

        #這裏應該是你的ocr程序的安裝地址

        result = pytesseract.image_to_string(img)

        #将圖片轉換爲字符串

        resultj = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", result)

        #正則表達式,除去特殊字符

        result_four = resultj[0:4]

        print('驗證碼是'+str(result_four))

        return result_four

    

    #該函數功能是登錄

    def login(self):

        print('正在登錄中,請稍後')

        n=0

        #下面這是一個循環,因爲驗證碼可能不能一次正确,需要不斷嘗試

        while True:

            n+=1

            print('第%d次登錄中'%n)

            #下面這兩個sleep表示暫停1秒,因爲網頁需要加載,這樣更保險

            sleep(1)

            self.driver.refresh()

            #刷新頁面,因爲上一次循環登錄過,刷新重來

            sleep(1)

            self.driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

            #該js腳本作用是将滾動條滑至頂部

            self.driver.find_element(By.ID, "login_btn").click()

            self.driver.find_element(By.ID, "UserName").send_keys(self.un)

            self.driver.find_element(By.ID, "Password").send_keys(self.pw)

            #輸入用戶名以及密碼

            code=self.processing_pictures()

            self.driver.find_element(By.ID, "codein").send_keys(code)

            self.driver.find_element(By.ID, "sub").click()

            try:

                alert=self.driver.switch_to_alert()

                alert.accept()

            except:

                break

            #如果沒有彈出警告窗,也就是登錄成功,循環體結束,如果彈出,則accept關閉彈窗

            '''

            其實這個被注釋的腳本也可以實現檢查是否正常登錄

            sleep(1)

            self.driver.refresh()

            sleep(1)

            html = self.driver.page_source

            if html.find('個人中心') == -1:

                break

            '''

            print('第%d次登錄失敗,正在重試'%n)

        self.driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

        #作用見上面

        print('登錄成功,一共嘗試了%d次'%n)

        self.attend_class()


    #該函數功能是上網課

    def attend_class(self):

        print('開始刷課')

        for course in range(int(self.cbe),int(self.cen)+1):

            url='http://hnqmgc.17el.cn/ymzs/zxzr/484770_qmzx.shtml?kcid='+str(course)

            self.driver.get(url)

            # 進入相關課程播放頁面

            #sleep(30) 如果播放插件被阻塞,應該預留一點時間再重新打開它

            # coursename=self.driver.find_element_by_id("courseName").text()

            print('當前正在刷id爲{0}的課程:'.format(course))

            #下面的部分填坑

            sleep(5)



if __name__ == '__main__':

    print('****************歡迎使用青馬網課刷課系統v1.0!*****************')

    print('*             Author:STL_CC  2020.03.18  v1.0               *')

    print('*            Blog:https://blog.csdn.net/STL_CC              *')

    print('*************************************************************')

    print('請輸入相關信息:')

    username=input('Username:')

    password=input('Password:')

    cb=input('開始課程id:')

    ce=input('結束課程id:')

    print('開始刷課!')

    a = Class(username,password,cb,ce)

    a.login()


後話

1.以上程序僅實現了登陸功能,具體的刷課進程可見Python刷青馬,但是他這個實現方法隻是模拟鼠标點擊,需要圖形化界面,應用場景十分有限。

2.聽說JavaScript能控制flash播放器的運行,而且selenium可以使用自定義js腳本,然而筆者沒有學過,而且已經開發了快三天,還要上課,吃不消,待有時間學完js後可能會在此填坑,如果哪位大佬懂js,可以一起繼續開發。

3.課程id就是每個視頻最前面那個東東,你也可以觀察視頻鏈接

4.由于自動化測試工具的特殊性,可能要針對自己的電腦運行環境進行一些特殊的處理,這個程序我也鼓搗了很久才調好環境,如果由大佬需要技術支持,可以私信筆者。

5.這裏是開發的套件包,Firefox 55以上不支持flash自動運行,這是可以支持的版本,請用此套件開發

鏈接:https://pan.baidu.com/s/1XXHxkd5KXs5rRFyS19yt6A

提取碼:q3pp

emmmm 附件裏的python程序缺少了幾個庫,以上面的爲準


最近更新:筆者已經對js控制flash控件進行了測試,得要這個控件的屬性對外開放才行,所以目前來看隻有兩種解決的方法,一個是使用autoit或者pyautogui等進行模拟鼠标點擊,另一種是我猜的,可以抓包欺騙服務器

與其花這幾天時間做這個工程,其實還不如老老實實刷,但是,通過這三天來的不斷測試,筆者掌握python複雜編程的能力有了很大提高。也了解了網頁的基本結構和selenium工具,以後應對簡單的工程,簽個到啥的還是很容易上手了的

也希望這個項目的某些方面能給讀者以啓發

————————————————


刷课-网课代刷代看

本文源自网络,如有侵权,请联系删除