如何用Python Requests从ASP.NET页面获取login_token与login_id值
解决ASP.NET站点动态生成login_token和login_id的获取问题
BeautifulSoup只能解析静态HTML,而login_token和login_id是jQuery在客户端动态生成的,Requests请求返回的原始页面里根本没有这些值,所以拿不到。给你两种可行的解决办法:
方法一:用无头浏览器执行JS渲染页面
直接模拟真实浏览器加载页面、执行JS,就能获取渲染后的动态值,推荐用Playwright(轻量且易用):
- 先安装依赖:
pip install playwright playwright install chromium - 编写Python代码:
from playwright.sync_api import sync_playwright with sync_playwright() as p: # 启动无头浏览器(想看界面就把headless改成False) browser = p.chromium.launch(headless=True) page = browser.new_page() # 访问目标页面,自动维持会话 page.goto("https://www.turnitin.com/login_page.asp?lang=en_us") # 等待动态元素加载完成,根据实际页面的元素属性调整选择器 login_token = page.locator('input[name="login_token"]').input_value() login_id = page.locator('input[name="login_id"]').input_value() print(f"login_token: {login_token}, login_id: {login_id}") # 要是后续要提交表单,直接在这个page对象里操作就行,会话会保持 browser.close() - 注意:如果找不到元素,打开headless=False模式,手动查看元素的name/id,调整locator参数。
方法二:逆向JS生成逻辑
如果不想用浏览器,就直接分析页面里的jQuery代码,把生成规则翻译成Python:
- 打开页面F12开发者工具,找到生成login_token和login_id的JS代码片段
- 拆解逻辑:比如是否基于时间戳、页面隐藏值、ASP.NET会话cookie等计算
- 用Python实现相同逻辑,示例如下(需根据真实页面代码调整):
假设页面JS逻辑是:
对应的Python代码:var login_id = Math.floor(Date.now()/1000).toString(); var sessionId = document.cookie.match(/ASP.NET_SessionId=([^;]+)/)[1]; var login_token = btoa(login_id + "_" + sessionId);import base64 import time import requests # 维持会话,获取ASP.NET会话cookie session = requests.Session() session.get("https://www.turnitin.com/login_page.asp?lang=en_us") session_id = session.cookies.get("ASP.NET_SessionId") # 按JS规则生成值 login_id = str(int(time.time())) login_token = base64.b64encode(f"{login_id}_{session_id}".encode()).decode() print(f"login_token: {login_token}, login_id: {login_id}")
- 这种方法效率更高,但网站更新生成规则后需要重新分析。
内容的提问来源于stack exchange,提问作者Silver Jan Baet
相关产品推荐
相关产品推荐

