当前位置: 首页 > news >正文

宿舍挂机刷学习通选修课?我用Python写了个‘摸鱼’脚本(Selenium/PyAutoGUI实战)

用Python解放双手:打造智能课程学习助手

每当选修课deadline临近,宿舍里总会上演一场与时间赛跑的刷课大战。盯着屏幕重复点击"下一节"的枯燥操作,不仅消耗精力,更让宝贵的学习时间白白流逝。今天,我们将用Python构建一个智能学习助手,让技术为你解决这个校园生活的小烦恼。

1. 技术选型与环境搭建

在自动化领域,Selenium和PyAutoGUI堪称黄金搭档。前者擅长网页元素操作,后者精于图形界面控制,二者结合能覆盖绝大多数自动化场景。

1.1 工具链安装

首先确保Python环境(建议3.8+版本)已就绪,然后通过pip安装必要依赖:

pip install selenium pyautogui opencv-python pillow

提示:使用虚拟环境可避免包冲突,推荐使用python -m venv autostudy创建独立环境

浏览器驱动是Selenium的核心组件,不同浏览器需要对应驱动:

浏览器驱动名称下载地址
Chromechromedriverhttps://chromedriver.chromium.org
Edgemsedgedriverhttps://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefoxgeckodriverhttps://github.com/mozilla/geckodriver/releases

1.2 基础框架搭建

创建一个基础脚本框架,包含必要的导入和初始化:

from selenium import webdriver from selenium.webdriver.common.by import By import pyautogui import time # 浏览器初始化 def init_browser(): options = webdriver.ChromeOptions() options.add_argument("--start-maximized") # 默认最大化窗口 driver = webdriver.Chrome(options=options) return driver

2. 智能登录系统实现

现代教育平台常采用多种验证机制,我们需要设计健壮的登录方案。

2.1 常规账号密码登录

对于基础登录界面,使用Selenium元素定位即可完成:

def login(driver, username, password): driver.get("https://passport.zhihuishu.com/login") # 等待元素加载 time.sleep(2) # 输入凭据 driver.find_element(By.CSS_SELECTOR, "input[type='text']").send_keys(username) driver.find_element(By.CSS_SELECTOR, "input[type='password']").send_keys(password) # 点击登录 driver.find_element(By.CLASS_NAME, "login-btn").click() time.sleep(3) # 等待登录完成

2.2 验证码处理进阶

遇到图形验证码时,可采用OCR技术辅助识别:

import pytesseract from PIL import Image def handle_captcha(driver): # 截取验证码区域 element = driver.find_element(By.ID, "captcha-img") location = element.location size = element.size # 保存验证码图片 driver.save_screenshot("screenshot.png") image = Image.open("screenshot.png") left = location['x'] top = location['y'] right = left + size['width'] bottom = top + size['height'] image = image.crop((left, top, right, bottom)) image.save("captcha.png") # OCR识别 return pytesseract.image_to_string(image)

3. 课程自动化学习引擎

核心功能在于智能判断课程进度并自动切换章节,这需要结合多种技术手段。

3.1 视频时长动态获取

通过分析网络请求获取真实视频时长:

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities # 开启网络请求监控 caps = DesiredCapabilities.CHROME caps['goog:loggingPrefs'] = {'performance': 'ALL'} driver = webdriver.Chrome(desired_capabilities=caps) def get_video_duration(driver): # 获取网络日志 logs = driver.get_log('performance') for entry in logs: if 'ananas/video' in entry['message']: # 解析视频信息 duration = extract_duration_from_log(entry) return duration return None

3.2 智能点击控制策略

结合屏幕识别与坐标计算实现精准操作:

def smart_click(pattern_image, confidence=0.9): try: position = pyautogui.locateCenterOnScreen(pattern_image, confidence=confidence) if position: pyautogui.click(position) return True except: pass return False # 示例:检测并点击播放按钮 while not smart_click('play_button.png'): time.sleep(1)

4. 防检测机制与优化策略

自动化操作需要模拟人类行为特征以避免被识别。

4.1 行为随机化算法

import random def human_like_mouse_move(x, y): # 生成贝塞尔曲线路径 current_x, current_y = pyautogui.position() control_x = random.randint(min(current_x, x), max(current_x, x)) control_y = random.randint(min(current_y, y), max(current_y, y)) # 分阶段移动 pyautogui.moveTo(control_x, control_y, duration=random.uniform(0.2, 0.5)) pyautogui.moveTo(x, y, duration=random.uniform(0.1, 0.3))

4.2 操作间隔时间模型

建立符合人类操作习惯的时间间隔:

def random_delay(base=1.0, variance=0.5): time.sleep(max(0, random.normalvariate(base, variance))) # 使用示例 random_delay(base=2.0) # 平均2秒间隔

5. 系统监控与异常处理

健壮的系统需要完善的监控机制来保证长时间稳定运行。

5.1 心跳检测机制

def health_check(driver): try: # 检查页面响应 driver.execute_script("return document.readyState") == "complete" # 检查网络状态 logs = driver.get_log('performance') recent_requests = [log for log in logs if log['timestamp'] > time.time() - 60000] return len(recent_requests) > 0 except: return False

5.2 异常恢复流程

def recovery_procedure(driver): try: driver.refresh() time.sleep(5) if "登录" in driver.title: login(driver, USERNAME, PASSWORD) return True except: return False

在项目实践中,这套系统平均能为每门课程节省6-8小时的手动操作时间。记得合理规划学习时间,技术应该用于提高效率,而非完全替代学习过程。当程序运行时,不妨把省下的时间用来深入理解课程内容,这才是技术赋能学习的真正意义。

http://www.gsyq.cn/news/1458272.html

相关文章:

  • GLM-5混合架构解析:任务感知路径与开源工程实践
  • 保姆级教程:在Ubuntu 22.04 LTS上搞定Intel Realsense D435i驱动与SDK(含内核降级避坑指南)
  • 别再让程序跑飞了!用STM32CubeMX(V6.0.0)配置独立/窗口看门狗(IWDG/WWDG)的保姆级避坑指南
  • m4s-converter完整指南:解锁B站缓存视频的跨平台播放自由
  • 别再只‘看图说话’了!用Gaussian给你的FTIR谱图一个‘量子化学’解释
  • 固态硬盘装系统失败?UEFI/GPT启动原理与6种实操方案
  • 对抗训练中的灾难性过拟合问题与AAER解决方案
  • STM32F103搭配ESP8266直连OneNet云平台,实现继电器状态上传与远程开关控制(KEIL完整工程)
  • STM32+RT-Thread驱动MAX30102实现心率血氧实时波形OLED显示
  • SPSS聚类分析避坑指南:标准化、距离选错全白干!一份真实数据报告的血泪总结
  • 低代码AI插件接入直播中台,全链路打通仅需4小时?——头部MCN已验证的私有化集成路径
  • 2026年10款降AIGC网站横评:最高AI率100%直降至0.12%
  • G3-PLC电力线通信Matlab仿真工程包(含信道建模imp.m与主流程G3PLC.m)
  • 实战避坑:将本地LangChain应用连接到阿里云Chroma的完整流程
  • 别再让Base64拖慢你的Vue3应用!手把手教你用vue-quill+quill-image-uploader实现图片上传到服务器
  • 2026这6款硬核降AIGC平台全网首测,一键把AI检测率精准控到安全区!
  • Claude Opus 4.7人话表达退化实测与破解方案
  • 【Hermes 办公自动化落地】,Windows 精简安装包完整部署手册(含安装包)
  • PHP伪协议实战:从BUUCTF的ZJCTF题看data://和php://filter的另类用法
  • 不只是自动驾驶:用ROS Navigation给你的扫地机器人、AGV小车做个‘大脑’(低成本方案实战)
  • 2026年5月评价好的不锈钢水箱供应商怎么选,玻璃钢水箱/预制混凝土消防水池/消防水泵/医用水箱,不锈钢水箱公司选哪家 - 品牌推荐师
  • AI工具如何真正驱动动态定价?揭秘头部电商ROI提升217%的5层数据闭环模型
  • 从企业实战看‘包络线’:创业公司如何用长期成本思维做技术选型与架构规划
  • 智能眼镜隐私问题频发,2025 年售出 700 万副,如何识别以防被偷拍?
  • 别只停留在概念!用Python和C语言实战演练:亲手把一个小数‘编码’成IEEE 754单精度格式
  • 华为ENSP模拟器实战:手把手教你搞定OSPF+BGP混合组网(含完整配置与排错命令)
  • PHP软件许可与授权验证系统
  • 告别CH340!手把手教你用STM32F103C8T6的USB口实现虚拟串口通信
  • 全息存储:云时代高密度并行存储的技术原理与AI驱动突破
  • 科幻照进现实:具身智能机器人安全短板凸显,多方协同才能释放产业价值