当前位置: 首页 > news >正文

python实现网站登录会话脚本 - wanghongwei

# -*- coding: utf-8 -*-
import os
import requests
from bs4 import BeautifulSoupdef login(username, password):"""Args:username: 用户名password: 密码Returns:session: 登录后的会话对象"""# 创建会话对象session = requests.Session()# 设置请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','Connection': 'keep-alive','Sec-Fetch-Dest': 'document','Sec-Fetch-Mode': 'navigate','Sec-Fetch-Site': 'same-origin','Upgrade-Insecure-Requests': '1','Host': 'www.example.com'}# 第一步:获取登录页面,提取execution参数和其他必要参数login_url = "https://www.example.com/cas/login"try:response = session.get(login_url, headers=headers)response.raise_for_status()except requests.RequestException as e:print(f"获取登录页面失败: {e}")return None# 解析HTML获取必要的参数soup = BeautifulSoup(response.text, 'html.parser')# 获取其他可能的隐藏字段hidden_fields = {}for input_tag in soup.find_all('input', type='hidden'):name = input_tag.get('name')value = input_tag.get('value', '')if name:hidden_fields[name] = value# 第二步:提交登录表单login_data = {'username': username,'password': password}# 添加所有隐藏字段login_data.update(hidden_fields)# 更新请求头用于POST请求post_headers = headers.copy()post_headers.update({'Content-Type': 'application/x-www-form-urlencoded','Origin': 'https://www.example.com','Referer': 'https://www.example.com/cas/login','X-Requested-With': 'XMLHttpRequest'})print(f"正在尝试登录,用户名: {username}")try:# 允许重定向,以便获取登录后的cookieresponse = session.post(login_url, data=login_data, headers=post_headers, allow_redirects=True)response.raise_for_status()except requests.RequestException as e:print(f"登录请求失败: {e}")return None# 检查登录是否成功if response.history and response.history[0].status_code == 302:# 检查是否有TGC cookie,这是登录成功的标志if 'TGC' in session.cookies:print("登录成功!")return sessionelse:print("登录失败: 未获取到TGC cookie")return Noneelse:print("登录失败: 未发生重定向或重定向状态码不正确")return None# 使用示例
if __name__ == "__main__":# 从系统环境变量获取用户名和密码USERNAME = os.environ.get('USERNAME')PASSWORD = os.environ.get('PASSWORD')session = login(USERNAME, PASSWORD)if session:# 在这里可以使用session进行后续的请求print("成功获取会话对象,可以用于后续请求")# 例如:访问登录后的页面try:response = session.get("https://www.example.com/#/landingpage")print(f"访问登录后页面状态码: {response.status_code}")except Exception as e:print(f"访问登录后页面失败: {e}")else:print("登录失败")
http://www.hskmm.com/?act=detail&tid=13351

相关文章:

  • HCM 性能优化函数
  • Nginx配置里alias和root的区别
  • 国产DevOps生态崛起:Gitee如何赋能企业数字化转型
  • 【OpenCV】10 图像滤波
  • 基于java+springboot的社区居民诊疗健康管理系统(源代码+文档+讲解视频) - 指南
  • 时序数据库IoTDB的六大实用场景盘点 - 指南
  • 50系GPU上安装MMCV
  • K8S的CoreDns配置文件添加域名解析
  • 20250308_信安一把梭_web
  • nodify_介绍及安装
  • MQTT协议(消息队列遥测传输)
  • 如何构建embeding 的就是pytorch 中
  • 萤石设备视频接入平台EasyCVR国标GB28181视频平台整合铁路抑尘喷洒智能视频监控方案
  • 【低代码平台之应用构建展示】数智化贸易订单管理平台
  • C# 第 17天 028 029接口,依赖反转,单元测试
  • 2025年项目管理软件革命:AI与空间计算如何重塑企业协作范式
  • Threading 串行VS并发
  • parallel index
  • C语言 第三讲:分支和循环(上) - 教程
  • 中间件专题:Redis
  • 微信个人号开发API/文档/教程
  • 微指令控制器基本原理
  • 一个拒绝过度设计的 .NET 快速开发框架:开箱即用,专注干活
  • 个人微信号二次开发API调用、微信API接口
  • 2025.9.21+7 [未完]
  • VisualStudio-Python-工具指南-全-
  • Gevent和Subprocess问题
  • Ansible自动化运维实战 - 详解
  • 建筑行业能源管理破局:MyEMS 打造商业楼宇 “能耗可视化 + 智能调控” 方案
  • 【数据结构】双向链表 - 指南