告别熬夜抢号,美国签证预约机器人 us-visa-bot 完整上手指南
【免费下载链接】us-visa-botUS Visa Bot项目地址: https://gitcode.com/gh_mirrors/us/us-visa-bot
凌晨 1 点 47 分,阿杰第 6 次刷新签证预约页面,屏幕上依旧是那行刺眼的 no dates available。他揉了揉眼睛,想起朋友三天前发来的那句话:"把那个美国签证预约机器人 us-visa-bot 跑起来,然后去睡觉。"他没当真。直到这个凌晨,群里有人晒出改签成功的截图——提前了 47 天,用的正是这个免费开源工具。
三天后,阿杰自己也把它跑通了。这篇文章就是他踩过的坑、读过的源码和验证过的完整路径。如果你也在为"约不到更早的面试日期"发愁,请往下看。
凌晨一点半,你还在刷新页面,但对手不需要睡觉
先坦白一件事:签证预约系统的名额不是"被抢光"的,而是随时在变的。有人取消、系统扩容、工作日早晨放一波新日期——真正的问题是,这些变化往往发生在你盯不住的时候。
阿杰的日常是这样的:白天上班,每隔半小时偷偷刷一次页面;晚上设三个闹钟,从凌晨 1 点开始每 40 分钟醒一次。好不容易刷出一个更早的日期,点进去选时间,再提交,页面却提示"会话过期,请重新登录"。重新登录完,那个日期已经被别人拿走。
这种"人工抢号"有三个致命短板:一次只能盯一个页面、手速拼不过程序、人需要睡觉。而 us-visa-bot 恰好解决的就是这三件事。
机器人的三步工作心法:登录、侦察、出手
us-visa-bot 的核心逻辑极其朴素,主循环只有三步(源码在src/commands/bot.js):
- 登录:用你的账号密码登录签证预约系统,拿到会话凭证
- 侦察:每隔几秒查询一次可预约的日期(间隔可通过环境变量调整)
- 出手:发现比你当前预约更早、且在你设定范围内的日期,立即自动改签
打个比方:手动刷号像拿鱼竿守在河边,眼睛一刻不敢离开浮漂;而 us-visa-bot 是把鱼竿插在岸边、装好铃铛的自动装置——铃一响它就去收线,而且它不用睡觉。
| 维度 | 手动盯梢 | us-visa-bot 值守 |
|---|---|---|
| 时间投入 | 每天数小时,深夜还要起夜 | 配置一次,之后几乎零投入 |
| 反应速度 | 分钟级(取决于你何时看到) | 秒级(默认每 3 秒查一次) |
| 覆盖时长 | 你清醒的时间段 | 7×24 小时不间断 |
| 出错概率 | 手误、会话过期、看错日期 | 稳定循环,按规则过滤 |
| 心理负担 | 焦虑、失眠、内耗 | 睡觉前跑起来即可 |
跟着一个完整案例,从零跑通 us-visa-bot
接下来,我们跟着阿杰,把整个流程完整走一遍。他当前的预约日期是 2025 年 9 月 15 日,想改签到 8 月 1 日或更早,但也不接受 7 月 1 日之前的日期。
第一步:环境检查,三样东西缺一不可
- Node.js 16 或更高版本(项目依赖 ES Module 特性)
- 一个已生效的美国签证面试预约——注意,这个工具是"改签",不是"首次预约",没有已有预约是无法使用的
- 能正常访问签证预约系统的网络环境
第二步:克隆项目并安装依赖,两条命令
git clone https://gitcode.com/gh_mirrors/us/us-visa-bot cd us-visa-bot npm install项目很小,依赖也只有四个(cheerio、commander、dotenv、node-fetch),装起来很快。
第三步:配置 .env,把"钥匙"交给机器人
在项目根目录创建.env文件,内容如下:
EMAIL=your.email@example.com PASSWORD=your_password COUNTRY_CODE=br SCHEDULE_ID=your_schedule_id FACILITY_ID=44 REFRESH_DELAY=3其中REFRESH_DELAY是可选的(默认 3 秒),其余五个都是必填项。很多新手卡在这一步,其实是不知道参数从哪找,这里给你一张"寻宝图":
| 变量 | 作用 | 去哪里找 |
|---|---|---|
EMAIL/PASSWORD | 登录签证系统的账号 | 就是你注册时用的邮箱和密码 |
COUNTRY_CODE | 国家代码 | 登录后看地址栏ais.usvisa-info.com/en-{代码}/,比如巴西是br、法国是fr、德国是de |
SCHEDULE_ID | 预约单编号 | 打开改签页面,地址形如.../niv/schedule/{SCHEDULE_ID}/continue_actions |
FACILITY_ID | 领馆/签证中心编号 | 打开浏览器开发者工具,在选日期的网络请求里找 facility 参数;也可以看日期下拉框的 value,例如巴黎是44 |
小提示:
SCHEDULE_ID和FACILITY_ID都是纯数字 ID。填错的话不会报错,但查询结果会一直是空的,排查起来很费时间,务必照上面的方法核对。
第四步:先演练,再上场——试试 --dry-run 模式
这是很多教程没讲、但源码里真实存在的功能:--dry-run(干跑模式)。开启后,机器人只"宣布"它打算改签的日期,不会真正提交任何操作。第一次使用,强烈建议先这样跑一遍:
node src/index.js -c 2025-09-15 --dry-run日志里会出现类似这样的输出:
[2025-08-16T10:30:06.000Z] found 1 good dates: 2025-08-15, using earliest: 2025-08-15 [2025-08-16T10:30:06.000Z] [DRY RUN] Would book appointment at 2025-08-15 09:00 (not actually booking)看到这行,说明参数全部正确、机器人也找到了合适的日期,可以放心进入正式环节。
第五步:正式开跑,并学会读日志
根据阿杰的需求(目标 8 月 1 日,最小 7 月 1 日),命令是这样写的:
node src/index.js -c 2025-09-15 -t 2025-08-01 -m 2025-07-01对应的参数含义:
-c(必填):你当前已预约的日期-t(可选):目标日期,达到或更早就自动停止并成功退出-m(可选):最小可接受日期,早于它的日期一律跳过
跑起来之后,日志大概长这样:
[2025-08-16T10:30:00.000Z] Initializing with current date 2025-09-15 [2025-08-16T10:30:00.000Z] Target date: 2025-08-01 [2025-08-16T10:30:01.000Z] Logging in [2025-08-16T10:30:03.000Z] no good dates found after filtering [2025-08-16T10:33:12.000Z] found 1 good dates: 2025-08-15, using earliest: 2025-08-15 [2025-08-16T10:33:12.000Z] booked time at 2025-08-15 09:00 [2025-08-16T10:36:40.000Z] found 1 good dates: 2025-07-28, using earliest: 2025-07-28 [2025-08-16T10:36:40.000Z] booked time at 2025-07-28 10:30 [2025-08-16T10:36:40.000Z] Target date reached! Successfully booked appointment on 2025-07-28看懂这几行日志,你就掌握了它的"语言":
no good dates found:当前没有符合条件的日期,属于正常现象,继续等found N good dates ... using earliest:发现了好日期,取最早的那个booked time at:改签已成功提交,新的日期会作为下一次比较的基准,它还会继续找更早的Target date reached:达到目标,任务完成,程序自动退出
打开引擎盖:四个源码文件各自在忙什么
如果你希望它跑得更明白、改起来更放心,可以看看这几个文件——每个都很短,半小时就能读完:
src/index.js:命令行入口,用 commander 解析-c / -t / -m / --dry-run等参数src/commands/bot.js:主循环与容错逻辑。遇到网络断连(socket hangup)会冷却 1 小时后自动重试,遇到登录态失效则立即重试,非常抗造src/lib/bot.js:决策大脑。负责过滤日期(必须早于当前、晚于最小值)、排序并取出最早日期、先查可用时段再提交改签src/lib/client.js:与签证系统的 HTTP 交互层。模拟真实浏览器行为,自动处理 Cookie 和 CSRF 令牌,登录、查日期、查时段、提交预约都在这src/lib/config.js:读取.env并校验必填项,缺一个参数直接报错退出,避免"带病运行"
值得放心的一点:
src/lib/bot.js里有一个"只读优先"的设计——只有发现确实更好的日期时才会动手,不会为了"完成任务"而乱改你的预约。
让机器人更聪明的 5 个进阶技巧
- 频率不是越快越好:
REFRESH_DELAY建议设在 3–10 秒。设成 0 或 1 秒并不会显著提高成功率,反而容易触发系统的安全机制,得不偿失 - 善用
-t和-m组合:-m能防止它把你改签到"虽然更早但根本不想去"的日期,-t能让你在理想日期到手后自动收工 - 多账户分实例管理:如果有多个申请人,为每个账户建独立目录、各自配置、错开启动时间,互不干扰
- 挑"高产出"时段值守:系统维护后、工作日上午、大量取消发生后的时段,名额释放概率更高,这些时候最好让机器人处于运行状态
- 定期更新工具:在项目目录执行
git pull拉取最新代码,获得修复和改进
新手最容易踩的 5 个坑(附报错自救对照表)
坑一:.env没放对位置。它必须和package.json同级放在项目根目录,且变量名不能有空格或引号。否则一启动就报Missing required environment variables: EMAIL, ...。
坑二:把参数抄成完整链接。COUNTRY_CODE只填国家代码(如br),别把整个en-br或 URL 都贴进去。
坑三:没有已有预约就跑。工具是"改签器"不是"抢号器",你得先有一个预约才能被优化。
坑四:跳过 dry-run 直接上。参数写错时,dry-run 能让你第一时间发现,而不是在真实改签后追悔莫及。
坑五:检查频率设太激进。记住 3–10 秒的建议区间。
真遇到报错也别慌,对照这张表自查:
| 你看到的输出 | 说明 | 怎么办 |
|---|---|---|
no dates available | 系统当前确实没有可约日期 | 正常现象,保持运行继续等待 |
no good dates found after filtering | 有日期,但都不符合你的条件 | 检查-c和-m是否设置合理 |
Socket hangup error | 网络波动或连接被断开 | 机器人会自动冷却 1 小时再重试,无需干预 |
Session/authentication error | 登录态失效 | 核对账号密码,机器人会自动立即重试 |
| 查询结果一直为空 | SCHEDULE_ID或FACILITY_ID填错 | 用开发者工具重新核对这两个 ID |
安全与合规:这几条"红线"务必守住
- 许可协议:项目采用 PolyForm 非商业许可协议,个人自用、学习研究、非营利组织使用都是允许的;但商用(包括作为收费服务提供)需要另行联系作者获得授权
- 遵守服务条款:项目官方声明仅供教育学习目的,请遵守签证预约系统的使用条款,不要把检查频率调到不合理的程度
- 凭据安全:账号密码只放在本地
.env中,千万不要把它提交到任何公开仓库 - 合理使用:仅用于你自己的预约,避免多开实例、高频请求等可能影响系统正常服务的操作
写在最后:把熬夜的时间,还给自己
还记得开头的阿杰吗?他现在已经把命令写成了一个开机自启脚本:每天睡觉前看一眼日志,早上起来查看是否"Target date reached"。他再也没在凌晨起来刷过页面。
这就是 us-visa-bot 真正的价值:它不替你决定约哪天,但替你守住了每一个可能的更早日期。免费的、开源的、代码全透明的,你随时可以打开它验证每一个动作。
现在轮到你了:
git clone https://gitcode.com/gh_mirrors/us/us-visa-bot cd us-visa-bot npm install # 配置 .env → 先跑一遍 --dry-run → 正式启动从今晚开始,把闹钟关掉,让机器人为你值守。
【免费下载链接】us-visa-botUS Visa Bot项目地址: https://gitcode.com/gh_mirrors/us/us-visa-bot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考