首页 网站首页 商业信息 脚本 查看内容

如何利用Python脚本自动选课?心仪好课抢不到?Python来 ...

私域运营 2023-2-8 21:14 10295人围观 脚本

布景

某些黉舍的选课规定是只能在特按时候,由上千人同时登陆教务系统,拔取数目不充沛的课程
这样做的结果是一部分人登陆不上系统;另一部分人登陆进了系统但已经没有残剩课程了;只要一部分人可以选到课程,但也一定是心仪的课程。

笔者以为这样的选课法则明显是有题目标,在信息化如此发财的现代社会,采纳这类“抢课”的方式,恍如回到原始社会的大草原上追逐猎物,只要精神充分、命运好的猎人材能追到猎物。
若何保证公允是个永久的话题。我以为一种能够的计划是预选+摇号,这样也许选到课程的人会更多,而不是集合于少数人。

但若何在现有选课法则下选到课,还得用魔法来打败魔法。在选课竣事后,笔者一门课程也没有选到,是以笔者尝试编写一个自动化剧本。剧本每隔固按时候革新选课网页,当有同学退课时,立即报名。理论表白,这类战略很是有用,三周内成功选到一切七门课程。

祝大师都能选上心仪的课程!

实现


自动化剧本采用Python说话编写,利用selenium库模拟阅读器操纵,利用ddddocr库识别考证码。分为自动登录 → \rightarrow →革新网页 → \rightarrow →报名课程三个步调。

自动登录

教务系统凡是有考证码,可采用第三方库ddddocr识别后,再自动输入。




def Identify_verifi_code(driver):
driver.save_screenshot("D:\\2.png") #//获得页面截图
img = Image.open('D:\\2.png') ## 翻开2.png文件,并赋值给img
region = img.crop((650,438,772,491)) #//对获得的截图停止裁剪
region.save('D:\\3.png') #//保存裁剪后的图片
ocr = ddddocr.DdddOcr() #//导入考证码识别
with open("D:\\3.png", "rb") as f:
img_bytes = f.read()
res = ocr.classification(img_bytes) #//将识别出来的考证码赋给res
return res


途径和图片名可以按需变动。

革新网页


def do_login(driver):
driver.maximize_window() #将窗口最大化
my_action=ActionChains(driver)

verifi_code = Identify_verifi_code(driver) #识别考证码
# 找到登录框 输入账号密码
driver.find_element(By.ID, 'UserId').send_keys(username)#输入用户
driver.find_element(By.ID, 'Password').send_keys(password)#输入密码
driver.find_element(By.ID, 'VeriCode').send_keys(verifi_code)#输入考证码

time.sleep(6)
wait = WebDriverWait(driver, 10) #10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后竣事。
wait.until(lambda driver: driver.find_element(By.XPATH, login))
driver.find_element(By.XPATH, login).click() #点击登录

wait = WebDriverWait(driver, 20) #20秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后竣事。
wait.until(lambda driver: driver.find_element(By.XPATH, goverment))
driver.find_element(By.XPATH, goverment).click()#点击培育治理

time.sleep(1)
driver.find_element(By.XPATH, lecture_sign_up).click()
time.sleep(5)
count = 0

while True:
count = count + 1
print(count, end = " ")
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

for lecture in lectures:
time.sleep(1)

driver.switch_to.frame('mainFrame')

time.sleep(2)
driver.find_element(By.CLASS_NAME,lecture_name).send_keys(lecture) #输入讲座题目文本框

time.sleep(1)
driver.find_element(By.XPATH, query).click() #点击查询

time.sleep(2)
driver.find_element(By.XPATH, sign_up).click() #点击报名

time.sleep(1)
driver.find_element(By.XPATH, submit).click() #点击肯定

time.sleep(1)
driver.switch_to.parent_frame()
driver.find_element(By.XPATH, lecture_sign_up).click()

time.sleep(90)


报名课程

if __name__ == '__main__':
# 模拟阅读器翻开网站
# 增加参数
options = Options()
# 封闭沙盒启动
options.add_argument('--no-sandbox')

driver = webdriver.Chrome(chrome_options = options)
driver.get(url)

# 登录并查询
try:
do_login(driver)
except:
driver.quit()
driver = webdriver.Chrome(chrome_options = options)
driver.get(url)
do_login(driver)

完整源码


# -*- coding: utf-8 -*-
#2022/10/28
#自动革新网站,查询讲座残剩名额,自动报名

from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from PIL import Image
import time
import ddddocr
import base64

# 只需点窜下面三项即可 学号 密码 网址
username = "12345678"
password = "88888888"
url = "https://login.com"

lectures = []
# lectures.APPend("大坝平安技术前沿与创新范畴")
# lectures.append("梯级水库群结合调剂高效优化方式研讨")
# lectures.append("海上风电桩基冲洗与防护研讨与前沿")
# lectures.append("高坝泄洪消能研讨停顿")
# lectures.append("在高原探访铅锌宝藏")
lectures.append("好氧颗粒污泥的研讨和利用:新净化物影响与稳定运转")
# lectures.append("大致积混凝土无人运浇系统模子研讨")

# F12找到这些位置的 full XPath
login = "/html/body/div[2]/form/div/div[1]/div[5]/button" #登录

goverment = "/html/body/div[2]/div/div[1]/div[3]/div[2]/a"#培育治理
lecture_sign_up = "/html/body/div[2]/div/div[1]/div[3]/div[2]/ul/li[14]/a"#博导讲座报名
lecture_name = "textbox-text.validatebox-text.textbox-prompt" #讲座题目
lecture_name_text = "textbox-text.validatebox-text" #讲座题目

query = "/html/body/div[1]/div/div/div/div[2]/a/span/span[1]"#查询
sign_up = "/html/body/div[1]/div/div/div/div[3]/div/div[1]/div[2]/div[2]/table/tbody/tr/td[10]/div/a[2]"#报名讲座
submit = "/html/body/div[3]/div[2]/div[4]/a/span"#肯定


# 识别考证码
def Identify_verifi_code(driver):
driver.save_screenshot("D:\\2.png") #//获得页面截图
img = Image.open('D:\\2.png') ## 翻开2.png文件,并赋值给img
region = img.crop((650,438,772,491)) #//对获得的截图停止裁剪
region.save('D:\\3.png') #//保存裁剪后的图片
ocr = ddddocr.DdddOcr() #//导入考证码识别
with open("D:\\3.png", "rb") as f:
img_bytes = f.read()
res = ocr.classification(img_bytes) #//将识别出来的考证码赋给res
return res

# 模拟登陆打卡
def do_login(driver):
driver.maximize_window() #将窗口最大化
my_action=ActionChains(driver)

verifi_code = Identify_verifi_code(driver) #识别考证码
# 找到登录框 输入账号密码
driver.find_element(By.ID, 'UserId').send_keys(username)#输入用户名
driver.find_element(By.ID, 'Password').send_keys(password)#输入密码
driver.find_element(By.ID, 'VeriCode').send_keys(verifi_code)#输入考证码

time.sleep(6)
wait = WebDriverWait(driver, 10) #10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后竣事。
wait.until(lambda driver: driver.find_element(By.XPATH, login))
driver.find_element(By.XPATH, login).click() #点击登录

wait = WebDriverWait(driver, 20) #20秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后竣事。
wait.until(lambda driver: driver.find_element(By.XPATH, goverment))
driver.find_element(By.XPATH, goverment).click()#点击培育治理

time.sleep(1)
driver.find_element(By.XPATH, lecture_sign_up).click()
time.sleep(5)
count = 0

while True:
count = count + 1
print(count, end = " ")
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

for lecture in lectures:
time.sleep(1)

driver.switch_to.frame('mainFrame')

time.sleep(2)
driver.find_element(By.CLASS_NAME,lecture_name).send_keys(lecture) #输入讲座题目文本框

time.sleep(1)
driver.find_element(By.XPATH, query).click() #点击查询

time.sleep(2)
driver.find_element(By.XPATH, sign_up).click() #点击报名

time.sleep(1)
driver.find_element(By.XPATH, submit).click() #点击肯定

time.sleep(1)
driver.switch_to.parent_frame()
driver.find_element(By.XPATH, lecture_sign_up).click()

time.sleep(90)

if __name__ == '__main__':
# 模拟阅读器翻开网站
# 增加参数
options = Options()
# 封闭沙盒启动
options.add_argument('--no-sandbox')

driver = webdriver.Chrome(chrome_options = options)
driver.get(url)

# 登录并查询
try:
do_login(driver)
except:
driver.quit()
driver = webdriver.Chrome(chrome_options = options)
driver.get(url)
do_login(driver)



需要获得打包源文件的点这里获得哦

高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

商业合作微信

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

精彩点评

相关推荐

有哪些超神的油猴脚本?

有哪些超神的油猴脚本?

小编在之前就介绍过很多油猴里的神器插件,这里给大家总结几款经典中的经典。01Usersc

一篇教会你写90%的shell脚本

一篇教会你写90%的shell脚本

shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统

脚本怎么写?250+个万能脚本,可直接套用!

脚本怎么写?250+个万能脚本,可直接套用!

作者:厚昌学院特聘讲师,厚昌学院顾问团队核心成员,从事互联网行业从事互联网行业8

浏览器辅助神器:油猴脚本使用教程

浏览器辅助神器:油猴脚本使用教程

前言「油猴脚本」是一段脚本代码,通过它可以让浏览器实现各种各样的扩展功能,和浏览

这100个shell脚本案例,你都知道吗?一篇教会你写90%的 ...

这100个shell脚本案例,你都知道吗?一篇教会你写90%的 ...

shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成

最新一波油猴脚本推荐:有了它们,你的浏览器就无敌了

最新一波油猴脚本推荐:有了它们,你的浏览器就无敌了

关注扩展迷、喜欢折腾电脑的小伙伴们,应该都对各种各样的浏览器插件不陌生了。浏览器

最强浏览器插件:油猴脚本的安装及使用教程

最强浏览器插件:油猴脚本的安装及使用教程

Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器,它适用于 Chrome,

油猴脚本管理器的超详细下载安装使用教程——新手必看

油猴脚本管理器的超详细下载安装使用教程——新手必看

油猴脚本管理器的超详细下载安装使用教程——新手必看油猴可以帮你干什么:全网VIP视

iPad随航脚本(Mac13.0Ventura)

iPad随航脚本(Mac13.0Ventura)

参考文章和视频:将iPad作为Mac Mini主屏幕的实现方法视频:无屏自动启动随航 iPad作为M

模板很齐全,视频脚本怎么写?50个短视频脚本文案模板 ...

模板很齐全,视频脚本怎么写?50个短视频脚本文案模板 ...

在运营短视频时,你有没有遇到过这样的问题:1、拍了一半发现拍摄场景不行;2、拍摄过

一个油猴脚本,让你体验真正的百度网盘下载不限速!

一个油猴脚本,让你体验真正的百度网盘下载不限速!

我们先看一下这个脚本的下载效果。我是100M的宽带,这直接能飙到20MB/s,所以下载速度

视频拍摄脚本怎么写?完整视频拍摄脚本范文实例分享

视频拍摄脚本怎么写?完整视频拍摄脚本范文实例分享

写脚本?对于没有视频背景的朋友来说可能就会有疑问,脚本是什么?不应该是电影,电视

「小白教程」让浏览器为所欲为!油猴脚本简介与使用心得

「小白教程」让浏览器为所欲为!油猴脚本简介与使用心得

本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:Stark-C大家好,我是Stark-

Tampermonkey油猴插件——安装与使用教程

Tampermonkey油猴插件——安装与使用教程

​初次见面,大家好。相信熟悉浏览器的都知道,尤其是大名鼎鼎的Chrome浏览器,丰富的

这是我见过最牛的shell脚本100例,学习提升面试必备,建议收藏

这是我见过最牛的shell脚本100例,学习提升面试必备,建议收藏

从历史上看,shell一直是类Unix系统的原生命令行解释器。多年来,它已被证明是Unix的

网售几元钱的网红脚本,真是顶流主播的走红秘籍?

网售几元钱的网红脚本,真是顶流主播的走红秘籍?

有人说,网红行业的现状是江山代有才人出,各领风骚“好几天”。的确,即便是行业顶流

115最新转存脚本(可转存和提取SHA1版本)

115最新转存脚本(可转存和提取SHA1版本)

最近115调整了接口,导致115转存助手ui优化版3.8.1版本无法转存或获取SHA1。有大神在

视频脚本创作不完全指南

视频脚本创作不完全指南

根据第49次《中国互联网络发展状况统计报告》数据,截至2022年12月,我国网络视频(含

一文详解Shell脚本编程,从基础到进阶,通俗易懂一目了然

一文详解Shell脚本编程,从基础到进阶,通俗易懂一目了然

Shell脚本编程难,难于上青天!这话不假,尤其很多程序员新人,学了几个月Shell脚本写

好的短视频从脚本制作开始,学会这3招,还怕做不出好脚本?

好的短视频从脚本制作开始,学会这3招,还怕做不出好脚本?

在上期我们做了个形象的比喻,把短视频制作比喻成我们造房子,前面我们已经带领大家打

商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信