使用Python requests登录无Client ID与Secret的OpenID网站是否可行?
可行的两种验证绕过方案
方案1:复用浏览器手动登录后的凭证(最简单,适合临时抓取需求)
OIDC登录完成后,服务端会给浏览器下发会话类凭证(通常存储在Cookie中,常见键名包括sessionid、access_token等),直接复用该凭证即可跳过验证流程,操作步骤如下:
- 在本地浏览器手动完成目标网站的全流程登录,确保已经可以正常访问需要权限的页面
- 打开浏览器开发者工具(F12),切换到「网络」标签,刷新当前权限页面,找到对应页面的请求记录,复制请求头中
Cookie的完整值 - 将复制的Cookie填入Python requests请求头即可正常请求资源,示例代码如下:
import requests headers = { "User-Agent": "替换为你本地浏览器的User-Agent值", "Cookie": "替换为刚才复制的完整Cookie值" } # 直接请求需要登录权限的页面/接口 resp = requests.get("目标资源URL", headers=headers) print(resp.text)
注意:Cookie存在有效期,失效后重新在浏览器登录复制新的Cookie即可。
方案2:自动化浏览器模拟登录(适合长期批量抓取)
直接用模拟浏览器工具走完整的用户登录流程,自动保留会话状态,无需申请Client ID/Client Secret,也不需要手动复制Cookie,推荐用Playwright实现,操作步骤如下:
- 先安装依赖:执行
pip install playwright,再执行playwright install chromium安装内置浏览器 - 示例代码如下:
from playwright.sync_api import sync_playwright from bs4 import BeautifulSoup with sync_playwright() as p: # 调试阶段可将headless设为False,方便查看登录过程、手动处理验证码 browser = p.chromium.launch(headless=False) page = browser.new_page(user_agent="替换为常用浏览器的User-Agent值,降低反爬拦截概率") # 跳转至需要权限的页面,会自动触发OIDC登录跳转 page.goto("你需要抓取的目标页面URL") # 定位账号、密码输入框填入凭证,点击登录(元素选择器可在浏览器开发者工具中复制) page.fill('input[name="username"]', "你的账号") page.fill('input[name="password"]', "你的密码") page.click('button[type="submit"]') # 等待登录完成、页面资源加载完毕 page.wait_for_load_state("networkidle") # 获取页面源码传入bs4解析即可 page_content = page.content() soup = BeautifulSoup(page_content, "html.parser") print(soup.title.text) browser.close()
注意:如果登录环节有人机验证、短信验证码等流程,可以临时关闭无头模式手动处理,也可接入对应的验证码识别服务实现全自动化。
内容的提问来源于stack exchange,提问作者lberj
相关产品推荐
相关产品推荐

