本篇文章給大家分享的是有關(guān)怎樣利用python完成大學(xué)刷課,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、東光ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的東光網(wǎng)站制作公司
首先分析一下它是怎么驗證你看完這個課的。
當(dāng)學(xué)習(xí)完成時會發(fā)出這個請求
然后看看這幾個請求的數(shù)據(jù)都是在前端哪里生成的
一番尋找就看到了是wx.js下的function finishWxCourse() ??刂婆_執(zhí)行 finishWxCourse() 果然會發(fā)起完成修課的請求
然后剩下就是腳本的思路 首先要獲取課程的鏈接 然后打開以后執(zhí)行js finishWxCourse() 后來發(fā)現(xiàn)requests不是很好的能執(zhí)行js 然后我就聽從了幾個師傅的意見用selenium...所以是邊學(xué)邊寫的 遇到了幾個小坑記一記
安裝不表 網(wǎng)上很多教程 chromedriver裝在環(huán)境變量里面就好了 比如python的環(huán)境變量 如果遇到問題可以留言評論
先說一下 代碼最終的整體思路是 打開網(wǎng)站----設(shè)置cookie----然后通過點擊打開所有的隱藏元素-----定位點擊----后退---------------點擊打開所有的隱藏元素-------定位點擊----------后退..然后重復(fù)之前的步驟
driver = webdriver.Chrome("C:/Python27/chromedriver.exe") driver.get("http://wb.mycourse.cn/")
driver.add_cookie({'name':'JSESSIONID','value':'93BEC0FDEF428F98DA1F69A6B3C2BF88'}) #已經(jīng)過期的了 師傅們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定位 這個名字也很明顯是做什么的。然后我也發(fā)現(xiàn)是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()")
但是結(jié)果發(fā)現(xiàn)無法獲取到元素 什么鬼 然后一直報錯···苦苦百度以后發(fā)現(xiàn)···原來是沒有展開元素 是diplay:none。 隱藏了 然后我百度以后找到的方法一直是 通過執(zhí)行js把none改為block結(jié)果發(fā)現(xiàn)不好定位啊
<div class="widthPercent100 paddingL_30 border-box displayNone" style="transition: all 0.5s ease 0s; display: none;">
class屬性都是不唯一的 然后很蛋疼 后來師傅推薦說通過xpath定位 可是好多個 不想嫌棄麻煩 洗了個澡回來以后發(fā)現(xiàn)可以通過定位元素 然后點擊元素 來實現(xiàn)自動展開列表
通過 前面截圖的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()
刪除幾個定位就好了
然后現(xiàn)在調(diào)試以后 集合代碼跑了一次發(fā)現(xiàn)了幾個問題,第一個就是 當(dāng)
driver.execute_script("finishWxCourse()") #執(zhí)行js代碼
執(zhí)行代碼以后,會alert一個窗口出來說 完成了課程。然后就會導(dǎo)致selenium不能點后退 面向百度編程以后
dig_alert = driver.switch_to.alert #搜索彈窗 dig_alert.accept() #點擊確定
接著就是最后一個坑了driver.back()
以后蛋疼了 back以后 之前定位的會失效···所以只能每回退一次重新定位 還有要注意的就是在一些關(guān)鍵地方之前要time sleep一秒 不然還沒請求完成出來就執(zhí)行下一步了 會導(dǎo)致報錯 最后就大功告成了
下面貼完整代碼
#coding=utf-8
from selenium import webdriver
import time
def login():
driver = webdriver.Chrome("C:/Python27/chromedriver.exe")
driver.get("http://wb.mycourse.cn/")
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'})
driver.get("http://wb.mycourse.cn/svnweiban/student/study_studyAndTest.action")
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()
以上就是怎樣利用python完成大學(xué)刷課,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁標(biāo)題:怎樣利用python完成大學(xué)刷課
網(wǎng)頁路徑:http://muchs.cn/article32/ijdcpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、虛擬主機、小程序開發(fā)、云服務(wù)器、移動網(wǎng)站建設(shè)、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)