Python實(shí)現(xiàn)考試自動(dòng)答題的腳本分享
導(dǎo)語(yǔ)
對(duì)于新手而言,掌握好方向盤的打法非常重要,關(guān)系到我們能否順利通過駕考,拿到駕照。而開車時(shí)方向盤又是最重要的,握好方向盤等于是給自己的安全上了保險(xiǎn)。
科目一考試為上機(jī)考試,100道題,題型為判斷題和單選題,以案例、圖片及動(dòng)畫形式的題目為主,考試時(shí)間45分鐘,90分及以上過關(guān)。
最近這段時(shí)間天氣正正好,不冷不熱,是學(xué)習(xí)考駕照的好時(shí)機(jī)。想學(xué)的寶子,最好是現(xiàn)在這個(gè)季節(jié),要知道,當(dāng)年(咳咳咳...)也就是前年我學(xué)駕照的時(shí)候夏天曬的烏漆嘛黑的。
許多駕考學(xué)員們,雖說科二科三需要實(shí)體練車,但是科一科四都是理論知識(shí)點(diǎn),那不得一次過。平常的話****我們可以利用碎片化的時(shí)間鞏固基礎(chǔ)知識(shí), 爭(zhēng)取科科一次過!今天小編教大家一個(gè)小腳本啦——Python實(shí)現(xiàn)自動(dòng)答題 價(jià)值 1000元 外包訂單項(xiàng)目案例。
一、準(zhǔn)備環(huán)境
1)運(yùn)行環(huán)境
開發(fā)環(huán)境:
Python3、Pycharm社區(qū)版。
import requests ---> 數(shù)據(jù)請(qǐng)求模塊 pip install requests import re from selenium import webdriver ---> 自動(dòng)測(cè)試模塊 pip install selenium==3.141.0 <指定版本安裝>。
谷歌瀏覽器 以及 谷歌驅(qū)動(dòng) <版本和瀏覽器版本相對(duì)應(yīng)> 環(huán)境沒有安裝的同學(xué), 可以去安裝。
2)模塊安裝
第三方庫(kù)的安裝方式如下:
一般安裝:pip install +模塊名
鏡像源安裝:pip install -i pypi.douban.com/simple/+模塊名…
(還有很多國(guó)內(nèi)鏡像源,這里是豆瓣的用習(xí)慣了,其他鏡像源可以去看下之前文章都有的)
二、代碼展示
1)爬蟲實(shí)現(xiàn)思路
一. 數(shù)據(jù)來源分析 --> 通過瀏覽器 開發(fā)者工具 抓包分析
1. 明確需求: - 明確采集的網(wǎng)站是什么
題目答案頁(yè)面: https://tiba.jsyks.com/Post/2c15b.htm
2. 分析這兩個(gè)數(shù)據(jù)怎么獲取
數(shù)據(jù)來自于 --> 答案頁(yè)面
第一題: https://tiba.jsyks.com/Post/2c15b.htm
問題: 獲取1701道題目 --> 分析每個(gè)題目答案頁(yè)面URL構(gòu)成
第一題: https://tiba.jsyks.com/Post/2c15b.htm
第二題: https://tiba.jsyks.com/Post/8ac1a.htm
第三題: https://tiba.jsyks.com/Post/e97d7.htm 2c15b / 8ac1a / e97d7
所以 只需要獲取所有答案頁(yè)面ID, 即可獲取所有題庫(kù) 。
2)自動(dòng)答題主程序
# 導(dǎo)入自動(dòng)化測(cè)試模塊 --> 重點(diǎn) 3.141.0 版本
from selenium import webdriver
# 導(dǎo)入pandas
import pandas as pd
# 導(dǎo)入正則
import re
df = pd.read_csv('題庫(kù).csv')
key = []
value = []
# 獲取每一道題目
for i in df['Problem']: # 問題作為鍵
# 把題目添加到列表里面
key.append(i)
# 獲取每一道題目答案
for j in df['Answer']: # 問題作為值
# 把答案添加到列表里面
value.append(j)
# 把兩個(gè)列表合并成字典
dic = dict(zip(key, value))
"""
1. 打開瀏覽器
Chrome 瀏覽器 谷歌
webdriver.Chrome('驅(qū)動(dòng)路徑')
I. 驅(qū)動(dòng)選擇
根據(jù)你自己瀏覽器版本, 選擇驅(qū)動(dòng)版本, 最相近即可
驅(qū)動(dòng)只有32
II. 驅(qū)動(dòng)路徑寫法
1. 不寫路徑
- 驅(qū)動(dòng)和你代碼在一起
- 驅(qū)動(dòng)和你python安裝目錄在一起
2. 寫路徑 絕對(duì)路徑
"""
driver = webdriver.Chrome()
# 2. 訪問網(wǎng)站
driver.get('https://www.jsyks.com/kms-fzks')
driver.maximize_window()
"""
答題操作:
1. 題庫(kù) <獲取出來了>
讀取csv文件, 把題目?jī)?nèi)容以及答案讀取出來
1701道題,要讀1701次啊?
可以把問題作為字典鍵, 答案作為字典值
根據(jù)問題, 可以獲取答案
定位元素, 獲取數(shù)據(jù)內(nèi)容
"""
print(dic)
for page in range(50):
Questions = driver.find_element_by_css_selector('#ExamTit').text
# \d+ 匹配數(shù)字 獲取題目
Question = re.findall('\d+. (.*)', Questions)[0]
answer = dic[Question]
# 多選題, 答案肯定大于1
if len(answer) == 1:
# 判斷答案內(nèi)容 選擇選項(xiàng)
if answer == '對(duì)':
# 定位對(duì)元素, 進(jìn)行點(diǎn)擊操作
driver.find_element_by_css_selector('#TX1 #btnDa11').click()
elif answer == '錯(cuò)':
driver.find_element_by_css_selector('#TX1 #btnDa12').click()
elif answer == 'A':
driver.find_element_by_css_selector('#TX2 #btnDa21').click()
elif answer == 'B':
driver.find_element_by_css_selector('#TX2 #btnDa22').click()
elif answer == 'C':
driver.find_element_by_css_selector('#TX2 #btnDa23').click()
elif answer == 'D':
driver.find_element_by_css_selector('#TX2 #btnDa24').click()
# 點(diǎn)擊下一題
driver.find_element_by_css_selector('#actArea #btnNext2').click()
elif len(answer) > 1:
# 多選
for x in answer:
if x == 'A':
driver.find_element_by_css_selector('#TX2 #btnDa21').click()
elif x == 'B':
driver.find_element_by_css_selector('#TX2 #btnDa22').click()
elif x == 'C':
driver.find_element_by_css_selector('#TX2 #btnDa23').click()
elif x == 'D':
driver.find_element_by_css_selector('#TX2 #btnDa24').click()
driver.find_element_by_css_selector('#actArea #btnNext2').click()
driver.find_element_by_css_selector('#actArea #btnNext3').click()
driver.find_element_by_css_selector('#Tip_Msg span input:nth-child(1)').click()3)題庫(kù)主程序
import requests
import re
import csv
import concurrent.futures
import parsel
def AnswerID():
f = open('答案ID.txt', encoding='utf-8')
answer_id_list = [answer_id for answer_id in f.read().split(',')]
return answer_id_list
def GetResponse(html_url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
html_data = requests.get(url=html_url, headers=headers).text
return html_data
def GetContent(AnswerID):
AnswerUrl = f'https://tiba.jsyks.com/Post/{AnswerID}.htm'
html_data = GetResponse(html_url=AnswerUrl)
selector = parsel.Selector(html_data)
problem = selector.css('#question a::text').get()
answer = selector.css('#question h1 b::text').getall()
if len(answer) == 0:
answer = selector.css('#question h1 u::text').get()
AnswerDict = {
'Problem': problem,
'Answer': answer,
}
return AnswerDict
def main(page):
AnswerDict = GetContent(AnswerID=page)
csv_writer.writerow(AnswerDict)
print(AnswerDict)
if __name__ == '__main__':
# GetContent(AnswerID='8502e')
answer_id_list = AnswerID()
f = open('科目四題庫(kù).csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['Problem', 'Answer'])
csv_writer.writeheader()
exe = concurrent.futures.ThreadPoolExecutor(max_workers=7)
for answer_id in answer_id_list:
exe.submit(main, answer_id)
exe.shutdown()三、效果展示
1)自動(dòng)答題

?2)自動(dòng)上交試卷

很多人問為什么只有96分沒得100分?
因?yàn)轭}庫(kù)下載的題目答案是錯(cuò)誤的修正之后就可以啦!
以上就是Python實(shí)現(xiàn)考試自動(dòng)答題的腳本分享的詳細(xì)內(nèi)容,更多關(guān)于Python考試自動(dòng)答題的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 10個(gè)殺手級(jí)應(yīng)用的Python自動(dòng)化腳本
- 用?Python?腳本實(shí)現(xiàn)電腦喚醒后自動(dòng)拍照并截屏發(fā)郵件通知
- Python實(shí)現(xiàn)獲取網(wǎng)頁(yè)內(nèi)容及自動(dòng)填表單與登錄功能
- Python實(shí)現(xiàn)自動(dòng)識(shí)別并批量轉(zhuǎn)換文本文件編碼
- Java多線程Thread , Future , Callable , FutureTask的使用
- 30道python自動(dòng)化測(cè)試面試題與答案匯總
- 教你用Python寫一個(gè)京東自動(dòng)下單搶購(gòu)腳本
相關(guān)文章
Python+seaborn實(shí)現(xiàn)聯(lián)合分布圖的繪制
聯(lián)合分布(Joint Distribution)圖是一種查看兩個(gè)或兩個(gè)以上變量之間兩兩相互關(guān)系的可視化圖,在數(shù)據(jù)分析操作中經(jīng)常需要用到。本文將通過seaborn實(shí)現(xiàn)繪制聯(lián)合分布圖,需要的可以參考一下2023-02-02
Python實(shí)戰(zhàn)之實(shí)現(xiàn)簡(jiǎn)易的學(xué)生選課系統(tǒng)
又到了小伙伴們最喜歡的python實(shí)戰(zhàn)環(huán)節(jié),文中對(duì)實(shí)現(xiàn)簡(jiǎn)易的學(xué)生選課系統(tǒng)作了非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
如何利用python制作時(shí)間戳轉(zhuǎn)換工具詳解
這篇文章主要給大家介紹了關(guān)于如何利用python制作時(shí)間戳轉(zhuǎn)換工具的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09

