如何利用python实现选择题自动答题(科一)

文章介绍了如何利用Python的Selenium库和requests库自动化操作浏览器,实现对动态网页上的题目进行选择并提交,展示了从打开网页、查找选项、判断答案到提交的完整流程。
摘要由CSDN通过智能技术生成

  效果图展示                                                                                                                    

1.导入所需的模块:

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
import requests
import parsel

这段代码导入了所需的模块。 selenium 用于控制浏览器, time 用于处理时间, requests 用于发送 HTTP 请求 parsel 用于解析 HTML 或 XML 数据。                                                       


2.实例化一个浏览器对象:

driver = webdriver.Chrome()

通过实例化 webdriver.Chrome(),创建一个 Chrome 浏览器对象。                                                  


3.打开指定网页:

driver.get('https://www.jsyks.com/kmy-mnks')

使用 get() 方法打开指定的网页。                                                                                               


4.强制等待和最大化浏览器窗口:

time.sleep(2)
driver.maximize_window()

使用 time.sleep() 方法进行强制等待 2 秒,然后使用 maximize_window() 方法最大化浏览器窗口。                                                                                                                                           


5.隐式等待:

driver.implicitly_wait(10)

使用 implicitly_wait() 方法设置隐式等待时间为 10 秒。这意味着在查找元素时,如果元素未立即出现,将最多等待 10 秒。                                                                                              


6.查找题目选项并选择正确答案:

lis = driver.find_elements(By.CSS_SELECTOR, '.Content>li')
for li in lis:
    # 获取题目id
    rid = li.get_attribute('c')
    url = f'https://tiba.jsyks.com/Post/{rid}.htm'
    response = requests.get(url=url).text
    selector = parsel.Selector(response)
    answer = selector.css('#question u::text').get()
    if answer == '对':
        answer = '正确'
    elif answer == '错':
        answer = '错误'
    bs = li.find_elements(By.CSS_SELECTOR, 'B')
    for b in bs:
        choose = b.text
        if len(choose) > 2:
            choose = choose[0]
        if answer == choose:
            b.click()

lis = driver.find_elements(By.CSS_SELECTOR, '.Content>li') 中,使用 CSS 选择器找到题目列表的每个题目选项。然后,依次处理每个题目:                                                                  1.获取题目的 id,并构造获取题目内容的 URL。                                                                              2.使用 requests.get() 方法发送请求并获取响应体的文本数据。                                                  3.使用 parset.Selector() 构造一个 Selector 对象来解析响应体。                                              4.使用 CSS 选择器 '#question u::text' 获取题目的答案。将答案进行处理,将 '对' 转换为 '正确',将 '错' 转换为 '错误'。                                                                                              5.使用 li.find_elements(By.CSS_SELECTOR, 'B') 找到当前题目的选项。遍历选项,并将选项与答案进行比较,如果匹配,则点击该选项。                                                                      


7.提交试卷:

driver.find_element(By.CSS_SELECTOR, '.btnJJ').click()

通过 CSS 选择器找到提交试卷的按钮,并点击它。                                                                 


8.添加阻塞:

input()

通过 input() 方法添加一个阻塞,使程序暂停在这里,等待用户输入。                                      


9.关闭浏览器:

driver.quit()

使用 quit() 方法关闭浏览器。                                                                                                         


     10.全部代码如下:

"""


[使用模块]: requests >>> pip install requests   <第三方模块>
           selenium >>> pip install selenium   <第三方模块>
           parsel >>> pip install parsel       <第三方模块>
           time                                <内置模块>


"""
# 导入浏览器对象
from selenium import webdriver
# 导入时间模块
import time
# 导入元素定位功能
from selenium.webdriver.common.by import By
# driver.find_element_by_css_selector() 4 一定会报错 弃用 3
# 导入数据请求模块
import requests
# 数据解析模块
import parsel



# 实例化一个浏览器对象
driver = webdriver.Chrome()

# 打开浏览器的窗口
driver.get('https://www.jsyks.com/kmy-mnks')
# 强制等待
time.sleep(2)
# 最大化浏览器的窗口
driver.maximize_window()
# 隐式等待  智能
driver.implicitly_wait(10)

# elements 返回的是一个列表对象
lis = driver.find_elements(By.CSS_SELECTOR, '.Content>li')
# print(len(lis))
# print(lis)
for li in lis:
    time.sleep(0.2)  # 优先考虑使用随机数
    rid = li.get_attribute('c')
    # print(rid)
    url = f'https://tiba.jsyks.com/Post/{rid}.htm'
    # 获取到响应体对象的文本数据
    response = requests.get(url=url).text
    # 转对象
    selector = parsel.Selector(response)
    answer = selector.css('#question u::text').get()
    # print(answer)
    # 重新赋值
    if answer == '对':
        answer = '正确'
    elif answer == '错':
        answer = '错误'
    # else:  不确定的情况
    # print(answer)
    bs = li.find_elements(By.CSS_SELECTOR, 'B')
    for b in bs:
        # 获取选项的内容
        choose = b.text
    #     print('题目的选项是', choose)
    # print('正确答案是', answer)
        # 可能错题
        # if answer in choose:
        #     # 正确答案的点击操作
        #     b.click()
        if len(choose) > 2:
            choose = choose[0]
        if answer == choose:
            b.click()

# 提交试卷
driver.find_element(By.CSS_SELECTOR, '.btnJJ').click()






# 添加阻塞
input()

# 关闭浏览器
driver.quit()

创作不易,留下一个小点赞和关注呗,编程之路,一起加油,朋友

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值