日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python秒网课_利用python完成大学刷课(从0到完成的思路)

發布時間:2023/12/31 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python秒网课_利用python完成大学刷课(从0到完成的思路) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

i春秋作家:tllm

最近剛剛開學,學校總是有很多讓人無語的課要修,還不能不修。然后我想寫一個自動修課的腳本。大佬們不要笑我 是邊面向百度學selenium邊寫腳本的 然后踩了一些坑 記錄一下

先放最終效果視頻

0x01:

首先分析一下它是怎么驗證你看完這個課的。

當學習完成時會發出這個請求

然后看看這幾個請求的數據都是在前端哪里生成的

一番尋找就看到了是wx.js下的function finishWxCourse() 。控制臺執行 finishWxCourse() 果然會發起完成修課的請求

0x02:

然后剩下就是腳本的思路 首先要獲取課程的鏈接 然后打開以后執行js finishWxCourse() 后來發現requests不是很好的能執行js 然后我就聽從了幾個師傅的意見用selenium...所以是邊學邊寫的 遇到了幾個小坑記一記

安裝不表 網上很多教程 chromedriver裝在環境變量里面就好了 比如python的環境變量 如果遇到問題可以留言評論

先說一下 代碼最終的整體思路是 打開網站----設置cookie----然后通過點擊打開所有的隱藏元素-----定位點擊----后退---------------點擊打開所有的隱藏元素-------定位點擊----------后退..然后重復之前的步驟

這是簡單的啟動瀏覽器和發起請求

driver = webdriver.Chrome("C:/Python27/chromedriver.exe")

driver.get("http://wb.mycourse.cn/")

刪除所有的cookie并設置cookie。我是手動登陸然后再添加 有一個要記住的就是先要請求一次網頁 才能設置cookie 再請求網頁

driver.add_cookie({'name':'JSESSIONID','value':'93BEC0FDEF428F98DA1F69A6B3C2BF88'}) #已經過期的了 師傅們

driver.add_cookie({'name':'acw_tc','value':'7b39758715392684428742395e7ed4b94ed4e9616cb11d4b9df9e244ec7573'})

driver.add_cookie({'name':'SERVERID','value':'02cc313090e3650844ab417ac43bf774|1539357767|1539357719'})

driver.get("http://wb.mycourse.cn/svnweiban/student/study_studyAndTest.action")

接著就是定位元素了 首先要看到我們要點擊的課程鏈接

看到class屬性 有一個坑就是這里多個class屬性 不能直接多個class一起定位 不然會找到 如果全部一起定位要用css尋找并且用.來鏈接 然后我這里用的是 courseLink定位 這個名字也很明顯是做什么的。然后我也發現是98個課程都能定位到 前面幾個class能定位到1000多個

link2s = driver.find_elements_by_class_name("courseLink")

我原本就很開心的以為差不多做完了準備寫出一個這樣子的代碼

for i in range(99):

link2s = driver.find_elements_by_class_name("courseText")

link2s[i].click()

driver.execute_script("finishWxCourse()")

但是結果發現無法獲取到元素 什么鬼 然后一直報錯···苦苦百度以后發現···原來是沒有展開元素 是diplay:none。 隱藏了 然后我百度以后找到的方法一直是 通過執行js把none改為block結果發現不好定位啊

class屬性都是不唯一的 然后很蛋疼 后來師傅推薦說通過xpath定位 可是好多個 不想嫌棄麻煩 洗了個澡回來以后發現可以通過定位元素 然后點擊元素 來實現自動展開列表

通過 前面截圖的cursorPointer 能夠成功定位20多個地方出來 但是前面幾個定位是什么首頁 搜索 不是我們想要的 問題不大。我們刪除這幾個定位就好了

blockclass = driver.find_elements_by_class_name("cursorPointer")

del blockclass[0]

del blockclass[0]

del blockclass[0]

for blockc in blockclass:

blockc.click()

刪除幾個定位就好了

然后現在調試以后 集合代碼跑了一次發現了幾個問題,第一個就是 當

driver.execute_script("finishWxCourse()") #執行js代碼

執行代碼以后,會alert一個窗口出來說 完成了課程。然后就會導致selenium不能點后退 面向百度編程以后

dig_alert = driver.switch_to.alert #搜索彈窗

dig_alert.accept() #點擊確定

接著就是最后一個坑了driver.back()以后蛋疼了 back以后 之前定位的會失效···所以只能每回退一次重新定位 還有要注意的就是在一些關鍵地方之前要time sleep一秒 不然還沒請求完成出來就執行下一步了 會導致報錯 最后就大功告成了

下面貼完整代碼

#coding=utf-8

from selenium import webdriver

import time

def login():

driver = webdriver.Chrome("C:/Python27/chromedriver.exe")

driver.delete_all_cookies()

driver.add_cookie({'name':'JSESSIONID','value':'93BEC0FDEF428F98DA1F69A6B3C2BF88'}) #cookie都過期了的 不用試

driver.add_cookie({'name':'acw_tc','value':'7b39758715392684428742395e7ed4b94ed4e9616cb11d4b9df9e244ec7573'})

driver.add_cookie({'name':'SERVERID','value':'02cc313090e3650844ab417ac43bf774|1539357767|1539357719'})

blockclass = driver.find_elements_by_class_name("cursorPointer")

del blockclass[0]

del blockclass[0]

del blockclass[0]

for blockc in blockclass:

blockc.click()

for i in range(99):

link2s = driver.find_elements_by_class_name("courseText")

link2s.click()

driver.execute_script("finishWxCourse()")

time.sleep(1)

dig_alert = driver.switch_to.alert

dig_alert.accept()

driver.back()

time.sleep(1)

blockclass = driver.find_elements_by_class_name("cursorPointer")

del blockclass[0]

del blockclass[0]

del blockclass[0]

for blockc in blockclass:

blockc.click()

time.sleep(0.5)

login()

大家有任何問題可以提問,更多文章可到i春秋論壇閱讀喲~

總結

以上是生活随笔為你收集整理的python秒网课_利用python完成大学刷课(从0到完成的思路)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。