python模拟登录我爱我家网站

2023-12-23 01:50

本文主要是介绍python模拟登录我爱我家网站,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是模拟登陆?

模拟登陆:用脚本模拟用户行为实现账户登陆。

模拟登陆分类

暴力模拟登陆:忽略web设计原理,忽略登陆需求,硬性的将cookie取出加载爬虫当中进行登录。

原理分析模拟登陆: 根据网站源码和抓包请求,分析网站登录原理,用代码依照登录原理向服务器具体接口提交具体数据,实现模拟登录,技术含量最高,难度最大。

浏览器驱动模拟登陆:使用Python调用浏览器驱动,执行浏览器行为(发送数据,点击),进行模拟登陆,这种模拟登陆由于难度低,逐渐被一些项目认可,但是效率低。

正常浏览器模拟登陆

无头浏览器模拟登陆

Cookie原理

      上面说的前两种模拟登陆都需要我们了解cookie是啥

       Cookie(曲奇,小饼干):是服务器下发给浏览器用于识别用户身份的校验值。

       举个例子:

              西游记当中唐僧手中的通关文牒:

              每到一个国家,唐僧需要提交通关文牒来证明自己身份,同时每个国家的国王需要下发自己的校验来提供给唐僧校验身          份。

         Cookie是实现当前web身份识别的基础手段,具有一定的不安全性,因为:

         cookie下发,浏览器可以拒收

         cookie下发到浏览器本地,容易被重写伪装

         我们来查看cookie的下发和提交

cookie的下发是在和http请求的response header当中

案例地址url = http://www.wangcai5188.com/auth/signin

Cookie的设置和下发

 

注意:

         Set_cookie 也可以有多个

携带cookie在RequestHeader里面

由上面得到我们在写爬虫的时候

需要关心cookie的下发,我们需要保存下发的cookie来维持自己的身份

需要关心提交的cookie

所有的Python爬虫模块默认都不携带cookie

Post 模拟登陆

模拟登陆分析技巧

         结构分析

         Form表单提交分析

在HTML的form标签当中,我们要关注两个参数

        Method: 请求的方式,不写或者为空代表采用默认值 get,表单提交通常是post

        Action: 提交的路由,指向处理提交数据的地址

由上面的分析和规律我们得到

我爱我家网站的请求方法是:post

密码和账号提交的位置:https://passport.5i5j.com/passport/sigin?city=bj

Form表单提交数据分析

上面的分析,我们看着很完美,其实不然,我们现在不知道我们提交了多少参数,我们从HTML界面上看有:用户名、密码两项,但是注意,为了防止最简单的爬虫

在网站设计的思路上:

        有一个隐性的form元素hidden

Hidden也可以像普通的form元素一样向后台以name= value的形式进行数据提交,但是在页面上不做显示。Hidden通常是不变的,我们在请求的时候,携带数据就可以,但是有部分网站的hidden的值来源于后台算法生成,所以是变化的,所以我们在爬虫请求登录的时候,要先从页面上抓取当前请求对应的hidden值。

抓包分析

上面结构分析,也可以说是静态分析,我们接下来是抓包分析,也是动态分析,

       抓取登录页面的包

请求登录的包

我们需要故意输错密码,防止页面跳转的同时,抓取到登录的包

首先发现请求没有问题

请求登录接口会有cookie下载

请求头部发现,我们在请求的时候

  1. 需要携带cookie
  2. 需要携带请求来源
  3. 浏览器的版本

我们发现了请求携带的数据,比较结构分析,发现数据需求一致,而且是明文的!!!

通过上述分析得到以下结论:

当前我们的爬虫请求需要分为两个步骤

  1. 请求登录页面:
  1. 获取三项校验数据
  2. 获取登录页面下发的cookie

2、在得到请求的三项校验数据和cookie之后,我们发起对登录接口的请求

       Urllib 系列的模拟登陆

               模拟登陆目标:

                     我爱我家

https://passport.5i5j.com/passport/login?service=https%3A%2F%2Fcd.5i5j.com%2Freglogin%2Findex%3FpreUrl%3Dhttps%253A%252F%252Fcd.5i5j.com%252F&status=1&city=cd

urllib模拟登录知识点

  1. urllib.requests.urlopen方法可以请求服务器,但是不保存cookie
  2. urllib需要结合cookielib进行模拟登录

Python2当中: cookielib

Python3当中: http.cookiejar

         开始模拟登录的代码:

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author  : ALLEN
# @Time    : 2018/12/28 17:08
# @File    : woaiwojia_spider.py
# @Software: PyCharmfrom lxml import etree
from urllib import parse
from urllib import request
import http.cookiejar as cookieliblogin_page_url = "https://passport.5i5j.com/passport/login?service=https%3A%2F%2Fcd.5i5j.com%2Freglogin%2Findex%3FpreUrl%3Dhttps%253A%252F%252Fcd.5i5j.com%252F&status=1&city=cd"login_page_header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"
}
#创建登录请求
req = request.Request(url = login_page_url,headers = login_page_header)#声明一个cookie容器
cookie = cookielib.MozillaCookieJar("1.txt")#创建cookie处理器
handler = request.HTTPCookieProcessor(cookie)#设置代理ip (无妄之灾)
#proxy = request.ProxyHandler({"http": "222.221.11.119:3128"})#创建自己的请求器(urlopen),我们自己定义的请求器是会保存服务器下发的cookie
opener = request.build_opener(handler)#发起请求 request.urlopen(req)
response = opener.open(req)#保存cookie
cookie.save(ignore_discard = True,ignore_expires = True) #参数是用来第一cookie过期和覆盖的设置content= response.read().decode()#获取三项校验数据
html = etree.HTML(content)
aim = html.xpath('//input[@id="aim1"]')[0].attrib["value"]
service = html.xpath('//input[@id="service"]')[0].attrib["value"]
status = html.xpath('//input[@id="status1"]')[0].attrib["value"]send_dict = {"username": "账号",#这里请填写自己的账号"password": "密码",#这里请填写自己的密码"aim": aim,"service": service,"status": status
}login_url = "https://passport.5i5j.com/passport/sigin?city=cd"login_headers = {"Referer": login_page_url,"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"
}
#封装发送数据
send_data = parse.urlencode(send_dict).encode() #Python3 要进行字节编码#构建登录请求
login_req = request.Request(url = login_url,headers = login_headers,data = send_data)#发起登录请求
login_respone = opener.open(login_req)#保存cookie
cookie.save(ignore_discard = True,ignore_expires = True) #参数是用来第一cookie过期和覆盖的设置content = login_respone.read().decode()print(content)

效果如下:

接下来我会更新如何模拟登陆  http://www.wangcai5188.com/auth/signin

大家也可以试着尝试登陆一下

代码如下:

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author  : ALLEN
# @Software: PyCharmimport requests
from lxml import etree
# 实例化一个保存cookie的请求器
session = requests.session()
# 发起对登录页面的请求
response = session.get("http://www.wangcai5188.com/auth/signin")
content = response.content.decode()
# 进行数据过滤,获取token和random的值
html = etree.HTML(content)
token, = html.xpath('//input[@name="_token"]/@value')
random, = html.xpath('//input[@name="_random"]/@value')
send_dict = {"username":"账号","password":"密码","_token":token,"_random":random
}
# 向服务器发起请求
url = "http://www.wangcai5188.com/auth/signin"
headers = {"Referer":"http://www.wangcai5188.com/auth/signin","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36"}
login_response = session.post(url = url,headers = headers,data = send_dict)
login_content = login_response.content.decode()
print("==========================================================")
print(login_response.status_code)
print("==========================================================")
print(login_content)

效果如下:

 

 

 

 

 

 

 

 

 

 

这篇关于python模拟登录我爱我家网站的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526315

相关文章

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

python常用的正则表达式及作用

《python常用的正则表达式及作用》正则表达式是处理字符串的强大工具,Python通过re模块提供正则表达式支持,本文给大家介绍python常用的正则表达式及作用详解,感兴趣的朋友跟随小编一起看看吧... 目录python常用正则表达式及作用基本匹配模式常用正则表达式示例常用量词边界匹配分组和捕获常用re

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到