Python selenium模擬手動操作實現(xiàn)無人值守刷積分功能
經(jīng)常為學校的各種刷分而發(fā)愁,得知開學無望,日后還要刷課,索性自動化一次,學而不用乃愚昧 聰慧
四大模塊
初始化
from selenium import webdriver if __name__ == '__main__': driver = webdriver.Chrome() url = 'https://pc.xuexi.cn/points/login.html?ref=https://pc.xuexi.cn/points/my-points.html' driver.get(url = url)
文章有效閱讀積分 + 文章時長積分
def article():
driver.get(url='https://www.xuexi.cn/d05cad69216e688d304bb91ef3aac4c6/9a3668c13f6e303932b5e0e100fc248b.html')
# 該網(wǎng)址只是眾文章閱讀中的其中一個類別,還有很多類別的文章供閱讀,只需更換鏈接即可
article_lis = WebDriverWait(driver,100).until(EC.presence_of_all_elements_located((By.XPATH,'//span[@style=white-space: nowrap;]')))
# 顯示等待 WebDriverWait(driver,100).until() 在這里等待,直到滿足條件或等待時間超過100,即 用xpath找到符合屬性style = "white-space: nowrap;" 的span節(jié)點;
print('共找到%s篇文章' % len(article_lis))
article_num = 0
# article_num 每天有效閱讀上限為6篇文章,但為確保有效時長達到12分鐘,所以多出2篇
for data in article_lis: # 遍歷找到的文章列表進行模擬閱讀
if article_num >= 8: # 當讀夠8篇時跳出循環(huán),結(jié)束文章刷分
break
try:
loading_page(data)
print('已加載', data.text)
# 輸出已刷文章,從而得出進度
article_num += 1
except:
continue
def loading_page(element = None):
element.click()
ele = driver.find_element_by_xpath('//a[contains(class,"search-icon")]')
ele.send_keys(Keys.PAGE_DOWN)
# 模擬頁面滾動。采用的方法是找到 ‘搜索' 功能按鈕,不點擊,直接模擬點擊按鍵 PAGE_DOWN
time.sleep(120)
# 每個頁面停留兩分鐘,至少30秒。經(jīng)測試,每隔30s 將會提交一個post請求,只有請求過后,有效閱讀數(shù)才會 +1
return None
視頻有效觀看積分 + 視頻時長積分
driver.get(url = 'https://www.xuexi.cn/4426aa87b0b64ac671c96379a3a8bd26/db086044562a57b441c24f2af1c8e101.html#11c4o0tv7nb-5')
# 同上,該網(wǎng)址只是眾視頻觀看中的其中一個類別,還有很多類別的視頻供觀看,只需更換鏈接即可
video_lis = WebDriverWait(driver,100).until(EC.presence_of_all_elements_located((By.XPATH,'//div[@style="margin: 0px auto;"]/div/div')))
# 同上,顯示等待
print('共找到%s篇文章' % len(video_lis))
video_long = 0
# 記錄已經(jīng)播放的時間
video_lis_1 = []
for data in video_lis:
video_lis_1.append(data.get_attribute('data-link-target'))
# 與文章不同的地方是,文章閱讀是模擬點擊,而視頻播放獲取網(wǎng)址,放到video_lis_1 中
for url_1 in video_lis_1: # 遍歷視頻列表,播放視頻
if video_long >= 1080: #視頻時長為18分鐘,即1080秒,在播放時間超過18分后結(jié)束播放,其實也根據(jù)分鐘判斷,我也不知道為什么當時就用上了秒
break
try:
video.get(url = url_1)
tim_now = loading_video(driver = driver)
video_long += tim_now*60
# loading_video 返回的是已閱讀分鐘數(shù),故*60
print('視頻播放中,已播放時長%s秒'%video_num)
except:
continue
def loading_video(driver = None):
elem_first = WebDriverWait(driver, 100).until(EC.presence_of_all_elements_located((By.XPATH, '//span[@class="duration"]')))
elem_start = driver.find_element_by_xpath('//div[@class="outter"]')
elem_start.click()
# 打開網(wǎng)頁后不自動播放,應該是因為是直接打開網(wǎng)址的原因
# 因為在此之前我也直接通過模擬點擊打開網(wǎng)頁,結(jié)果是自動播放的,但有一點兒不符合我當時的需求,故改為打開網(wǎng)頁的方式
tim_num = (int(elem_first[0].text[0])*10 + int(elem_first[0].text[1]))
# 目的是獲取視頻的總時間,只取分鐘數(shù)
if tim_num != 0: # 因為有些視頻它根本不到一分鐘,故加判斷條件
time.sleep(tim_num * 60)
return tim_num
else:
time.sleep(60)
# 不足一分鐘,不播放也要湊夠一分鐘
return 1
每日答題積分
def DaTi():
driver.get(url = 'https://pc.xuexi.cn/points/exam-practice.html')
elem_juje = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.XPATH,'//div[@class="q-header"]')))
juje = elem_juje.get_attribute('innerText')
# 在每日答題中,有三類題,判斷題、選擇題、填空題,所以先獲取題的類別
# 注意 特別需要注意的是 By.XPATH 和 xpath 文本獲取稍有卻別,By.XPATH 獲取文本方式為.get_attribute('innerText')
time.sleep(1) # 等待一秒,其實也無所謂,但是為防止過快操作造成電腦卡頓,還是等待一秒。
if '選' in juje:
elem_tishi = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.XPATH, '//span[@class="tips"]')))
elem_tishi.click()
# 在答題中,答案在查看提示中以紅色標記,所以首先要模擬點擊查看答案,使答案加載
time.sleep(0.5)
elem_answer = WebDriverWait(driver, 100).until(EC.presence_of_all_elements_located((By.XPATH, '//div[@class="line-feed"]/font')))
# 提取紅色標記的文字,即答案
time.sleep(0.5)
# 同樣沒什么實際意義
ans_lis = []
for elem in elem_answer:
ans_lis.append(elem.get_attribute('innerText'))
# 因為選擇題嘛,不一定就是單選題,所以要存放這些答案,以便于在選項中找答案
print('得到答案')
time.sleep(0.5)
# 同樣沒什么實際意義
elem_juje.click()
# 再次模擬點擊的原因是 此時 查看提示 框還處于打開狀態(tài),如果不關閉,會影響提交答案的操作
# 模擬點擊網(wǎng)頁,關閉 查看提示 框
time.sleep(0.5)
elem_xuanxiang = WebDriverWait(driver, 100).until(EC.presence_of_all_elements_located((By.XPATH, '//div[@class="question"]/div[@class="q-answers"]/div[contains(@class,"q-answer")]')))
# 獲取所有的選項節(jié)點
for elem in elem_xuanxiang:
data = elem.get_attribute('innerText')[3:].replace('-','')
print(data)
for i in ans_lis:
if i in data:
elem.click()
ans_lis.remove(i)
# 根據(jù)依次A -- > D 遍歷答案,將兩者對照進行選擇與否,所以滿足要求后去除該答案
# 防止對選項多次點擊造成取消選擇或其他錯誤
time.sleep(0.5) #防止過快操作,每次選擇后等待0.5秒
break
elem_next = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.XPATH,'//div[@class="action-row"]/button')))
elem_next.click()
# 模擬點擊確定按鈕跳轉(zhuǎn)下一題
DaTi(driver)
elif '填' in juje:
elem_tishi = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.XPATH,'//span[@class="tips"]')))
elem_tishi.click()
time.sleep(0.5)
elem_answer = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.XPATH,'//div[@class="line-feed"]')))
time.sleep(0.5)
if '請觀看視頻' in elem_answer.get_attribute('innerText'):
input('手動選擇答案后無需點擊確定,在此輸入回車繼續(xù)')
elem_next = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.XPATH, '//div[@class="action-row"]/button')))
elem_next.click()
# 在填空題中會有觀看視頻的題目,而且查看提示中會寫‘請觀看視頻'而不會直接給出答案,所以要人工選擇
elem_answer = WebDriverWait(driver,100).until(EC.presence_of_all_elements_located((By.XPATH,'//div[@class="line-feed"]/font')))
answer = []
time.sleep(0.5)
for elem in elem_answer:
answer.append(elem.get_attribute('innerText'))
# 同樣填空題中也有多個空的情況,所以將答案放在列表里
time.sleep(1)
elem_data = WebDriverWait(driver,100).until(EC.presence_of_all_elements_located((By.XPATH,'//input[@class="blank"]')))
# 找到每個空
for i in range(len(answer)):
elem_data[i].send_keys(answer[i])
time.sleep(0.5)
# 通過遍歷空,將對應的答案寫入
elem_data[0].click()
time.sleep(1)
# 模擬點擊網(wǎng)頁,因為在寫完空后,不點擊網(wǎng)頁會有確定按鈕為不可點的情況
elem_next = WebDriverWait(driver,100).until(EC.presence_of_element_located((By.XPATH,'//div[@class="action-row"]/button')))
elem_next.click()
DaTi(driver)
elif '判' in juje:# 同上,判斷題不會直接給出答案,所以只能手動吧
input('手動選擇答案后無需點擊確定,在此輸入回車繼續(xù)')
elem_next = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.XPATH, '//div[@class="action-row"]/button')))
elem_next.click()
DaTi(driver)
結(jié)合PyQt5,最終效果圖
聲明:圖片沒有別的意思,個人感覺很歡喜,圖片轉(zhuǎn)自------百度圖片

總結(jié)
到此這篇關于Python selenium模擬手動操作實現(xiàn)無人值守刷積分功能的文章就介紹到這了,更多相關Python selenium刷積分內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Python selenium模塊實現(xiàn)定位過程解析
- python3.7+selenium模擬淘寶登錄功能的實現(xiàn)
- python3.8.1+selenium實現(xiàn)登錄滑塊驗證功能
- Python selenium爬取微博數(shù)據(jù)代碼實例
- python3+selenium獲取頁面加載的所有靜態(tài)資源文件鏈接操作
- python+selenium+chrome批量文件下載并自動創(chuàng)建文件夾實例
- Python3 selenium 實現(xiàn)QQ群接龍自動化功能
- Python + selenium + crontab實現(xiàn)每日定時自動打卡功能
- Python Selenium模塊安裝使用教程詳解
相關文章
淺談Series和DataFrame中的sort_index方法
今天小編就為大家分享一篇淺談Series和DataFrame中的sort_index方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Python獲取好友地區(qū)分布及好友性別分布情況代碼詳解
利用Python + wxpy 可以快速的查詢自己好友的地區(qū)分布情況,以及好友的性別分布數(shù)量。還可以批量下載好友的頭像,拼接成大圖。感興趣的朋友跟隨小編一起看看吧2019-07-07
Python實現(xiàn)微信好友的數(shù)據(jù)分析
這篇文章主要為大家詳細介紹了Python實現(xiàn)微信好友的數(shù)據(jù)分析,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12
如何通過雪花算法用Python實現(xiàn)一個簡單的發(fā)號器
這篇文章主要介紹了如何通過雪花算法用Python實現(xiàn)一個簡單的發(fā)號器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07
Python實現(xiàn)加載及解析properties配置文件的方法
這篇文章主要介紹了Python實現(xiàn)加載及解析properties配置文件的方法,結(jié)合實例形式分析了Python針對properties配置文件的加載、讀取及解析相關操作技巧,需要的朋友可以參考下2018-03-03

