当前位置: 首页 > 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.gsyq.cn/news/9533.html

相关文章:

  • 基于java+springboot的社区居民诊疗健康管理系统(源代码+文档+讲解视频) - 指南
  • 时序数据库IoTDB的六大实用场景盘点 - 指南
  • K8S的CoreDns配置文件添加域名解析
  • nodify_介绍及安装
  • MQTT协议(消息队列遥测传输)
  • 【低代码平台之应用构建展示】数智化贸易订单管理平台
  • Threading 串行VS并发
  • parallel index
  • 微指令控制器基本原理
  • 一个拒绝过度设计的 .NET 快速开发框架:开箱即用,专注干活
  • React 学习笔记4 Diffing/脚手架 - 详解
  • VisualStudio-Python-工具指南-全-
  • 深入解析:Spring Boot注解
  • Gevent和Subprocess问题
  • WPF ListBox loaded 76.6M items with imagesource
  • 【数据结构】双向链表 - 指南
  • 告别“能源糊涂账”:MyEMS如何帮企业把能耗数据“算明白、用到位”
  • 完整教程:ElasticSearch倒排索引原理
  • 负载排查和分析三
  • 完整教程:线程、进程、协程
  • CF913G Power Substring
  • ES集群部署-EFK架构实战 - 实践
  • 《BOE解忧实验室》第四季圆满收官 以科技重塑文化生活新范式
  • 洛谷P2261 [CQOI2007] 余数求和
  • 完整教程:uniapp、devceo华为鸿蒙运行模拟器报错:未开启Hyper-V
  • 深入解析:08_多层感知机
  • (一)React面试(虚拟DOM/类组件) - 详解
  • 浏览器访问页面卡顿刷新页面方法
  • 完整教程:散斑深度相机原理
  • k8s Understanding Kubernetes Security Components