python超星尔雅学习通利用selenium一键建题库和一键做题
本文内代码适用的作业
多章节
大量单选,多选和判断题
作业内题目乱序
题目内选项乱序
没有主观题
实现过程主要分为两块,一块是登录其他已经完成作业的账号,爬取其所有已完成作业的题目与答案,并保存为txt文件;另一块是登录自己的账号,爬取题目信息与txt内题库进行比对,实现一键自动完成作业。
功能方面同样可以使用requests库达到目的,相关原理与 https://blog.csdn.net/m0_47926132/article/details/106957460?utm_source=app
内容同理。
from selenium import webdriver
import time
def initiate(self):
self.usernm1 = input("请输入您的手机号")
self.passwd1 = input("请输入您的密码")
driver = webdriver.Chrome()
url = 'http://passport2.chaoxing.com/login?fid=1467&refer=&newversion=true'
driver.get(url)
self.login(driver)
def login(self,driver):
usernm = driver.find_element_by_class_name("ipt-tel")
usernm.send_keys(self.usernm1)
passwd = driver.find_element_by_class_name("ipt-pwd")
passwd.send_keys(self.passwd1)
login = driver.find_element_by_class_name("btn-big-blue")
login.click()
input("请将页面切换至课程作业页面后在输入框按回车键")
file = open('c.txt', 'w')
self.getChapter(driver,file)
def getChapter(self,driver,file):
handles = driver.window_handles
driver.switch_to.window(handles[-1])
chapters = driver.find_elements_by_class_name("Btn_blue_1")
current_Chapter = 0
print("开始获取章节题目")
while current_Chapter < len(chapters):
a = 0
b = 0
c = 0
d = 0
handles = driver.window_handles
driver.switch_to.window(handles[-1])
chapters = driver.find_elements_by_class_name("Btn_blue_1")
chapters[current_Chapter].click()
time.sleep(1)
title = driver.find_element_by_css_selector("li.cur")
test = driver.find_elements_by_css_selector("div.CeYan>div.ZyBottom>div.TiMu>div.Zy_TItle>div.clearfix>div:first-child")
num = len(test)
choices = driver.find_elements_by_css_selector("div.CeYan>div.ZyBottom>div.TiMu>ul>li>i")
choices_2 = driver.find_elements_by_css_selector("div.CeYan>div.ZyBottom>div.TiMu>ul>li>a")
myanswer = driver.find_elements_by_css_selector("div.TiMu>div.Py_answer>span:first-child")
choose_a = driver.find_elements_by_css_selector("div.TiMu>div.Py_answer>span>i.font20")
i = 0
file.write(title.text + "开始\n")
while i < num:
try:
file.write(test[a].text + "\n" + choices[b].text + choices_2[b].text + "\n" + choices[b+1].text+ choices_2[b+1].text +"\n" + choices[b+2].text + choices_2[b+2].text +"\n" + choices[b+3].text+choices_2[b+3].text + "\n" + myanswer[d].text + "\n\n")
a+=1
b+=4
d+=1
except:
if choose_a[c].text == "√":
choose_a[c] = "对"
elif choose_a[c].text == "×":
choose_a[c] = "错"
file.write(test[a].text + "\n" + choose_a[c] + "\n\n")
a+=1
c+=1
i += 1
file.write(title.text + "结束\n")
driver.back()
current_Chapter += 1
driver.quit()
from selenium import webdriver
import time
class GetMooc():
def initiate(self):
usernm = input("请输入您的手机号")
passwd = input("请输入您的密码")
driver = webdriver.Chrome()
url = 'http://passport2.chaoxing.com/login?fid=1467&refer=&newversion=true'
driver.get(url)
self.login(driver)
def login(self,driver):
usernm = driver.find_element_by_class_name("ipt-tel")
usernm.send_keys(usernm)
passwd = driver.find_element_by_class_name("ipt-pwd")
passwd.send_keys(passwd)
login = driver.find_element_by_class_name("btn-big-blue")
login.click()
input("请将页面切换至课程作业页面后在输入框按回车键")
file = open('c.txt', 'w')
self.getChapter(driver,file)
def getChapter(self,driver,file):
handles = driver.window_handles
driver.switch_to.window(handles[-1])
chapters = driver.find_elements_by_class_name("Btn_blue_1")
current_Chapter = 0
print("开始获取章节题目")
while current_Chapter < len(chapters):
a = 0
b = 0
c = 0
d = 0
handles = driver.window_handles
driver.switch_to.window(handles[-1])
chapters = driver.find_elements_by_class_name("Btn_blue_1")
chapters[current_Chapter].click()
time.sleep(1)
title = driver.find_element_by_css_selector("li.cur")
test = driver.find_elements_by_css_selector("div.CeYan>div.ZyBottom>div.TiMu>div.Zy_TItle>div.clearfix>div:first-child")
num = len(test)
choices = driver.find_elements_by_css_selector("div.CeYan>div.ZyBottom>div.TiMu>ul>li>i")
choices_2 = driver.find_elements_by_css_selector("div.CeYan>div.ZyBottom>div.TiMu>ul>li>a")
myanswer = driver.find_elements_by_css_selector("div.TiMu>div.Py_answer>span:first-child")
choose_a = driver.find_elements_by_css_selector("div.TiMu>div.Py_answer>span>i.font20")
i = 0
file.write(title.text + "开始\n")
while i < num:
try:
file.write(test[a].text + "\n" + choices[b].text + choices_2[b].text + "\n" + choices[b+1].text+ choices_2[b+1].text +"\n" + choices[b+2].text + choices_2[b+2].text +"\n" + choices[b+3].text+choices_2[b+3].text + "\n" + myanswer[d].text + "\n\n")
a+=1
b+=4
d+=1
except:
if choose_a[c].text == "√":
choose_a[c] = "对"
elif choose_a[c].text == "×":
choose_a[c] = "错"
file.write(test[a].text + "\n" + choose_a[c] + "\n\n")
a+=1
c+=1
i += 1
file.write(title.text + "结束\n")
driver.back()
current_Chapter += 1
driver.quit()
if __name__ == '__main__':
samuel = GetMooc()
samuel.initiate()
from selenium import webdriver
import time
import re
def initiate(self):
file = open('c.txt', 'r')
self.load(file)
def load(self,file):
file = file.read()
self.web(file)
def web(self,file):
usernma = input("请输入您的账号")
passwda = input("请输入您的密码")
driver = webdriver.Chrome()
url = 'http://passport2.chaoxing.com/login?fid=1467&refer=&newversion=true'
driver.get(url)
usernm = driver.find_element_by_class_name("ipt-tel")
usernm.send_keys(usernma)
passwd = driver.find_element_by_class_name("ipt-pwd")
passwd.send_keys(passwda)
login = driver.find_element_by_class_name("btn-big-blue")
login.click()
input("请进入毛概课程的作业页面 然后在此界面点击回车")
self.request(driver, file)
def request(self,driver,file):
handles = driver.window_handles
driver.switch_to.window(handles[-1])
chapters = driver.find_elements_by_css_selector("div.titOper>p.clearfix>a.Btn_red_1")
current_Chapter = 0
while current_Chapter < len(chapters):
a = 0
b = 0
handles = driver.window_handles
driver.switch_to.window(handles[-1])
chapters = driver.find_elements_by_css_selector("div.titOper>p.clearfix>a.Btn_red_1")
chapters[current_Chapter].click()
time.sleep(2)
tests = driver.find_elements_by_css_selector("div.ZyBottom>div.TiMu>div.Zy_TItle>div:nth-child(2)")
for test in tests:
choices = driver.find_elements_by_css_selector("ul.Zy_ulTop>li>a.after")
test = test.text
if "(" in test:
test = re.sub('\(', "\(", test)
test = re.sub('\)', "\)", test)
if "?" in test:
test = re.sub('\?', "\?", test)
if "." in test:
test = re.sub('\.', "\.", test)
try:
# result = re.findall(test + r"\nA、(.*?)\nB、(.*?)\nC、(.*?)\nD、(.*?)\n"+ r"我的答案:|正确答案:" + r"(.*?)\n", file)
result = re.findall(test + r"\nA、(.*?)\nB、(.*?)\nC、(.*?)\nD、(.*?)\n"+ r"[我正][的确]答案:"+ r"(.*?)\n", file)
print(test)
print(result)
myanswer = result[0][4]
choices = driver.find_elements_by_css_selector("ul.Zy_ulTop>li>a.after")
if "A" in myanswer:
for item in choices[b:b+4]:
if item.text in result[0][0]:
item.click()
if "B" in myanswer:
for item in choices[b:b+4]:
if item.text in result[0][1]:
item.click()
if "C" in myanswer:
for item in choices[b:b+4]:
if item.text in result[0][2]:
item.click()
if "D" in myanswer:
for item in choices[b:b+4]:
if item.text in result[0][3]:
item.click()
b += 4
except:
result = re.findall(test + r"\n(.*?)\n", file)
choices = driver.find_elements_by_css_selector("div.TiMu>ul.Zy_ulBottom>li>input")
if result[0] == "对":
choices[a].click()
a += 2
elif result[0] == "错":
choices[a+1].click()
a += 2
# by_css_selector("div.AlertCon02>div.con03>div.marTop30>a.bluebtn")
time.sleep(1)
submit = driver.find_element_by_css_selector("div.ZY_sub>a.Btn_blue_1")
submit.click()
time.sleep(3)
from selenium import webdriver
import time
import re
class DoMooc():
def initiate(self):
file = open('c.txt', 'r')
self.load(file)
def load(self,file):
file = file.read()
self.web(file)
def web(self,file):
usernma = input("请输入您的账号")
passwda = input("请输入您的密码")
driver = webdriver.Chrome()
url = 'http://passport2.chaoxing.com/login?fid=1467&refer=&newversion=true'
driver.get(url)
usernm = driver.find_element_by_class_name("ipt-tel")
usernm.send_keys(usernma)
passwd = driver.find_element_by_class_name("ipt-pwd")
passwd.send_keys(passwda)
login = driver.find_element_by_class_name("btn-big-blue")
login.click()
input("请进入毛概课程的作业页面 然后在此界面点击回车")
self.request(driver, file)
def request(self,driver,file):
handles = driver.window_handles
driver.switch_to.window(handles[-1])
chapters = driver.find_elements_by_css_selector("div.titOper>p.clearfix>a.Btn_red_1")
current_Chapter = 0
while current_Chapter < len(chapters):
a = 0
b = 0
handles = driver.window_handles
driver.switch_to.window(handles[-1])
chapters = driver.find_elements_by_css_selector("div.titOper>p.clearfix>a.Btn_red_1")
chapters[current_Chapter].click()
time.sleep(2)
tests = driver.find_elements_by_css_selector("div.ZyBottom>div.TiMu>div.Zy_TItle>div:nth-child(2)")
for test in tests:
choices = driver.find_elements_by_css_selector("ul.Zy_ulTop>li>a.after")
test = test.text
if "(" in test:
test = re.sub('\(', "\(", test)
test = re.sub('\)', "\)", test)
if "?" in test:
test = re.sub('\?', "\?", test)
if "." in test:
test = re.sub('\.', "\.", test)
try:
# result = re.findall(test + r"\nA、(.*?)\nB、(.*?)\nC、(.*?)\nD、(.*?)\n"+ r"我的答案:|正确答案:" + r"(.*?)\n", file)
result = re.findall(test + r"\nA、(.*?)\nB、(.*?)\nC、(.*?)\nD、(.*?)\n"+ r"[我正][的确]答案:"+ r"(.*?)\n", file)
print(test)
print(result)
myanswer = result[0][4]
choices = driver.find_elements_by_css_selector("ul.Zy_ulTop>li>a.after")
if "A" in myanswer:
for item in choices[b:b+4]:
if item.text in result[0][0]:
item.click()
if "B" in myanswer:
for item in choices[b:b+4]:
if item.text in result[0][1]:
item.click()
if "C" in myanswer:
for item in choices[b:b+4]:
if item.text in result[0][2]:
item.click()
if "D" in myanswer:
for item in choices[b:b+4]:
if item.text in result[0][3]:
item.click()
b += 4
except:
result = re.findall(test + r"\n(.*?)\n", file)
choices = driver.find_elements_by_css_selector("div.TiMu>ul.Zy_ulBottom>li>input")
if result[0] == "对":
choices[a].click()
a += 2
elif result[0] == "错":
choices[a+1].click()
a += 2
# by_css_selector("div.AlertCon02>div.con03>div.marTop30>a.bluebtn")
time.sleep(1)
submit = driver.find_element_by_css_selector("div.ZY_sub>a.Btn_blue_1")
submit.click()
time.sleep(3)
if __name__ == '__main__':
samuel = DoMooc()
samuel.initiate()
input("按回车退出")