中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現考試自動答題功能

發布時間:2023-03-17 10:40:47 來源:億速云 閱讀:143 作者:iii 欄目:開發技術

這篇文章主要介紹“Python如何實現考試自動答題功能”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python如何實現考試自動答題功能”文章能幫助大家解決問題。

一、準備環境

1)運行環境 

 開發環境:

Python3、Pycharm社區版。

import requests  ---> 數據請求模塊 pip install requests  
import re
from selenium import webdriver ---> 自動測試模塊 pip install selenium==3.141.0  <指定版本安裝>。

谷歌瀏覽器 以及 谷歌驅動 <版本和瀏覽器版本相對應> 環境沒有安裝的同學, 可以去安裝。

 2)模塊安裝

第三方庫的安裝方式如下: 

一般安裝:pip install +模塊名 

鏡像源安裝:pip install -i pypi.douban.com/simple/+模塊名&hellip;

 (還有很多國內鏡像源,這里是豆瓣的用習慣了,其他鏡像源可以去看下之前文章都有的)

二、代碼展示 

1)爬蟲實現思路

一. 數據來源分析 --> 通過瀏覽器 開發者工具 抓包分析    

1. 明確需求:        - 明確采集的網站是什么            

題目答案頁面: https://tiba.jsyks.com/Post/2c15b.htm

2.  分析這兩個數據怎么獲取    

數據來自于 --> 答案頁面 

第一題: https://tiba.jsyks.com/Post/2c15b.htm    

問題: 獲取1701道題目 --> 分析每個題目答案頁面URL構成        

第一題: https://tiba.jsyks.com/Post/2c15b.htm        

第二題: https://tiba.jsyks.com/Post/8ac1a.htm       

 第三題: https://tiba.jsyks.com/Post/e97d7.htm    2c15b / 8ac1a / e97d7    

所以 只需要獲取所有答案頁面ID, 即可獲取所有題庫 。

2)自動答題主程序

# 導入自動化測試模塊 --> 重點 3.141.0 版本
from selenium import webdriver
# 導入pandas
import pandas as pd
# 導入正則
import re

df = pd.read_csv('題庫.csv')
key = []
value = []
# 獲取每一道題目
for i in df['Problem']:  # 問題作為鍵
    # 把題目添加到列表里面
    key.append(i)
# 獲取每一道題目答案
for j in df['Answer']: # 問題作為值
    # 把答案添加到列表里面
    value.append(j)

# 把兩個列表合并成字典
dic = dict(zip(key, value))

"""
1. 打開瀏覽器
    Chrome 瀏覽器 谷歌
    webdriver.Chrome('驅動路徑')
    I. 驅動選擇
        根據你自己瀏覽器版本, 選擇驅動版本, 最相近即可
        驅動只有32
    II. 驅動路徑寫法
        1. 不寫路徑
            - 驅動和你代碼在一起
            - 驅動和你python安裝目錄在一起
        2. 寫路徑 絕對路徑

"""
driver = webdriver.Chrome()
# 2. 訪問網站
driver.get('https://www.jsyks.com/kms-fzks')
driver.maximize_window()

"""
答題操作:
    1. 題庫 <獲取出來了>
        讀取csv文件, 把題目內容以及答案讀取出來

1701道題,要讀1701次啊?
    可以把問題作為字典鍵, 答案作為字典值
    根據問題, 可以獲取答案

定位元素, 獲取數據內容
"""

print(dic)
for page in range(50):
    Questions = driver.find_element_by_css_selector('#ExamTit').text
    # \d+ 匹配數字 獲取題目
    Question = re.findall('\d+. (.*)', Questions)[0]
    answer = dic[Question]
    # 多選題, 答案肯定大于1
    if len(answer) == 1:
        # 判斷答案內容 選擇選項
        if answer == '對':
            # 定位對元素, 進行點擊操作
            driver.find_element_by_css_selector('#TX1 #btnDa11').click()
        elif answer == '錯':
            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()

        # 點擊下一題
        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)題庫主程序

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 h2 b::text').getall()
    if len(answer) == 0:
        answer = selector.css('#question h2 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('科目四題庫.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)自動答題

Python如何實現考試自動答題功能

2)自動上交試卷

Python如何實現考試自動答題功能

很多人問為什么只有96分沒得100分?

因為題庫下載的題目答案是錯誤的修正之后就可以啦!

關于“Python如何實現考試自動答題功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克什克腾旗| 沾益县| 青神县| 敦化市| 齐河县| 靖江市| 郎溪县| 万全县| 察雅县| 南昌市| 曲周县| 阳新县| 冀州市| 措勤县| 丰宁| 厦门市| 汉阴县| 苏尼特右旗| 旬阳县| 万安县| 张家界市| 武威市| 油尖旺区| 辽阳市| 宿迁市| 安吉县| 西乌珠穆沁旗| 丹凤县| 谢通门县| 缙云县| 辽中县| 中超| 吴旗县| 炎陵县| 新巴尔虎左旗| 南丹县| 连江县| 宣化县| 天镇县| 田林县| 澄江县|