利用Python開發(fā)一個自動答題程序
環(huán)境使用
Python 3.8
–> 解釋器 <執(zhí)行python代碼>
Pycharm
–> 編輯器 <寫python代碼的>
模塊使用
import requests —> 數(shù)據(jù)請求模塊 pip install requests
import re
from selenium import webdriver —> 自動測試模塊 pip install selenium==3.141.0 <指定版本安裝>
默認安裝 selenium 安裝 4.0 和 3.0 語法上面有區(qū)別, 但是方法一樣
自動答題思路步驟
一. 獲取題目答案 <完成>
答案頁面 --> 是有答案內(nèi)容的
找到所有答案頁面ID, 就可以獲取所有題目答案內(nèi)容了 --> 分析答案頁面ID在哪里可以獲取
1.通過開發(fā)者工具進行抓包分析
- 打開開發(fā)者工具: F12 或者 鼠標右鍵點擊檢查選擇network
- 刷新網(wǎng)頁: 讓文本網(wǎng)頁的數(shù)據(jù)內(nèi)容重新加載一遍
- 關(guān)鍵字搜索: 通過搜索 答案ID, 去查詢對應(yīng)數(shù)據(jù)包
2.通過代碼, 然后獲取答案內(nèi)容:
代碼基本四大步驟: 發(fā)送請求 --> 獲取數(shù)據(jù) --> 解析數(shù)據(jù) --> 保存數(shù)據(jù)
a.發(fā)送請求, 模擬瀏覽器對于url地址發(fā)送請求
請求地址: 答案頁面url
b.獲取數(shù)據(jù), 獲取頁面網(wǎng)頁源代碼
c.解析數(shù)據(jù), 提取我們想要的數(shù)據(jù)內(nèi)容
答案選項
二. 把題目答案和選項進行比較, 自動選擇正確答案
模擬人的行為去答題:
- 打開瀏覽器
- 輸入答題網(wǎng)址
因為有1700多題目, 重復(fù)操作
- 選擇正確選項
- 點擊下一題
代碼展示
# 導(dǎo)入數(shù)據(jù)請求模塊 --> 第三方模塊, 需要安裝 pip install requests
import requests
# 導(dǎo)入正則模塊 --> 內(nèi)置模塊, 不需要安裝
import re
# 導(dǎo)入自動化模塊 --> 第三方模塊, 需要安裝 pip install selenium==3.141.0 <指定版本安裝>
from selenium import webdriver
"""
1. 打開瀏覽器
配置瀏覽器驅(qū)動:
大版本一樣, 小版本最相近即可
"""
driver = webdriver.Chrome(r'D:\download\anaconda\chromedriver.exe')
# 2. 訪問網(wǎng)站
driver.get('https://www.jsyks.com/kms-sxlx')
# 設(shè)置全屏
driver.maximize_window()
# 讀取答案文本內(nèi)容, 獲取答案ID <讀取數(shù)據(jù)>
f = open('答案ID.txt', encoding='utf-8')
# 字符串分割方法: split() --> 字符串數(shù)據(jù)變成列表
answer_id_list = f.read().split(',')
# for循環(huán)遍歷, 把列表里面元素一個一個提取出來
for answer_id in answer_id_list:
"""
1. 發(fā)送請求, 模擬瀏覽器對于url地址發(fā)送請求
請求地址: 答案頁面url
- 安裝模塊:
I. 點擊pycharm終端 輸入命令 pip install requests
II. win + R 輸入cmd 輸入命令 pip install requests
- 模擬瀏覽器發(fā)送請求
好處: 防止被反爬
headers 請求頭 --> 可以復(fù)制
- <Response [200]> 表示響應(yīng)對象
Response: 中文意思響應(yīng)/回復(fù)/回答
<>: 表示對象
200: 狀態(tài)碼 表示請求成功 --> 相當于你打電話, 打通了有嘟嘟嘟聲音
404: 鏈接不對 --> 相當于你打電話, 你所撥打的電話是空號
打亂了 --> 題目 + 答案內(nèi)容 都保存下來, 然后進行對比
"""
# 構(gòu)建答案頁面url --> f'{}' 字符串格式化方法 --> format
answer_url = f'https://tiba.jsyks.com/Post/{answer_id}.htm'
# 偽裝模擬
headers = {
# User-Agent 表示瀏覽器基本身份標識
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 發(fā)送請求
response = requests.get(url=answer_url, headers=headers)
"""
2. 獲取數(shù)據(jù), 獲取頁面網(wǎng)頁源代碼
3. 解析數(shù)據(jù), 提取我們想要答案內(nèi)容
正則表達式: 會 1 不會 0
re.findall('匹配的數(shù)據(jù)', '什么地方匹配') --> re模塊里面findall方法: 找到所有我們想要的數(shù)據(jù)內(nèi)容
(.*?) --> ()精確匹配 .匹配任意字符(除了\n換行符) *匹配前一個字符0或者N個 ? 非貪婪匹配模式
網(wǎng)站不同, 數(shù)據(jù)結(jié)構(gòu)不同 --> 基本上一個代碼對一個網(wǎng)站
"""
answer = re.findall('答案是:(.*?)。', response.text)[0]
print(answer)
if answer == '對':
answer = 'Y'
elif answer == '錯':
answer = 'N'
"""
選擇正確答案進行點擊操作:
先定位元素, 然后再進行操作
find_element_by_css_selector --> 通過css選擇器查找元素
len() 統(tǒng)計元素個數(shù)
answer --> A 元素只有一個 <單選題>
answer --> ABD 元素三個 <多選題>
"""
if len(answer) == 1:
driver.find_element_by_css_selector(f'#btn{answer}').click()
# 點擊下一題
driver.find_element_by_css_selector('#btn_PN span').click()
elif len(answer) > 1:
# len(answer) --> 3 num -> 0 / 1 / 2
for num in range(len(answer)):
driver.find_element_by_css_selector(f'#btn{answer[num]}').click()
# 點擊確定選好了的按鈕
driver.find_element_by_css_selector('#ExamOptDa input').click()
# 點擊下一題
driver.find_element_by_css_selector('#btn_PN span').click()
到此這篇關(guān)于利用Python開發(fā)一個自動答題程序的文章就介紹到這了,更多相關(guān)Python自動答題程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 安裝第三方庫 pip install 安裝慢安裝不上的解決辦法
很多朋友反映在使用pip install安裝python 第三方庫的過程中會出現(xiàn)網(wǎng)速很慢,或者是安裝下載到中途,停止,卡主,或者是下載報錯等問題,下面小編給大家?guī)砹私鉀Q方法,一起看看吧2019-06-06
pytest?fixtures函數(shù)及測試函數(shù)的參數(shù)化解讀
這篇文章主要介紹了pytest?fixtures函數(shù)及測試函數(shù)的參數(shù)化解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
對python條件表達式的四種實現(xiàn)方法小結(jié)
今天小編就為大家分享一篇對python條件表達式的四種實現(xiàn)方法小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01

