如何让基于Pyautogui的选课自动化代码运行更快且更稳定?
Pyautogui选课脚本提速&稳定性优化方案
- 替换不可靠的硬等待和窗口切换逻辑
原代码的alt+tab完全依赖当前打开窗口的顺序,非常容易切错窗口浪费时间,直接用pygetwindow定位选课页面的Chrome窗口直接激活,比硬等1秒快太多。把固定时长的time.sleep换成动态最大等待,只有没等到目标状态才等待,比固定等待节省至少60%的空等时间。 - 降低pyautogui默认操作间隔,优化输入速度
pyautogui默认每个操作后会等待0.1秒,你可以把pyautogui.PAUSE调到0.03~0.05左右,既不会太快让浏览器跟不上响应,又比默认速度快一倍以上。输入课程名的时候加interval=0参数,一次性完成输入没有间隔,比逐字输入效率高很多。 - 保留安全开关避免异常失控
不要把pyautogui.FAILSAFE设为False,这个功能是你把鼠标挪到屏幕左上角就能强制终止脚本,出问题能及时止损,完全不影响运行速度。还可以加全局快捷键监听,按ESC直接终止脚本,避免操作跑偏。 - 关键操作加轻量重试逻辑
比如搜索课程后如果没定位到对应内容,自动重试2次,避免因为浏览器偶尔卡顿导致操作失败,不需要加额外等待时间。 - 可选终极提速方案(比模拟键鼠快10倍以上)
直接抓选课系统的提交请求接口,用requests库发请求抢课,跳过浏览器渲染、键鼠模拟的所有冗余步骤,只要名额放出来瞬间就能提交请求,比所有模拟键鼠的方案都快得多,也不会出现浏览器跟不上的问题。
优化后代码示例
import pyautogui import time import pygetwindow as gw # 保留FAILSAFE,留着紧急终止用 pyautogui.FAILSAFE = True # 调低默认操作间隔,可根据自己浏览器响应速度调整,最低可到0.01 pyautogui.PAUSE = 0.03 # 直接定位Chrome选课窗口,替换原来的alt+tab硬切 # 把引号内的内容改成你选课页面的标题关键词,比如"本科选课系统" for win in gw.getWindowsWithTitle("选课系统"): if win.isMinimized: win.restore() win.activate() time.sleep(0.1) # 仅保留窗口激活必要的等待时间 break # 搜索定位课程 pyautogui.hotkey('ctrl', 'f') # 输入课程名无间隔 pyautogui.write('PHY182.1', interval=0) pyautogui.press('enter') pyautogui.press('esc') pyautogui.hotkey('shift', 'tab') pyautogui.press('space')
内容的提问来源于stack exchange,提问作者Mursalin
相关产品推荐
相关产品推荐

