华中科技大学公共选修课程改选阶段自动刷选教程(Python+selenium)

本文仅适用于华中大网上选课系统的公选课改选“截胡”,效果是在电脑上实现自动查询所需课程是否满员,若未满则自动点击选课,最好不要挂后台也不要让电脑自动熄屏,手机上不能运行。驱动器是edge浏览器,大多数电脑应该都有。

时间紧急,废话不多说。首先保证自己有python的IDE,已经完成python环境配置,本人的python版本3.10.9,使用命令 pip install selenium 即可安装 selenium 库,本人的selenium版本为4.9.1。4以上版本应该都行。

901fc20089e74ddaa39ea63930937c76.png

 

 在电脑中查找edge的安装位置,双击点开,在Application文件夹里找到msedge.exe,窗口保留不动,后面需要复制msedge.exe的文件地址。5012c3d4dda74cd59cb6ffc8fa5c037a.png

 

c758f0f2746d4119ba1dc3409cbf3274.png

 随后在桌面上新建txt文件,将以下代码复制进去,并将代码中cd和--remote之间的地址修改为msedge.exe的文件地址(单击选中msedge.exe右键并选择“复制文件地址”),然后将msedge.exe前的“\”改为回车,应得到两行代码

cd C:\Program Files (x86)\Microsoft\Edge\Application
msedge.exe --remote-debugging-port=10250 --user-data-dir="D:\seleniumEdge"

 

保存该txt文件,并重命名为my_Edge.cmd(关键是将txt的后缀名修改为cmd)

97be88113d5b46b3aa046bf9e03bce94.png

双击该cmd文件可执行,并弹出一个和初始化后的edge浏览器差不多的界面则准备工作完成。(不会影响原来浏览器的数据)

 

打开VScode(或者pycharm等),新建一个工程文件,并在目录中新建一个.py文件,将以下代码复制进去,自行命名。

"""
这是让selenium链接已存在浏览器解决登录问题的py文件
"""

from selenium.webdriver import Edge
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# 用于选择登录端口
from selenium.webdriver.edge.options import Options
def driver_on_edge():
    """
    建立已存在的浏览器连接
    :return: driver on edge
    """
    # 造浏览器配置对象
    edge_op = Options()
    # 配置浏览器
    # "127.0.0.1:10250"其中,10250是浏览器的运行端口
    edge_op.add_experimental_option("debuggerAddress", "127.0.0.1:10250")
    # 让浏览器带着这个配置运行
    return Edge(options=edge_op)


if __name__ == '__main__':
    driver = driver_on_edge()

# def connect_to_existing_edge_browser():
#     """
#     建立已存在的 Edge 浏览器连接。
#     :return: Edge 浏览器驱动程序对象
#     """
#     # 创建 Edge 浏览器配置对象
#     edge_options = Options()
#     # 配置调试器地址
#     # "127.0.0.1:10250" 其中,10250 是浏览器的调试器端口
#     edge_options.add_experimental_option("debuggerAddress", "127.0.0.1:10250")
#     # 创建 DesiredCapabilities 对象,并设置浏览器选项
#     desired_capabilities = desired_capabilities.EDGE.copy()
#     desired_capabilities["ms:edgeOptions"] = edge_options.to_capabilities()["ms:edgeOptions"]
#     # 使用 DesiredCapabilities 对象创建 Edge 浏览器驱动程序对象
#     return Edge(desired_capabilities=desired_capabilities)


# if __name__ == '__main__':
#     # 建立已存在的 Edge 浏览器连接
#     driver = connect_to_existing_edge_browser()

再在同一目录中新建一个.py文件,将以下代码复制进去,保存,自行命名。

from selenium.webdriver import Edge
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.edge.options import Options
# 链接已存在浏览器
import time
import edge_on_selenium
driver = edge_on_selenium.driver_on_edge()
number_default = '28/28'#事先确定好备选课程满员时的人数默认值,并替换掉28/28
time.sleep(0.5)
i = 0
driver.refresh()
while 1:
    i += 1
    # 转到iframe中
    frame = driver.find_elements(by=By.TAG_NAME, value='iframe')
    driver.switch_to.default_content()
    driver.switch_to.frame(frame[0])
    time.sleep(0.5)
    # 点击选课
    button0 = driver.find_element(by=By.XPATH, value='/html/body/div/ul/li[1]/a/span')
    button0.click()

    driver.switch_to.default_content()

    time.sleep(0.5)
    driver.switch_to.frame(frame[1])

    # 点击下一步
    button1 = driver.find_element(by=By.XPATH, value='/html/body/form/div/div[2]/div/input')
    button1.click()

    time.sleep(0.5)

    driver.switch_to.frame(driver.find_elements(by=By.TAG_NAME, value='iframe')[0])

    # 输入课程名
    label = driver.find_element(by=By.XPATH, value='/html/body/div/table/tbody/tr[1]/td/form[1]/input[2]').send_keys(
        '钢琴初级班')#请用自己备选的课程名替换掉钢琴初级班
    
    search = driver.find_element(by=By.XPATH, value='/html/body/div/table/tbody/tr[1]/td/form[1]/input[3]').click()
    time.sleep(0.5)

    #半年前写的不记得这块是要干嘛了,万一一开始能运行但中途卡住报错可能是需要修改此处的Xpath路径,在网页中按F12,CTRL+Shift+C点击某个按钮,在右侧的元素栏中找到对应的元素右键复制完整的Xpath路径,复制到以下value路径中。
    through = driver.find_element(by=By.XPATH, value='//*[@id="1"]').click()
    time.sleep(0.5)

    # 判断人数
    number = driver.find_element(by=By.XPATH, value='/html/body/div/table/tbody/tr[4]/td[5]')
    if number.text == number_default:
        print(f'第{i}次选课未成功')
        driver.refresh()
    else:
        driver.find_element(by=By.XPATH, value='/html/body/div/table/tbody/tr[4]/td[6]/input').click()
        time.sleep(0.5)
        # 点击确定按钮
        alertObject = driver.switch_to.alert
        print(alertObject.text)  
        alertObject.accept()  
        print(f'第{i}次选课成功!!!!!!')
        break
    driver.switch_to.default_content()
    time.sleep(0.5)
    







随后在桌面上找到刚刚写的my_Edge.cmd,双击打开

像使用普通浏览器一样搜索网上选课的网址

登陆

打开选课界面

先走一遍流程看看自己想选的课能否被唯一搜索到,并记录下目前选课的人数,例如“28/28”,表示已满员

 

完成以上步骤后将其余选项卡关闭,只保留需要选课界面,并回退到选课大厅界面

 

将目前人数填入第二个python文件第9行的number_default

46a26387947a426e9390948ac59169df.png

 

 修改第38行的课程名

9f62526059ee40998ebc4772a0af81d6.png

 

然后运行第二个Python文件

正常的运行结果是网页在不断的进入选课-搜索某课程-判断选课人数是否是默认的满员人数-窗口输出第*次选课未成功

然后静待选课成功的那一刻……

 

结尾:

再次强调只在改选阶段开启时才有效,毕竟我们学校公选课正选阶段不是靠抢的,代码是我上次改选阶段使用的,届时如果网页有更新或者运行有bug我会再来修改本文,先提前给各位道个歉。

大佬应该看出来代码主体都是用Xpath定位元素,确实很low,可以自行优化修改。本人菜鸡一个,教程没讲清楚的地方很多,还请见谅。

想深入了解的请关注:selenium用法详解【从入门到实战】【Python爬虫】【4万字】_selenium学习_Dream丶Killer的博客-CSDN博客

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易怒老好人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值