文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python实现自动抢课脚本

2023-09-08 06:01

关注

@danteking dating from 2021.12.7 and last updating at 2021.12.8
gitee仓库
github仓库


借助pyautogui库,我们可以轻松地控制鼠标、键盘以及进行图像识别,实现自动抢课的功能

1.准备工作

我们在仓库里提供了2个必须的文件,包括:

在运行这个脚本(auto_get_lesson_pic_recognize.py)前,你需要:

安装python并成功配置环境变量,可以在cmd下这样检查;若返回版本号,则已安装

python --version

安装以下的依赖,windows用户请以管理员用户运行cmd并依次执行:

# pyautogui库pip install pyautogui# 读取excel表格的库pip install xlrd==1.2.0# 向计算机的剪贴板发送文本/从计算机剪贴板接收文本的库pip install pyperclip# 计算机视觉库pip install opencv-python# 图像处理库pip install pillow 

到此,成功安装了5个库

2.配合使用py脚本和xlsx文件

第一步

需要将抢课的每一步所需要点击的图标/超链接在头脑中想清楚

第二步

将抢课每一步的所需点击的图标/超链接截图,保存在和py脚本同一路径下

在这里插入图片描述

打开excel表格,根据第一行提示在单元格中进行输入:

在这里插入图片描述

按照你的选课步骤从第2行开始顺序填写excel表格的执行步骤

此时,保存excel表格

第三步

我们打开需要进行操作的选课网页

我们在cmd下切换到脚本所在目录

# 切换到D盘D:# 切换到xx文件夹cd xxpython auto_get_lesson_pic_recognize.py

根据提示执行即可

上图示例

在这里插入图片描述

3.auto_get_lesson_pic_recognize功能介绍

(1).抢课一次

注意

在这里插入图片描述

(2).蹲点捡漏

在这里插入图片描述

4.坐标版本(不建议使用)

坐标版本位于coordinate_version目录下

如果能够确切知道所点击的位置的坐标,可以选用坐标版本

配合qq截图,你能够轻松知道你的鼠标在1920×1080分辨率下在屏幕上的坐标(以像素为单位)

顺序排列单击位置的坐标,实现抢课

excel表格中根据提示填写坐标、操作

5.代码

import pyautoguiimport timeimport xlrdimport pyperclip# 定义鼠标事件# duration类似于移动时间或移动速度,省略后则是瞬间移动到指定的位置def Mouse(click_times, img_name, retry_times):    if retry_times == 1:        location = pyautogui.locateCenterOnScreen(img_name, confidence=0.9)        if location is not None:            pyautogui.click(location.x, location.y, clicks=click_times, duration=0.2, interval=0.2)    elif retry_times == -1:        while True:            location = pyautogui.locateCenterOnScreen(img_name,confidence=0.9)            if location is not None:                pyautogui.click(location.x, location.y, clicks=click_times, duration=0.2, interval=0.2)    elif retry_times > 1:        i = 1        while i < retry_times + 1:            location = pyautogui.locateCenterOnScreen(img_name,confidence=0.9)            if location is not None:                pyautogui.click(location.x, location.y, clicks=click_times, duration=0.2, interval=0.2)                print("重复{}第{}次".format(img_name, i))                i = i + 1# cell_value     1.0:左键单击#                2.0:输入字符串#                3.0:等待#                4.0:热键# 任务一:进行一轮抢课def WorkFunction1(sheet):    i = 1    while i < sheet.nrows:        # 取excel表格中第i行操作        cmd_type = sheet.cell_value(i, 1)        # 1:左键单击        if cmd_type == 1.0:            # 获取图片名称            img_name = sheet.cell_value(i, 2)            retry_times = 1            if sheet.cell_type(i, 3) == 2 and sheet.cell_value(i, 3) != 0:                retry_times = sheet.cell_value(i, 3)            Mouse(1, img_name, retry_times)            print("单击左键:{}  Done".format(img_name))        # 2:输入字符串        elif cmd_type == 2.0:            string = sheet.cell_value(i, 2)            pyperclip.copy(string)            pyautogui.hotkey('ctrl','v')            print("输入字符串:{}  Done".format(string))        # 3:等待        elif cmd_type == 3.0:            wait_time = sheet.cell_value(i, 2)            time.sleep(wait_time)            print("等待 {} 秒  Done".format(wait_time))        # 4:键盘热键        elif cmd_type == 4.0:            hotkey = sheet.cell_value(i, 2)            # 防止刷新过快停留在原网页            time.sleep(1)            pyautogui.hotkey(hotkey)            print("按下 {}  Done".format(hotkey))            time.sleep(1)        i = i + 1# 任务二:蹲点等人退课def WorkFunction2(sheet) :    while True:        WorkFunction1(sheet)        time.sleep(2)if __name__ == '__main__':    start_time = time.time()    file = "info.xlsx"    # 打开文件    xr = xlrd.open_workbook(filename=file)    # 通过索引顺序获取表单    sheet = xr.sheet_by_index(0)    print("------欢迎使用自动抢课脚本------")    print("---------@danteking---------")    print("1.抢课一次")    print("2.蹲点等人退课后抢指定课")    choice = input(">>")    start_time = time.time()    if choice == "1":        WorkFunction1(sheet)    elif choice == "2":        WorkFunction2(sheet)    else:        print("非法输入,退出")    end_time = time.time()    time_consume = end_time - start_time    time_consume = ('%.2f' % time_consume)    print("耗时 {} 秒".format(time_consume))

6.致谢及感想

感谢 @不高兴就喝水 up主让我知道了pyautogui 库的存在

严禁将此脚本用于恶意占课,这违背了开发者的初衷

本项目采用MIT License,二次开发请同样遵循该协议

来源地址:https://blog.csdn.net/m0_52640673/article/details/121889155

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯