自制抢课脚本

首先先按自己电脑的需求下载软件Python(官网下载,而且要找到适合自己的系统)

(我下的是第一个3.9.7那个) 

(最后一个windows64-bit那个)

下载好了之后打开,安装时要把勾上Add Python 3.9 to.PATH,然后点 Install Now。

 打开windows操作系统,打cmd按回车

出现这个框之后输入 pip install selenium,回车进行安装。

然后安装浏览器驱动。上百度搜索Selenium Pyyhon教程)Selenium Python 教程 - 知乎 (zhihu.com),下载浏览器插件

(我这次下载的是Edge的浏览器驱动)

Edgle要更新到最新的版本,具体操作为打开一个新的Edgle网页,在右上角有三个点,点击设置然后查点关于Microsolf Edgle,等待他自动更新。

然后点击教程上的浏览器驱动的地址,建议下载稳定版本的浏览器驱动。

( 这里我下载的是稳定版x64的)

下载好了之后在文件夹中显示,然后把它解压。

点第三个 

进去后,看到一个exe文件,处理它有两种方法

第一种是将这个文件放入python的根目录下并改名为MicrosoftWebDriver.exe。

第二种方法是随便放在哪一个文件夹都可以,但在引用该文件时写明路径。

然后打开这个项目,按照教程上需要用到的命令编写。

具体操作:

先打开学校官网,找到教务系统的登录网址复制下来,然后在新建的文件项目中输入搜索网页代码,在小括号内粘贴复制的网址。

然后在登陆网址页面按F12,启动工具栏,使用左上角的搜索元素工具对元素进行搜索

选中工号框

 

 然后看下面显示搜索到的元素

 按照教程编写的操作方法输入工号的指令

前期准备工作,如何搜索元素,操作元素的方法(在教程里)都已经传授给你们了,至于能否用好,那就看你们的造化了(doge)。最后再发一下我的代码demo用于借鉴修改吧~

from time import sleep
from selenium import webdriver
import time
import datetime
driver = webdriver.Edge(executable_path=r"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)\MicrosoftWebDriver.exe")      # Edge浏览器(这里用的是指明路径的方法)
#设置隐式等待
driver.implicitly_wait(10)
#窗口最大化
driver.maximize_window()

#登录
driver.get(r'https://你的学校官网')
driver.find_element_by_id("j_username").send_keys("你的学号") # 模拟按键输入

driver.find_element_by_id("j_password").send_keys("你的密码")
driver.find_element_by_id("loginButton").click()



#切换进iframe,找选课中心
driver.switch_to.frame('Frame0')

driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/ul/div[3]').click()
#跳出frame0转到frame1
driver.switch_to.default_content()
driver.switch_to.frame('Frame1')

#进入选课中心
driver.find_element_by_xpath('/html/body/form/div/table/tbody/tr[2]/td[4]/a').click()

#点击进入选课
driver.find_element_by_id('notSession')
driver.find_element_by_xpath('/html/body/form/div/div/input[2]').click()

#driver.switch_to.default_content()

#记录当前窗口
mother_window = driver.current_window_handle
# 当前打开的所有窗口
windows = driver.window_handles 
# 转换到最新打开的窗口
driver.switch_to.window(windows[-1])
#记录新打开的窗口
new_window = driver.current_window_handle
#判断是否转跳到可选课的窗口
while True:
    driver.refresh()
    try:
       driver.find_element_by_xpath('/html/body/div[1]/div[1]/ul/li[2]/a').click()  #尝试点击必修栏
       break
    except:
        print('不在选课时段')
#切必修和公选
while True:
    driver.find_element_by_xpath('/html/body/div[1]/div[1]/ul/li[3]/a').click()    #切到公选栏
    
    try:
       driver.switch_to.frame(driver.find_element_by_name('mainFrame'))
       driver.find_element_by_link_text('选课').click()
       “确定选课”弹框处理
       alert = driver.switch_to.alert
       
       # 1.1获取弹出框文本值
       alert_content = alert.text
       print(alert_content)
       # 1.2点击确认按钮
       alert.accept()
       sleep(1)
       alert.accept()
       #打印抢课成功时间
       print('抢课成功')
       now_time = datetime.datetime.now().strftime('%R')
       print(now_time)
       #跳出mainFrame框架
       driver.switch_to.default_content()
    except:
        print('无课可抢')
        #跳出mainFrame框架
        driver.switch_to.default_content()
    driver.find_element_by_xpath('/html/body/div[1]/div[1]/ul/li[2]/a').click()     #切到必修栏
    try:
       driver.switch_to.frame(driver.find_element_by_name('mainFrame'))
       driver.find_element_by_link_text('选课').click()
       alert = driver.switch_to.alert
       
       # 1.1获取弹出框文本值
       alert_content = alert.text
       print(alert_content)
       # 1.2点击确认按钮
       alert.accept()
       alert.accept()
       #打印抢课成功时间
       print('抢课成功')
       now_time = datetime.datetime.now().strftime('%R')
       print(now_time)
       #跳出mainFrame框架
       driver.switch_to.default_content()
    except:
        print('无课可抢')
        #跳出mainFrame框架
        driver.switch_to.default_content()
driver.close()

提醒小伙伴们:

注意iframe、frame框架切换以及需要等待元素出现才能找到(可以适当的sleep或者向我那样设置隐式等待,更推荐隐式等待~)

因为抢课代码写道While True死循环里面了,所以打算用任务管理器控制程序到点开、关。

本文持续更新,如果我的代码真的能抢到课,就分享详细代码~

  • 20
    点赞
  • 189
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值