python实现强智科技教务系统抢课(两种方法)
python实现强智科技教务系统抢课(两种⽅法)
前⾔
⼜到了选课的时间,⼜⼀次被教务系统的预选给安排了,硬是⼀门都没选中。于是想实现有没有⾃动捡课的⽅法。就整体分为两种⽅法,⼀种是获取get请求然后由python多线程提交去选课,⼀种是利⽤⾃动化测试的selenium库去调⽤⾕歌浏览器模拟⼈⼯选课操作。其实就算都是强智系统,但细节上还是有些差别的。所以也有可能⽆法实现。这⾥放出两种⽅法的代码和流程,仅供参考。
⽅法⼀:
直接提交选课的数据包(需要cookie和课程ID),先⽤同学的账号登录教务系统,进⼊到选课的地⽅,打开浏览器的开发模式(按F12),点击Network()我这⾥是⾕歌浏览器,如果是其他的到⽹络抓包即可。
点击你想选择课程的选课按钮,得到我们需要的数据包。
我们来看下这个数据包的内容,我们需要到cookie( 你的⾝份标识),以及我们需要选的课程ID,然后⽤python模拟提交就OK了。
注意 代码⾥的User_Agent和Referer也要记得修改,都在数据包⾥。
下⾯是代码:
import requests
from st.ssl_servers import threading
# 获取cookie 和课程id就可以抢课
def qian1():
data =201820192001656
# data 是到的课程ID,因为python没学好,代码写的有点乱
# 下⾯是地址就是我们抓到的那个数据包的URL
url ='****(学校的地址).edu/jsxsd/xsxkkc/bxxkOper?jx0404id='+str(data)
cookie =' ⽤到的cookie替换'
header ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36', 'Referer':'........../srun_portal_pc.php?ac_id=1',
'cookie':cookie
}
# ⼀直抢!
while True:
# 设定5s服务器未应答就放弃这次,⿁知道是服务器炸了还是。。。。
mes = (url, headers=header, timeout=5)
# 打印返回的结果,就是弹出来的那个⼩窗⼝的内容
print(str(1)+str(mes.status_code)+':'+))
# 后⾯是不同的课,因为不能吊在⼀课树上!
def qian():
data =201820192001302
data =201820192001302
url ='*****/jsxsd/xsxkkc/bxxkOper?jx0404id='+str(data)
cookie ='*****cookie'
header ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36', 'Referer':'172.30.1.70/srun_portal_pc.php?ac_id=1',
'cookie':cookie
}
while True:
mes = (url, headers=header, timeout=5)
print(str(0)+str(mes.status_code)+':'+))
def qian2():
data =201820192001155
url ='****n/jsxsd/xsxkkc/bxxkOper?jx0404id='+str(data)
cookie ='cookie'
header ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36', 'Referer':'172.30.1.70/srun_portal_pc.php?ac_id=1',
'cookie': cookie
}
while True:
mes = (url, headers=header, timeout=5)
print(str(2)+str(mes.status_code)+':'+))
def main():
# 开多线程分开抢课
# 接下来就会⼀直抢课!
thread1 = threading.Thread(target=qian)
thread2 = threading.Thread(target=qian1)
thread3 = threading.Thread(target=qian2)
thread4 = threading.Thread(target=qian)
thread5 = threading.Thread(target=qian1)
thread6 = threading.Thread(target=qian2)
thread1.start()
thread2.start()
thread3.start()
thread4.start()
thread5.start()
thread6.start()
main()
⽅法⼆:selenium库模拟⼈⼯选课
要使⽤这个⽅法之前,最好先看⼀下这⼀篇⽂章,。记得提前安装好selenium库,以及Chromedriver。具体⽅法可以在csdn搜索。使⽤流程
1. 将脚本内信息填好改好
2. 运⾏脚本,此时会打开chrome并且打开登录页,脚本会⾃⾏填写学号密码,需要等你填写验证码
# author: Viper
# time: 2020/7/2 12:03
qq用户名# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdrivermon.keys import Keys
from time import sleep
chrome_options = webdriver.ChromeOptions()
class Qiangke(object):
login_url ="***.edu/jsxsd/"#登录页⾯,修改成你学校的登录地址
select_url ="****/jsxsd/xsxk/xsxk_index?jx0502zbid=B563D5935D024C6387445066336AA73B"#修改为登录成功后的界⾯
initmy_url ="****/jsxsd/framework/xsMain.jsp"
#修改为你选课的界⾯
xh = u"****"#填写⽤户名
pwd ='****'#填写密码
_user ="****@qq"#填写你的邮箱(⽤于发邮件提醒抢课成功)
_pwd ="****"#授权码,在邮箱⾥获得
_to ="****@qq"#收件⼈邮箱,可以写⾃⼰的,帮别⼈抢课就发别⼈的
course_category = u'公选课选课'# 这⾥填写选课种类,这个脚本只能抢跨年级,跨专业,和公选,需输⼊完整的名字如“专业内跨年级选课”,“跨专业选课”,“公选课选课”
class_name = u"美术赏析"#这⾥输⼊你想抢的课的名字(关键字即可)
teacher_name = u""#这⾥输⼊你想抢的课的⽼师的名字
def__init__(self):
print("开始抢课")
def login(self):
(self.login_url)
self.driver.find_element_by_id("details-button").click()
self.driver.find_element_by_id("proceed-link").click()
self.driver.find_element_by_name("USERNAME").send_keys(self.xh)
self.driver.find_element_by_name("PASSWORD").send_keys(self.pwd)
print("等待验证码,⾃⾏输⼊....")
while True:
if self.driver.current_url != self.initmy_url:
sleep(1)
else:
break
def send(self, text, send_msg=False):
import smtplib
from import MIMEText
msg = MIMEText(text)
msg["Subject"]="你选课成功了!"
msg["From"]= self._user
msg["To"]= self._to
s = smtplib.SMTP_SSL("smtp.qq",465)
s.login(self._user, self._pwd)
s.sendmail(self._user, self._to, msg.as_string())
s.quit()
def start(self):
# 这⾥需要根据⾃⼰的教务系统去修改了,有挺多不⼀样的地⽅。所以建议阅读完使⽤⽂档再来修改
self.driver = webdriver.Chrome(chrome_options=chrome_options)
self.login()
(self.select_url)
self.driver.find_element_by_link_urse_category).click()
self.driver.switch_to.frame(self.driver.find_element_by_xpath('//*[@id="mainFrame"]'))
self.driver.find_element_by_id('kcxx').send_keys(self.class_name)
self.driver.find_element_by_id('skls').send_acher_name)
self.driver.find_element_by_value(u"查询").click()
cnt =1
while True:
try:
self.driver.find_element_by_link_text('选课').click()
except:
self.driver.switch_to.default_content()
self.driver.switch_to.frame(self.driver.find_element_by_xpath('//*[@id="mainFrame"]'))                self.driver.find_element_by_link_text("选课").click()
dig_alert = self.driver.switch_to.alert
dig_alert.accept()
text =
if text !='选课失败:此课堂选课⼈数已满!'and text !='':
self.send('{}  选课成功'.format(self.class_name))
break
elif text =='':
dig_alert.accept()
cnt +=1
if cnt %200==0:
print(cnt)
if __name__ =="__main__":
qiangke = Qiangke()
qiangke.start()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。