Selenium实现自动做题(MongoDB版)

本文介绍了如何使用Selenium自动化完成在线答题,包括登录、获取题目、存储到MongoDB数据库,以及匹配自己的账号填入答案。代码示例展示了登录、题目抓取和答案填充的过程,特别提到了OCR的局限性。最后提醒大家诚信学习。
摘要由CSDN通过智能技术生成

通过selenium实现自动做题,摆烂学生专用

1. 安装selenium等一系列初始环境的配置

https://blog.csdn.net/hit_Gwy/article/details/89455215

from selenium.webdriver import Keys
from selenium import webdriver
from selenium.webdriver.common.by import By
import pymongo
client = pymongo.MongoClient('localhost', 27017)
db = client['DB']
work = db.work
url = 'http://cg.XXXXX.cn'//自己选择平台
driver = webdriver.Chrome()
driver.get(url)

2.获取题目,存储到数据库中

这里操作的平台自己选择,数据库我使用的是MongoDB
然后选择某位同学的账号,登录,获取他已经做好的题目,存入到数据库中

username = driver.find_element(By.XPATH, '//*[@id="username"]')
password = driver.find_element(By.XPATH, '//*[@id="password"]')
imginput = driver.find_element(By.XPATH, '//*[@id="captchaCode"]')
number = input('请输入校验码:')
username.send_keys('*******')//输入某同学账号
password.send_keys('*******')//输入某同学密码
imginput.send_keys(number)
driver.find_element(By.XPATH,'/html/body/div[1]/div[2]/div[3]/div[4]/form/div[4]/button').submit()
for i in range(3):

    if i == 0:
        print('填空题\n')
    elif i == 1:
        print('单选题\n')
    else:
        print('判断题\n')
    item = driver.find_element(By.ID,'indexProsByKindDIV' + str(i + 1))
    form = item.find_elements_by_tag_name('form')
    m = 0
    for j in form:
        m = m + 1
        print('第' + str(m) + '题:')
        inputs = j.find_elements_by_tag_name('input')
        n = 0
        for k in inputs:
            if k.get_attribute('type') != 'hidden':
                n = n + 1
                if i == 2:
                    if k.get_attribute('checked') == 'true':
                        work.insert_one({
                            'type': i,
                            'no': m,
                            'value': k.get_attribute('value')
                        })
                        print(' 第' + str(n) + '空,答案:' + k.get_attribute('value'))

                else:
                    work.insert_one({
                        'type': i,
                        'no': m,
                        'number': n,
                        'value': k.get_attribute('value')
                    })
                    print(' 第' + str(n) + '空,答案:' + k.get_attribute('value'))

这里就不使用OCR了,免费的正确率太低,付费的,emmmm,我不说
在这里插入图片描述
在pycharm里面输入验证码,按回车。

在这里插入图片描述
在这里插入图片描述
数据库导入成功!

3.登录自己的账号,匹配题目,并完成

接下来的操作和上面的相似,获取答案变成答案写入

driver.find_element(By.XPATH,'//*[@id="userDropdown"]').click()
driver.find_element(By.XPATH,'//*[@id="navbarSupportedContent"]/form/ul[1]/li/div/a[2]').click()
username = driver.find_element(By.XPATH,'//*[@id="username"]')
password = driver.find_element(By.XPATH,'//*[@id="password"]')
imginput = driver.find_element(By.XPATH,'//*[@id="captchaCode"]')
img = driver.find_element(By.CLASS_NAME,'img-responsive')
number = input('请输入校验码:')
username.send_keys('********')//输入自己的账号
password.send_keys('*********')//输入自己的密码
imginput.send_keys(number)
driver.find_element(By.XPATH,'/html/body/div[1]/div[2]/div[3]/div[4]/form/div[4]/button').submit()
href = driver.find_elements(By.TAG_NAME,'a')
for i in href:
    if i.text == '操作系统'://输入课程名
        i.click()
        break
body = driver.find_element(By.CLASS_NAME,"panel-body")
body.find_element_by_tag_name('a').click()
for i in range(3):
    if i == 0:
        print('填空题\n')
    elif i == 1:
        print('单选题\n')
    else:
        print('判断题\n')
    item = driver.find_element(By.ID,'indexProsByKindDIV' + str(i + 1))
    form = item.find_elements_by_tag_name('form')
    m = 0
    for j in form:
        m = m + 1
        print('第' + str(m) + '题:已完成')
        inputs = j.find_elements_by_tag_name('input')
        n = 0
        for k in inputs:
            if k.get_attribute('type') != 'hidden':
                n = n + 1
                if i == 2:
                    value = work.find_one({
                        "$and": [{'type': i}, {'no': m}]
                    })
                    if value['value'] == 'true':
                        if k.get_attribute('value') == 'true':
                            k.click()
                    else:
                        if k.get_attribute('value') == 'false':
                            k.click()

                else:
                    value = work.find_one({
                        "$and": [{'type': i}, {'no': m}, {'number': n}]
                    })
                    print(value['value'])
                    k.send_keys(Keys.CONTROL,'a')
                    k.send_keys(Keys.BACK_SPACE)
                    k.send_keys(value['value'])

这里有个问题,如果原本自己上面有答案,那就需要删除,并填入新答案,
操作如下:
k.send_keys(Keys.CONTROL,‘a’)
k.send_keys(Keys.BACK_SPACE)
k.send_keys(value[‘value’])
在这里插入图片描述
操作成功啦!
分享到此结束,希望各位不要摆烂,好好做作业哦

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面向结果编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值