Python实现网页模拟登录的三种核心方法与代码示例

咖啡半糖
咖啡半糖
发布时间:2026-10-12 | 3人浏览过
原创

本文系统讲解使用Python绕过网页权限验证的三种实战方案。分别演示如何从抓包结果中提取有效Cookie直接发起请求、利用requests会话对象自动处理Form表单提交,以及基于Selenium驱动真实浏览器完成动态元素交互。附带完整可运行代码、参数定位步骤及版本兼容性注意事项。

实现网页模拟登录的目标与准备工作

在爬虫开发与自动化测试场景中,直接访问受保护页面通常需要身份验证。掌握模拟登录机制可高效获取私有数据或触发特定功能。执行前请确保已安装 requests 与 selenium 库,并准备好目标网站的登录入口及对应版本的浏览器驱动。

第1步:提取有效Cookie进行直连请求

当网站采用无状态API或前后端分离架构时,可直接复用已登录用户产生的Session标识(Cookie)调用内部接口。该方式资源消耗最低且最接近真实业务逻辑。

import requests

headers = {
    "Cookie": "粘贴你手动登录后浏览器捕获的完整Cookie值"
}
url = 'https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919'
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
print(response.json())

获取与替换Cookie的操作流程如下:

  1. 打开目标网页并按下 F12 开启开发者工具,切换至网络(Network)选项卡。
  2. 输入账号密码完成登录,观察左侧列表中出现的相关请求文件。
  3. 点击首个主请求,滚动至右侧“请求标头(Request Headers)”,找到 Cookie: 字段后全选复制。
开发者工具Network面板中登录请求文件列表截图
用于定位触发登录接口的请求文件
请求详情面板中显示带Cookie值的Headers信息
确认并复制完整的Cookie字符串

将复制内容填入代码 headers 字典中,运行脚本后即可成功拉取受保护页面的JSON数据:

终端成功打印书架接口返回的JSON数据结构
验证Cookie授权访问成功的运行结果

第2步:通过Session对象自动提交Form表单

针对需要主动发送认证凭证的网站,可借助 requests.Session() 保持上下文会话。该对象会自动处理服务端下发后的新Cookie,适合处理标准HTML表单提交。

import requests

session = requests.session()
login_url = "https://passport.17k.com/ck/user/login"

form_data = {
    "loginName": "你的登录账号",
    "password": "你的账户密码"
}
session.post(login_url, data=form_data)
protected_url = "https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919"
resp = session.get(protected_url)
print(resp.json())

定位登录接口与Form参数的步骤:

  1. 进入目标网站点击书架等需要登录的模块,在跳转页输入测试账号密码。
  2. 保持在Network面板,筛选类型或搜索 login 关键词。
  3. 点击登录触发的请求,向下滚动查找负载(Payload 或 Form Data),记录键名(如 loginName、password)。
触发登录跳转的页面布局示意
输入凭证前需先导航至受限页面
Network面板中选中登录接口并展示Form Data负载结构
核对提交的参数字段名称与加密格式
复制Form Data键值对填写至代码变量中
将抓包获得的参数映射至代码字典

提交成功后,同一 session 实例携带的凭证即可访问后续接口,终端输出正确的分页数据即为完成标志:

控制台打印出带书籍列表的完整响应JSON
确认会话建立与数据获取正常

第3步:基于Selenium模拟浏览器自动化交互

当目标站点采用强校验机制(如动态DOM渲染或复杂协议)时,必须依赖真实浏览器内核。以下演示完整的环境配置与元素定位流程。

  • 环境要求:安装匹配的 Chrome 浏览器及同版 webdriver。版本不一致将直接引发启动失败异常。
  • 核心技巧:部分现代网页登录框嵌套在 <iframe> 中。操作前务必在Elements面板按 Ctrl+F 搜索 iframe 或 frame,否则定位器将无法命中目标节点。
  • 路径获取:推荐右键检查元素后,在Copy菜单中复制Xpath表达式作为基线参考。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

driver = webdriver.Chrome()
driver.get("https://user.17k.com/www/bookshelf/")
time.sleep(2)

# 切换至登录弹窗所在的iframe框架
el_iframe = driver.find_element(By.XPATH, '/html/body/div[4]/div/div/iframe')
driver.switch_to.frame(el_iframe)

# 等待输入框出现后写入凭证
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//dd[@class="user"]/input')))
driver.find_element(By.XPATH, '//dd[@class="user"]/input').send_keys("你的账号")
driver.find_element(By.XPATH, '//dd[@class="pass"]/input').send_keys("你的密码")

# 勾选隐私协议复选框并提交
driver.find_element(By.XPATH, '//*[@id="protocol"]').click()
driver.find_element(By.XPATH, '//dd[@class="button"]/input').click()
Selenium控制台下浏览器自动填充账号密码并点击登录按钮的运行态
可视化验证自动化流程是否按预期执行

执行异常排查与风险提示

上述代码在实际生产环境中可能因网站策略调整而报错。若遇到 ElementNotInteractableException 或空指针,通常是因为动态类名变更或反爬检测拦截。建议在正式运行前先在浏览器控制台逐行调试XPath语法;涉及账号安全时,切勿将真实密码硬编码于公开仓库,应改用环境变量读取或本地配置文件加密存储。

以上就是Python实现网页模拟登录的三种核心方法与代码示例的详细内容,更多关于Python网页爬虫与自动化操作的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表