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

如何用Python脚本登录.aspx页面?Trademap爬取遇SSL验证失败

解决Trademap登录爬取的问题

一、先解决SSL证书错误

出现requests.exceptions.SSLError是因为请求时证书验证失败,两种快速处理方式:

  • 临时绕过验证:在requests请求中添加verify=False(注意:仅用于测试,生产环境不建议,存在安全风险)
  • 手动指定CA证书:下载目标网站的CA证书文件,请求时通过verify="/本地证书路径.pem"指定

示例代码(临时绕过验证):

import requests

session = requests.Session()
login_url = "https://idserv.marketanalysis.intracen.org/Account/Login"
# 先GET登录页面获取必要参数
response = session.get(login_url, verify=False)

二、处理ASP.NET登录的核心要点

ASP.NET的WebForms页面依赖几个隐藏表单字段,必须在POST登录请求中携带,步骤如下:

  1. 先GET登录页面,用BeautifulSoup解析出__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION这三个隐藏字段的值
  2. 构造POST表单数据,包含你的用户名、密码,加上上述三个隐藏字段
  3. 用同一个Session对象发送POST请求,保持会话状态

完整示例代码:

import requests
from bs4 import BeautifulSoup

# 初始化会话,自动管理Cookie
session = requests.Session()
# 关闭SSL验证(测试用)
session.verify = False
# 禁用不安全请求警告
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)

login_url = "https://idserv.marketanalysis.intracen.org/Account/Login"
# 第一步:获取登录页面的隐藏字段
response = session.get(login_url)
soup = BeautifulSoup(response.text, "html.parser")

# 提取ASP.NET必填的隐藏字段
viewstate = soup.find("input", {"name": "__VIEWSTATE"})["value"]
viewstate_gen = soup.find("input", {"name": "__VIEWSTATEGENERATOR"})["value"]
event_validation = soup.find("input", {"name": "__EVENTVALIDATION"})["value"]

# 构造登录表单数据(注意按钮name值要和页面源码一致)
login_data = {
    "__VIEWSTATE": viewstate,
    "__VIEWSTATEGENERATOR": viewstate_gen,
    "__EVENTVALIDATION": event_validation,
    "UserName": "你的用户名",
    "Password": "你的密码",
    "LoginButton": "登录"  # 需核对页面登录按钮的name属性,可能是其他值
}

# 第二步:发送登录请求
login_response = session.post(login_url, data=login_data)

# 验证登录是否成功:访问需要权限的页面,检查返回内容
target_page = "https://www.trademap.org/你要爬取的页面路径"
result = session.get(target_page)
print(result.text)

三、关键注意事项

  • 登录按钮的name值:必须和登录页面源码中按钮的name属性完全一致,比如可能是btnLogin而非LoginButton,需查看页面源码确认
  • 会话保持:全程使用同一个requests.Session()对象,它会自动保存并传递登录后的Cookie
  • 反爬应对:Trademap可能存在请求频率限制、验证码机制,测试时建议添加time.sleep()控制请求间隔,避免被封禁
  • 备选方案:如果上述方式仍无法成功,可尝试用Selenium模拟浏览器登录,能自动处理JS渲染和复杂表单验证,缺点是速度较慢

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:35:19