首先先按自己电脑的需求下载软件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死循环里面了,所以打算用任务管理器控制程序到点开、关。
本文持续更新,如果我的代码真的能抢到课,就分享详细代码~