You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS/DigitalOcean服务器无法登录Instagram,附登录脚本求助

解决AWS/DigitalOcean服务器上Instagram登录失败的实用方案

嘿,我之前在AWS和DigitalOcean服务器上碰到过一模一样的Instagram登录问题——Instagram的反机器人系统对数据中心IP和脚本化请求管得特别严。结合你给出的脚本,我整理了几个实测有效的解决办法:

1. 补全请求头,先拿CSRF Token再登录

你的脚本只设置了User-Agent,但Instagram会检查更多请求头,而且必须先访问主页拿到必要的Cookie和CSRF Token才能发起登录请求。修改你的登录函数试试:

import requests
import pprint
import time

INSTAGRAM_URL = 'https://www.instagram.com'
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
IG_ACCOUNTS = [
    {'username': 'username1', 'password': 'pass1'},
    {'username': 'username2', 'password': 'pass2'},
]

def login(username, password):
    session = requests.Session()
    # 补全更贴近真实用户的请求头
    session.headers.update({
        'User-Agent': USER_AGENT,
        'Accept-Language': 'en-US,en;q=0.9',
        'Referer': f"{INSTAGRAM_URL}/",
        'X-Requested-With': 'XMLHttpRequest',
        'Origin': INSTAGRAM_URL
    })

    # 先访问主页,获取CSRF Token和初始Cookie
    response = session.get(INSTAGRAM_URL)
    csrf_token = session.cookies.get('csrftoken')
    if not csrf_token:
        print(f"获取CSRF Token失败,可能IP已被限制")
        return None

    # 把CSRF Token加入请求头
    session.headers['X-CSRFToken'] = csrf_token
    login_url = f"{INSTAGRAM_URL}/accounts/login/ajax/"

    payload = {
        'username': username,
        'password': password
    }

    # 模拟用户输入后的延迟,再发请求
    time.sleep(2)
    response = session.post(login_url, data=payload)
    res_data = response.json()
    pprint.pprint(res_data)

    if res_data.get('authenticated'):
        print(f"✅ {username} 登录成功")
        return session
    else:
        error_msg = res_data.get('message') or "未知错误"
        print(f"❌ {username} 登录失败:{error_msg}")
        return None

2. 解决IP被拉黑的核心问题

AWS和DigitalOcean的IP池大多被Instagram标记成了可疑流量,这是最常见的失败原因:

  • 换用住宅代理(别用数据中心代理),住宅IP更接近真实用户的上网环境,不容易被检测
  • 在会话里配置代理,每个账号尽量用不同的IP:
# 替换成你的住宅代理地址
proxies = {
    'http': 'http://your-residential-proxy:port',
    'https': 'http://your-residential-proxy:port'
}
session = requests.Session()
session.proxies.update(proxies)
  • 如果是固定IP的服务器,可以先在本地用账号登录一次,在Instagram的安全设置里把这个IP标记为“信任设备/IP”

3. 模拟真实用户行为,避免被识别为脚本

Instagram会检测请求频率和行为模式,你可以加这些细节:

  • 在每次请求之间加随机延迟,比如time.sleep(random.uniform(1.5, 4)),模拟用户操作间隔
  • 不要连续快速登录多个账号,每个账号登录前先访问几个页面(比如首页、某个用户主页),再发起登录
  • 准备一个真实浏览器的UA池,每个账号用不同的UA,避免重复

4. 处理账号验证问题

如果你的账号开了两步验证,或者Instagram触发了人机验证:

  • 先在本地用该账号登录,完成验证后信任服务器IP(如果IP固定)
  • 检查返回的JSON里是否有require_login_challenge字段,如果有,说明需要验证,得额外处理验证码流程(比如手动接收短信,或者用合规的验证码识别工具)

5. 换用浏览器模拟工具(终极方案)

如果纯requests的方法还是不行,试试用playwright或者selenium模拟真实浏览器操作——它们能完全模拟用户的浏览器环境,绕过大部分反爬检测:

from playwright.sync_api import sync_playwright
import random
import time

def login_with_playwright(username, password):
    with sync_playwright() as p:
        # 服务器上需要无头模式,本地可以改成False看界面
        browser = p.chromium.launch(headless=True, args=['--no-sandbox'])
        page = browser.new_page(user_agent=USER_AGENT)
        
        # 模拟用户缓慢打开页面
        page.goto(INSTAGRAM_URL)
        time.sleep(random.uniform(2, 3))
        
        # 模拟输入账号密码(加延迟)
        page.fill('input[name="username"]', username)
        time.sleep(random.uniform(0.5, 1))
        page.fill('input[name="password"]', password)
        time.sleep(random.uniform(0.5, 1))
        
        # 点击登录按钮
        page.click('button[type="submit"]')
        time.sleep(3)
        
        # 检查登录状态
        if page.url == f"{INSTAGRAM_URL}/" or "/accounts/onetap/" in page.url:
            print(f"✅ {username} 登录成功")
        else:
            print(f"❌ {username} 登录失败,可能需要验证")
        
        browser.close()

注意:在服务器上用playwright需要先安装依赖,比如pip install playwright,然后运行playwright install chromium。


内容的提问来源于stack exchange,提问作者Js Lim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:44:08