Python 模拟登录几种常见方法
方法一:直接使用已知的cookie访问
优点:
简单,但需要先在浏览器登录
原理:
简单地说,cookie保存在发起请求的客户端中,服务器利用cookie来区分不同的客户端。因为http是一种无状态的连接,当服务器一下子收到好几个请求时,是无法判断出哪些请求是同一个客户端发起的。而“访问登录后才能看到的页面”这一行为,恰恰需要客户端向服务器证明:“我是刚才登录过的那个客户端”。于是就需要cookie来标识客户端的身份,以存储它的信息(如登录状态)。
当然,这也意味着,只要得到了别的客户端的cookie,我们就可以假冒成它来和服务器对话。这给我们的程序带来了可乘之机。
我们先用浏览器登录,然后使用开发者工具查看cookie。接着在程序中携带该cookie向网站发送请求,就能让你的程序假扮成刚才登录的那个浏览器,得到只有登录后才能看到的页面。
具体步骤:
1.用浏览器登录,获取浏览器里的cookie字符串
先使用浏览器登录。再打开开发者工具,转到network选项卡。在左边的Name一栏找到当前的网址,选择右边的Headers选项卡,查看Request Headers,这里包含了该网站颁发给浏览器的cookie。对,就是后面的字符串。把它复制下来,一会儿代码里要用到。
注意,最好是在运行你的程序前再登录。如果太早登录,或是把浏览器关了,很可能复制的那个cookie就过期无效了。

2 贴代码
这边直接使用requests 库来进行请求 urllib库的版本 太繁琐 代码写的也多
"""
直接获取 个人中心的页面
手动粘贴 辅助 pc 抓包的 cookies
放在 request对象的请求头里面
""" import requests #1 数据url
url = "http://www.juming.com" # 这里是从 浏览器复制过来的
cookiestr = 'pgv_pvi=3062528000; _;=; =1579855336,1580038094,,1582021806; IESESSION=alive; pgv_si=s7468463104; ASPSESSIONIDQSTAQSCD=NKOGKGPBDCLNOOGIGFADHCNP; ASPSESSIONIDSQSATRCD=PHDHCNDCBHEFKINKPOFBDHEF; ASPSESSIONIDQQSARSDC=KOIIFBJCHHCLKPMKPNCEJHOI; ASPSESSIONIDSSRARSDD=HOFGFPJCFGBDDOJBOGNOGCPL; Hm_lvt_512ed551fae9428abd7d743009588c7a=1580038094,1581251646,1582021806; ASPSESSIONIDSSQCRSCD=JLDCMFOCJBJHNDIFJEEFBHDL; _qddab=3-qwql4k.k6u9ijsq; ASPSESSIONIDQSSATQDC=BKNFMPADENCCEEFACHFGEALB; ASPSESSIONIDQSSAQSCD=KIDLMNBDAHIGKPNLJIMMGGFG;' agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36' #2 添加请求头
headers = {
"User-Agent":agent,
} #把cookie字符串处理成字典,以便接下来使用
cookies = {}
for line in cookiestr.split(';'):
key, value = line.split('=', 1)
cookies[key] = value s=requests.session() rs=s.get(url,headers=headers,cookies =cookies, verify=False) #5 读取数据
rs.encoding='gbk' # 把数据存到文本里
f=open("01cook.html","w",encoding='gbk')
f.write(rs.text)
f.close()
方法二:模拟登录后再携带得到的cookie访问
原理:
我们先在程序中向网站发出登录请求,也就是提交包含登录信息的表单(用户名、密码等)。从响应中得到cookie,今后在访问其他页面时也带上这个cookie,就能得到只有登录后才能看到的页面。
具体步骤:
1.找出表单提交到的页面
还是要利用浏览器的开发者工具。转到network选项卡,并勾选Preserve Log(重要!)。在浏览器里登录网站。然后在左边的Name一栏找到表单提交到的页面。怎么找呢?看看右侧,转到Headers选项卡。首先,在General那段,Request Method应当是POST。其次最下方应该要有一段叫做Form Data的,里面可以看到你刚才输入的用户名和密码等。也可以看看左边的Name,如果含有login这个词,有可能就是提交表单的页面(不一定!)。

这里要强调一点,“表单提交到的页面”通常并不是你填写用户名和密码的页面!所以要利用工具来找到它。
2.找出要提交的数据
虽然你在浏览器里登陆时只填了用户名和密码,但表单里包含的数据可不只这些。从Form Data里就可以看到需要提交的所有数据。

3.写代码
from urllib import parse #转译
import requests # 1.1 登录的网址
login_url = "https://www.jinmi.com/Login/index" #1.2 登录的参数
login_form_data = {
"userKey": "xxx",
"password": "xxxx",
} agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3650.400 QQBrowser/10.4.3341.400"; #带着参数 发送post请求
#添加请求头
headers = {
"User-Agent": agent
} #1 参数 将来 需要转译 转码; 2 post 请求的 data 要求是bytes
login_str = parse.urlencode(login_form_data).encode('utf-8') ## 构建请求对象
response = requests.post(login_url,login_form_data,headers = headers) ## 获得访问 cookie
cookies = response.cookies setting_url = "https://www.jinmi.com/User/index" # 这边直接访问会员中心
rs = requests.get(setting_url, headers=headers, cookies=cookies) #5 读取数据
rs.encoding='utf-8' # 把数据存到文本里
f=open("03cook.html","w",encoding='utf-8')
f.write(rs.text)
f.close()
方法三:模拟登录后用session保持登录状态
原理:
session是会话的意思。和cookie的相似之处在于,它也可以让服务器“认得”客户端。简单理解就是,把每一个客户端和服务器的互动当作一个“会话”。既然在同一个“会话”里,服务器自然就能知道这个客户端是否登录过。
具体步骤:
1.找出表单提交到的页面
2.找出要提交的数据
这两步和方法二的前两步是一样的
3.写代码
# 1。定义请求参数
login_url = "https://www.jinmi.com/Login/index" headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36",
}
# 1.2 登录的参数
data = {
"userKey": "wwww",
"password": "wwwww",
} # 构造Session
session = requests.session() # 在session中发送登录请求,此后这个session里就存储了cookie
session.post(login_url, data, headers=headers) ### 打印session 这边可以直接存贮起来
#print(session.cookies.get_dict()) # 登录后才能访问的网页
setting_url = "https://www.jinmi.com/User/index"
rs = session.get(setting_url, headers=headers) # 这样的方式也可以访问
#rs = requests.get(setting_url, headers=headers, cookies=session.cookies) # 把数据存到文本里
f = open("04cook.html", "w", encoding='utf-8')
f.write(rs.text)
f.close()
还有很多方式 后续 我在更新 这些都是简单的 直接登录就行的 有复杂的 各种 js 加密 具体还需要自行实践
Python 模拟登录几种常见方法的更多相关文章
- Python爬虫突破封禁的6种常见方法
转 Python爬虫突破封禁的6种常见方法 2016年08月17日 22:36:59 阅读数:37936 在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于用 ...
- 【Python数据分析】Python模拟登录(一) requests.Session应用
最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...
- PHP cURL应用实现模拟登录与采集使用方法详解
对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_co ...
- PHP cURL实现模拟登录与采集使用方法详解教程
来源:http://www.zjmainstay.cn/php-curl 本文将通过案例,整合浏览器工具与PHP程序,教你如何让数据 唾手可得 . 对于做过数据采集的人来说,cURL一定不会陌生.虽然 ...
- 简单谈谈Python中的几种常见的数据类型
简单谈谈Python中的几种常见的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等 ...
- 【py登陆】python模拟登录
用Python模拟登录网站 前面简单提到了 Python 模拟登录的程序,但是没写清楚,这里再补上一个带注释的 Python 模拟登录的示例程序.简单说一下流程:先用cookielib获取cookie ...
- jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下. [WebMethod] public static string SayHe ...
- 忘记秘密利用python模拟登录暴力破解秘密
忘记秘密利用python模拟登录暴力破解秘密: #encoding=utf-8 import itertools import string import requests def gen_pwd_f ...
- JS数组去重的几种常见方法
JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...
随机推荐
- Java项目之家庭收支记账软件
模拟实现基于文本界面的家庭记账软件,该软件能够记录家庭的收入支出,并能够打印收支明细表. 项目采用分级菜单方式.主菜单如下: 假设家庭起始的生活基本金为10000元. 每次登记收入(菜单2)后,收入的 ...
- Faster Rcnn随笔
步骤:1.build_head()函数: 构建CNN基层网络图像被缩放16倍2.build_rpn()函数: 在feature map上生成box的坐标和判断是否有物体 generate_anchor ...
- 如何编写Robot Framework测试用例2---(测试用例语法1)
基本语法 测试用例由关键字组成,关键字的来源有三种: 1从测试库引入:2从资源文件引入:3从关键字表中引入(自定义关键字) 下面就是一个典型的测试用例组织形式. 图中有2个测试用例“Valid Log ...
- minikube 设置CPU和内存
安装minikube之后,第一次sudo minikube start 时,设置参数--cpus int --memory int . 如果需要更改设置,需要将缓存文件$HOME/.minikube ...
- 关于neo4j初入门(4)
关于admin管理员 数据库备份和恢复 Neo4j数据库备份 步骤1 -点击“Neo4j Community”,如下图所示 Windows“开始”按钮>> "All Progra ...
- Java入门 - 语言基础 - 19.方法
原文地址:http://www.work100.net/training/java-method.html 更多教程:光束云 - 免费课程 方法 序号 文内章节 视频 1 概述 2 方法的定义 3 方 ...
- 基于python的感知机
一. 1.感知机可以描述为一个线性方程,用python的伪代码可表示为: sum(weight_i * x_i) + bias -> activation #activation表示激活函数,x ...
- python+autoit用法
一.自己封装的一些使用到的autoit库 import autoit class MouseControl(object): ''' AutoIt鼠标相关操作 ''' def __init__(sel ...
- 团队项目——Alpha1版本
团队项目-Alpha版本发布1 一.格式描述 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/ ...
- ubuntu “快捷方式”
1.创建.Desktop文件 sudo gedit /usr/share/applications/pycharm.desktop 2.建立pycharm.desktop [Desktop Entry ...