1、前提
本學期選了學習通的網課,無奈老師要求課程的訪問量要達到300次,可是時間來不及了,於是決定用代碼來幫我完成任務。

2、准備工作
①確保是python3版本,下載有selenium庫,需要使用谷歌瀏覽器
②selenium 爬蟲報錯:Message: 'chromedriver' executable needs to be in PATH.的解決辦法
這里的報錯說明沒有安裝谷歌瀏覽器驅動
解決方法:
https://blog.csdn.net/su_2018/article/details/100127223
③提前獲取學習界面的url鏈接

④瀏覽器打開時,最上面要允許加載驅動,第一次登入需要手動輸入賬號和密碼
3、Python代碼
代碼中有2處需要更改。main方法中starturl = ""里面的學習頁面鏈接以及瀏覽器驅動的本機地址;
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time,os,json
#1、確保下載有selenium庫
#2、下載瀏覽器驅動,配置到系統環境變量
def login(D, starturl):
print("首次登錄,請在瀏覽器手動登錄!")
D.get(starturl)
WebDriverWait(D, 1000).until(
EC.url_to_be(starturl)
)
with open("cookies.json", "w", encoding="utf-8") as f:
json.dump(D.get_cookies(), f)
def main():
ft = float(input("請輸入刷新頻率(0.1 - 10)建議直接輸入1:"))
# starturl = input("請輸入課程首頁鏈接:") 【個人使用可以不需要每次輸入,用下面的方法】
#starturl = "" 輸入學習界面url,下面的鏈接是個例子,請自己更改
starturl = "https://mooc1-1.chaoxing.com/mycourse/studentstudy?chapterId=351756254&courseId=214546396&clazzid=32891167&enc=8d165633ae6df57cfd1b7200602ee150"
#'F:\Google Chrome x64\chromedriver.exe'是驅動地址,請自己更改
D = webdriver.Chrome(r'F:\Google Chrome x64\chromedriver.exe')
if os.path.exists("cookies.json"):
print("自動登錄ing...")
D.get(starturl)
with open("cookies.json", "r", encoding="utf-8") as f:
for cookie in json.load(f):
if "expiry" in cookie:
del cookie['expiry']
D.add_cookie(cookie)
D.get(starturl)
if D.current_url == starturl:print("自動登錄成功!")
else: login(D, starturl)
else: login(D, starturl)
while True:
cells = D.find_elements_by_class_name("cells")
if D.current_url!=starturl:
print("被攔截啦!請輸入驗證碼繼續操作")
WebDriverWait(D, 1000).until(
EC.url_to_be(starturl)
)
for cell in cells:
try:
cel = cell.find_elements_by_class_name("ncells")
for ce in cel:
time.sleep(ft)
print(ce.text)
ce.click()
except:
#請忽略此行D.get("https://mooc1-1.chaoxing.com/mycourse/studentstudy?chapterId=351756266&courseId=214546396&clazzid=32891167&enc=a7b0bf6be9aae494a195a0a98b57b414")
D.get(starturl)
break
#可選擇手動關閉
#D.close()
if __name__ == "__main__":
main()
參考資料:https://blog.csdn.net/qq_41205771/article/details/103625643
