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

Python requests登录成功后跨页面访问显示未登录问题求助

Python requests登录后请求显示未登录的解决方案

核心故障原因

requests.Session()默认会自动维护跨请求的所有Cookie,包括登录成功后服务端返回的登录态凭证。你的代码中在POST登录、GET目标页两个请求里都手动传入了cookies=r1.cookies,该参数会强制请求仅携带第一次访问登录页时获取的未登录状态Cookie,覆盖Session自动存储的登录后有效Cookie,最终导致后续请求无法被服务端识别为已登录状态。

具体修复步骤

  • 移除所有请求中手动传入的cookies=r1.cookies参数,完全交给Session对象自动处理Cookie的存储、更新和携带,不要手动覆盖。
  • 给登录POST请求补充Referer请求头,值为登录页地址https://opencorporates.com/users/sign_in。该站点基于Rails框架开发,会校验登录请求的来源,缺少该头可能被反爬策略判定为非法请求,即使账号密码正确也不会下发有效登录态。
  • 修正目标URL的格式:你代码里的URL参数使用了HTML转义字符&,实际HTTP请求中参数分隔符需要用原生&,否则参数解析异常也可能导致状态判定错误。
  • 修正文件写入逻辑:原代码中f.close未加括号不会执行关闭操作,写入文件时指定encoding='utf-8'避免HTML内容乱码,推荐使用with上下文管理器自动处理文件关闭。
  • 增加登录有效性校验:不要仅通过r2的响应内容判断登录成功,可通过登录后是否自动跳转到用户主页、响应中是否存在仅登录后可见的用户名/退出按钮等特征确认登录真的生效,避免把登录页报错内容误判为登录成功。

修复后可运行代码

import requests
from bs4 import BeautifulSoup

# 初始化会话,自动维护跨请求Cookie
session = requests.Session()

base_headers =  {
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:86.0) Gecko/20100101 Firefox/86.0', 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1'
}

def run_login_and_crawl():
    login_page_url = 'https://opencorporates.com/users/sign_in'    
    login_page_resp = session.get(login_page_url, headers=base_headers)

    soup = BeautifulSoup(login_page_resp.text, 'html.parser')
    csrf_token = soup.find('meta', attrs={'name':'csrf-token'}).get('content')

    # 构造登录请求参数
    login_payload = {
        'utf8': '✓',
        'authenticity_token': csrf_token,
        'user[email]':'替换为你的真实账号',
        'user[password]':'替换为你的真实密码',
        'submit':''
    }
    # 补全登录请求头
    login_headers = base_headers.copy()
    login_headers['Referer'] = login_page_url
    login_resp = session.post(
        login_page_url,
        headers=login_headers,
        data=login_payload,
        allow_redirects=True
    )
    # 校验登录结果:正常登录成功会跳转到用户相关页面
    print(f'登录完成后当前页面地址:{login_resp.url}')

    # 修正后的目标搜索页URL,移除转义字符
    target_search_url = 'https://opencorporates.com/companies?utf8=%E2%9C%93&q=above+and+beyond&commit=Go&jurisdiction_code=&inactive=false&mode=best_fields&search_fields[]=name&branch=false&nonprofit=&order=score'
    search_resp = session.get(target_search_url, headers=base_headers)

    # 保存响应内容
    with open('./res.html', 'w+', encoding='utf-8') as f:
        f.write(search_resp.text)
    
    # 登出操作参考:后续需要登出时,从当前页面提取新的csrf-token,请求登出接口即可
    # page_soup = BeautifulSoup(search_resp.text, 'html.parser')
    # logout_token = page_soup.find('meta', attrs={'name':'csrf-token'}).get('content')
    # logout_headers = base_headers.copy()
    # logout_headers['X-CSRF-Token'] = logout_token
    # session.delete('https://opencorporates.com/users/sign_out', headers=logout_headers)

run_login_and_crawl()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:15:47