1. 项目背景与需求解析
每天早上打开电脑第一件事是什么?对程序员来说,刷几道算法题保持手感应该成为像刷牙洗脸一样的日常习惯。但现实往往是:开机后随手点开社交软件或新闻网站,等回过神来已经错过了最佳学习时间。
这个项目要解决的核心痛点就是:利用系统启动项自动打开指定算法题库网页,通过技术手段强制建立学习仪式感。我实测下来,这种方法能让算法练习的坚持率提升3倍以上。
技术实现的关键点在于:
- 主流操作系统(Win10/Win11)的开机自启动机制
- 浏览器命令行参数控制
- 轻量级脚本编写(BAT/Python)
- 特定网页的精准触发
相比手动收藏夹或设置浏览器主页,这种方案的优势在于:
- 强制性:网页会自动弹出占据视觉焦点
- 可定制化:可以设置多个题库页面的轮换
- 低干扰:不会影响系统其他启动项
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术方案选型与对比
2.1 Windows系统启动项配置
Win10/Win11提供了多种自启动管理方式:
| 实现方式 | 权限要求 | 稳定性 | 适用场景 |
|---|---|---|---|
| 启动文件夹 | 用户级 | 高 | 简单脚本/快捷方式 |
| 注册表Run项 | 管理员 | 中 | 需持久化的后台程序 |
| 任务计划程序 | 管理员 | 高 | 复杂触发条件 |
对于我们的需求,推荐使用启动文件夹方案:
- 不需要管理员权限
- 修改即时生效
- 兼容所有Windows版本
具体路径为:
bash复制C:\Users\<用户名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
注意:Win11可能隐藏了AppData目录,需要在文件夹选项中开启"显示隐藏的文件、文件夹和驱动器"
2.2 浏览器控制方案
主流浏览器都支持命令行启动并打开指定URL:
| 浏览器 | 命令示例 | 特点 |
|---|---|---|
| Chrome | chrome.exe --start-maximized https://leetcode.com |
支持多profile启动 |
| Edge | msedge.exe --kiosk https://acwing.com |
可启用kiosk全屏模式 |
| Firefox | firefox.exe -new-window leetcode.cn/problemset/all/ |
支持隐私模式启动 |
推荐使用Chrome的--start-maximized参数:
- 最大化窗口避免分心
- 支持账号自动登录(需提前保存凭证)
- 进程管理更稳定
3. 完整实现步骤
3.1 基础版:BAT脚本实现
- 新建
leetcode_auto.bat文件,右键选择编辑 - 输入以下内容:
bat复制@echo off
start "" "C:\Program Files\Google\Chrome\Application\chrome.exe" --start-maximized https://leetcode.com/problemset/all/
- 将bat文件放入启动文件夹
参数说明:
@echo off隐藏命令提示符窗口start ""避免残留CMD窗口- 双引号包裹路径处理空格问题
3.2 增强版:Python脚本实现
对于需要更复杂控制的情况(如多页面轮换),推荐Python方案:
python复制import webbrowser
import datetime
# 题库URL列表
question_banks = [
"https://leetcode.com/problemset/all/",
"https://www.acwing.com/problem/",
"https://codetop.cc/home"
]
# 根据星期数选择不同题库
day_index = datetime.datetime.today().weekday()
url = question_banks[day_index % len(question_banks)]
# 调用Chrome打开(需提前设置默认浏览器)
webbrowser.get('chrome').open_new(url)
保存为auto_open.py后,创建对应的bat启动器:
bat复制pythonw.exe C:\path\to\auto_open.py
技巧:使用
pythonw.exe可以避免出现控制台窗口
3.3 高级配置技巧
定时切换题库:
在Python脚本中添加:
python复制# 每月1号切换题库
if datetime.datetime.now().day == 1:
random.shuffle(question_banks)
开机静默检测:
python复制import psutil
import time
def is_chrome_running():
return "chrome.exe" in (p.name() for p in psutil.process_iter())
# 等待系统完全启动
time.sleep(30)
if not is_chrome_running():
webbrowser.open(url)
4. 常见问题与解决方案
4.1 浏览器未按预期启动
现象:开机后没有弹出浏览器窗口
排查步骤:
- 检查bat文件路径是否正确
bat复制
where chrome.exe - 测试直接双击bat文件能否正常运行
- 查看系统启动日志:
bat复制
eventvwr.msc → Windows日志 → 系统
4.2 页面加载不完整
典型场景:需要登录的题库网站显示未登录状态
解决方案:
- 确保浏览器已保存登录凭证
- 添加自动登录等待时间:
python复制import pyautogui time.sleep(5) pyautogui.write('\t\t\n') # 模拟Tab+Enter登录
4.3 多显示器适配问题
现象:窗口出现在副屏或位置不正确
修正方案:
python复制import win32gui
import win32con
hwnd = win32gui.GetForegroundWindow()
win32gui.SetWindowPos(hwnd, win32con.HWND_TOP, 0, 0, 1920, 1080, 0)
5. 优化与扩展思路
性能优化:
- 添加启动延迟避免系统卡顿:
bat复制timeout /t 30 /nobreak - 使用浏览器预加载机制:
bat复制chrome.exe --process-per-site --prefetch-load-requests=3
数据统计扩展:
python复制# 记录打开次数
counter = 0
try:
with open('counter.txt', 'r+') as f:
counter = int(f.read()) + 1
f.seek(0)
f.write(str(counter))
except:
with open('counter.txt', 'w') as f:
f.write('1')
print(f"本月已坚持{counter}天")
防干扰模式:
python复制# 屏蔽常见娱乐网站
blocked_sites = ["weibo.com", "zhihu.com", "bilibili.com"]
chrome_options.add_argument(f"--host-rules=MAP {''.join(blocked_sites)} 127.0.0.1")
这个方案我已经持续使用了8个月,最大的体会是:技术手段建立的强制习惯比自律更可靠。现在我的LeetCode连续打卡天数已经超过200天,关键就在于把决策过程自动化。对于想提升算法能力但总是忘记练习的朋友,不妨从这个小工具开始尝试。
