分享给你谭美国签证slot自己在家里用脚本刷的技巧

不知道有多少人感兴趣,大家应该都知道tuixue吧,感谢创建tuixue的大佬。tuixue有一个缺点就是没办法看tcn=no的slot,所以我之前研究了一下大佬的代码,发现其实可以很容易就改成自用的。这个办法应该是适用于所有的签证类型,tcn yes or no,AIS系统(英国、加拿大等国家)的美国签证预约系统。因为我比较熟悉在加拿大约h1b,所以以下用加拿大的举例,大家举一反三。

  1. 先注册好你的usvisa账号,把fee交了。
  2. 再注册一个新的usvisa账号(这边叫账号2),个人信息和DS-160都随便填,签证类型和tcn选项与你自己的真实的账号一致即可,不要交钱。这里记下这个账号的schedule id。什么是schedule id?就是URL里一串8位数字,比如https://ais.usvisa-info.com/en-ca/niv/schedule/12345678,那么12345678就是schedule id。

接下来就是用账号2来刷位置,一旦刷到了,马上登录你真实的账号,抢下位置。请注意,这个教程不包含帮你把位置抢下来这个步骤,meaning你要自己手动抢。

以下代码参考tuixue,需要一点点的python/cs基础读懂,其实很好理解。

import requests
from bs4 import BeautifulSoup
import time

MONTH = {
    "January": 1,
    "February": 2,
    "March": 3,
    "April": 4,
    "May": 5,
    "June": 6,
    "July": 7,
    "August": 8,
    "September": 9,
    "October": 10,
    "November": 11,
    "December": 12
}

schedule_id = 'insert-schedule-id-here'
country = 'en-ca'  # replace it with your desired country code
session = 'insert-session-here'
user_agent = "insert-user-agent-here"

def refresh(country_code, schedule_id, session):
    req = requests.Session()
    headers = {
        "User-Agent": user_agent,
        "Referer": "https://ais.usvisa-info.com/%s/niv/schedule/%s/continue_actions" % (country_code, schedule_id),
        "Cookie": "_yatri_session=" + session

    }
    r = req.get("https://ais.usvisa-info.com/%s/niv/schedule/%s/payment" % (country_code, schedule_id), headers=headers)
    if r.status_code != 200:
        print("Error")
    soup = BeautifulSoup(r.text, "html.parser")
    time_table = soup.find("table", {"class": "for-layout"})
    result = []
    
    if time_table:
        for tr in time_table.find_all("tr"):
            tds = tr.find_all("td")
            if not len(tds) == 2:
                continue
            place = tds[0].text
            date_str = tds[1].text
            s = date_str.split()
            year, month, day = 0, 0, 0
            if len(s) >= 3 and s[0] != "No":
                day_str, month_str, year_str = s[-3], s[-2].replace(",", ""), s[-1]
                year, month, day = int(year_str), MONTH[month_str], int(day_str)
            result.append([place, (year, month, day)])
            # add your condition here
            # trigger an alarm when a slot is found
    session = r.cookies["_yatri_session"]
    return result, session



if __name__ == '__main__':
    while True:
        result, session = refresh(country, schedule_id, session)
        print(result)
        # print(session)
        time.sleep(300) # sleep 5min

可以看出其实你需要改的代码就有以下几行

schedule_id = 'insert-schedule-id-here'
country = 'en-ca'  # replace it with your desired country code
session = 'insert-session-here'
user_agent = "insert-user-agent-here"

schedule_id 就是之前获得的schedule_id
country这里是加拿大的code,你登录账号后URL里就有country code,你可以改成你账号的国家
user_agent和session怎么获得的2楼继续

13 个赞

session信息是会过期的,所以每次要刷之前,需要登录账号2,点进Payment的页面,Chrome右键inspect(其他浏览器也差不多),点开network,再刷新该页面,就可以看payment如下图

点开payment,找到request headers里的cookie,找到_yatri_session=后面的一段字符串,复制,这就是session。

同样的,request headers里能找到user-agent,这就是user_agent的值。

session的值每次刷之前都要重复以上方法复制一次,稍微有点麻烦。user_agent不需要。

所有的准备工作都做好了,就可以开始run script了。为了防止你的号被ban了(meaning你的号刷不出slot了,过一两天才能好),script里规定每5分钟发一次新的request。同时,请每三个小时左右切换ip,免费的vpn即可。

会一点的python可以给script加一些if condition来trigger alarm,大家根据自己需求加,比如说下面这个例子,如果Toronto和Ottawa在2023年4月有slot,就发出异响(works for mac terminal)

if year == 2023 and month == 4 and place in ['Toronto', 'Ottawa']:
    print("\a")
6 个赞

啥是tcn?

tcn = third country national,我们都是tcn。
tcn=no说明你是当地人,因为签证会给当地人留更多的slot,所以有些人(包括我)会选tcn=no

2 个赞

可以和您交流一下这段代码吗

1 个赞

过去的记忆在攻击我 :cry:
tuixue作者真是人中龙凤,我遇见职业发展是最好的了

3 个赞