栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Selenium实现自动做题(MongoDB版)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Selenium实现自动做题(MongoDB版)

通过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’])

操作成功啦!
分享到此结束,希望各位不要摆烂,好好做作业哦

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/918544.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号