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

如何使用Python Requests库实现登录并获取网页数据?

编写脚本登录JSP页面并抓取数据的实现方案

嘿,我看你正在折腾写脚本登录JSP页面抓数据,刚好你给了部分登录页的代码,我来给你支几招,一步步搞定它!

首先先拆解你给出的登录页代码里的关键信息:页面里有个postSubmit()函数用来提交名为postForm的表单,还有一段防止页面被嵌入iframe的JS,以及Cookie相关的处理逻辑。咱们针对这些点来设计脚本。

第一步:先摸清楚登录的核心请求细节

JSP页面的登录通常依赖会话Cookie(比如JSESSIONID)和表单参数,所以第一步得先搞清楚这些:

  • 打开浏览器开发者工具(按F12),进入Network标签,正常登录一次,找到登录时的POST请求:
    • 记下请求的目标URL(就是表单的action属性值)
    • 查看Form Data里的所有参数:除了用户名、密码,可能还有隐藏字段(比如CSRF令牌,很多JSP页面会加这个防跨站)
    • 留意请求头里的Cookie、User-Agent这些字段,脚本里最好模拟这些

第二步:选工具写脚本(推荐Python+requests)

如果页面没有特别复杂的JS渲染,用requests库就足够简单高效,下面是示例代码:

import requests
from bs4 import BeautifulSoup

# 创建会话对象,自动帮咱们维护Cookie(关键!不然登录状态会丢)
session = requests.Session()

# 先访问登录页面,获取初始Cookie和可能的隐藏字段
login_page_url = "你的登录页面URL"
# 可以加个User-Agent模拟浏览器
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}
response = session.get(login_page_url, headers=headers)

# 解析登录页面,提取表单信息
soup = BeautifulSoup(response.text, "html.parser")
post_form = soup.find("form", {"name": "postForm"})
if not post_form:
    print("找不到登录表单!")
    exit()

# 构建表单提交的数据
form_data = {}
# 提取表单里的所有输入字段(包括隐藏字段)
for input_tag in post_form.find_all("input"):
    input_name = input_tag.get("name")
    input_value = input_tag.get("value", "")
    if input_name:
        form_data[input_name] = input_value

# 手动填入你的账号密码
form_data["username"] = "你的账号"
form_data["password"] = "你的密码"

# 确定表单提交的目标URL
form_action = post_form.get("action")
if form_action.startswith("/"):
    # 相对路径转绝对路径
    login_submit_url = f"{login_page_url.split('://')[0]}://{login_page_url.split('://')[1].split('/')[0]}{form_action}"
else:
    login_submit_url = form_action if form_action.startswith("http") else f"{login_page_url}/{form_action}"

# 提交登录请求
login_response = session.post(login_submit_url, data=form_data, headers=headers)

# 验证登录是否成功:可以访问一个需要登录才能看的页面
target_data_url = "你要抓取数据的目标URL"
data_response = session.get(target_data_url, headers=headers)

# 处理返回的数据,比如解析HTML或者提取内容
print(data_response.text)

第三步:处理页面里的JS逻辑

你给出的页面里的JS不用太担心:

  • 防止iframe的代码:脚本直接请求页面,不会涉及iframe嵌套,完全不影响
  • postSubmit()函数:本质就是触发表单提交,咱们用POST请求模拟这个动作就够了,不用去执行JS

几个要注意的坑

  • 隐藏字段不能硬编码:有些JSP页面会生成随机的CSRF令牌,必须从登录页面的HTML里动态提取,不然登录会失败
  • Cookie必须用Session维护:单独的GET/POST请求不会保存Cookie,用requests.Session()才能保持登录状态
  • 模拟浏览器标识:有些服务器会拦截没有User-Agent的请求,所以一定要加headers里的User-Agent
  • 如果有验证码:那得额外处理,比如用OCR工具或者打码平台,但你给的代码里没提这个,暂时先忽略

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:04:02