通过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’])
操作成功啦!
分享到此结束,希望各位不要摆烂,好好做作业哦