python模拟登录我爱我家网站

news/2024/5/9 17:40:53/文章来源:https://blog.csdn.net/ALLENsakaru/article/details/85328594

什么是模拟登陆?

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

模拟登陆分类

暴力模拟登陆:忽略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)

效果如下:

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_796934.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Apache的ab工具进行网站性能测试

2019独角兽企业重金招聘Python工程师标准>>> 1.打开Apache服务器的安装路径,在bin目录中有一个ab.exe的可执行程序,就是我们要介绍的压力测试工具。 2.在Windows系统的命令行下,进入ab.exe程序所在目录,执行ab.exe程序…

京东 你访问的页面需要验证证书_SSL证书对于SEO排名来说有什么意义?vTrus这样说…...

SSL(安全套接字层)证书作为网站的一种安全措施,是安装在Web服务器上的小型数据文件。SSL会激活一个挂锁,以允许从Web服务器到浏览器的安全连接。HTTPS页面将获得SEO提升在Google不断变化的SEO排名算法中,最新的算法之一是将使用SSL证书的网站…

php培训网站怎么样,九江php培训怎么样(PHP是什么)

九江php培训怎么样,当你比较纠结选择江西PHP培训,应该留下看看:php培训后的发展前景,php培训的注意事项,怎么运行PHP,php常用框架有哪些,php乱码怎么解决,PHP是什么php培训后的发展前…

SEO最近的一份成绩单

总觉得可以做的更好的。大神看到了勿喷..转载于:https://blog.51cto.com/daoxin/1639876

seo优化与html,HTML SEO 优化技巧

分析个人能力的时候发现自己对HTML 的SEO优化了解的还不是很多,所以花了些时间学习了一下,并且和大家分享一下所学内容与总结。1. 标签优化1. Title 标签title标签是搜索引擎抓取的重点,搜索引擎抓取title标签作为搜索结果的展示信息。title标…

linux网站程序,建议收藏99%的程序员都爱的网站

导读作为程序员,你每天接触到的比较多的网站或者平时比较喜欢浏览的网站有哪些?今天给大家介绍9个99%的程序员都爱的网站,建议收藏起来。如果你有什么其他有用的网站,也可以评论区推荐给大家。1、GitHubhttps://github.com/大名鼎…

元旦用SpringBoot撸了个博客网站送给大家

说在前面掘金是曾经我觉得最适合写技术文章的社区,因为可以带二维码引流。我觉得这想法没问题,可是最近发现掘金也凉了,写文章连个公众号二维码都不给带,这让我觉得被白嫖了。而且最近发现我更加偏向于写纯粹的技术文章&#xff0…

和朋友合伙搞了个网站

做IT的可能都有类似的操作,总有一些朋友会找我们做这做那,或者是合伙做个网站什么的,这不,今年年初深圳那边就有个关系很铁的老哥找我搞一个租房网站,他简单说明了下他的想法,我大概罗列了能不能做深圳本地…

使用C#的HttpWebRequest模拟登陆网站

原文:使用C#的HttpWebRequest模拟登陆网站这篇文章是有关模拟登录网站方面的。 实现步骤; 启用一个web会话 发送模拟数据请求(POST或者GET) 获取会话的CooKie 并根据该CooKie继续访问登录后的页面,获取后续访问的页面数据。我们以…

[网站摘录]TOP小区流程分析

原文地址:http://www.mscbsc.com/bbs/thread-656686-1-1.html#73转载于:https://blog.51cto.com/10237569/1840620

Dapper:The member of type SeoTKD cannot be used as a parameter Value

异常汇总&#xff1a;http://www.cnblogs.com/dunitian/p/4523006.html#dapper 上次说了一下Dapper的扩展Dapper.Contrib http://www.cnblogs.com/dunitian/p/5710382.html 以及这个异常&#xff1a;Dapper.Contrib&#xff1a;GetAsync<T> only supports an entity with…

IIs 网站应用程序与虚拟目录的区别及高级应用说明(文件分布式存储方案)【转】...

对于IIS网站&#xff0c;大伙用的比较多&#xff0c;就不啰嗦了。 今天和说说大伙比较少使用的"IIS应用程序”和虚拟目录的区别及高级应用场景&#xff0c;文件分布式存储方案。 1&#xff1a;IIS网站&#xff1a; 一个网站&#xff0c;基本就是一个站点&#xff0c;绑定N…

你通晓SaaS吗?不自行搭建门户网站的三大理由

就算你创业家们已经对SaaS动了心&#xff0c;也要关注SalientGroup公司发布的新研究结果&#xff1a; 1、SaaS在获得资金。近50%的基于SaaS的初创公司成功地融到了资金――融资成功率之高是其他行业领域无法企及的。 2、基于SaaS的企业在增长。SaaS市场的增长率比软件市场快3倍…

asp.net 网站 发布时 去掉.cs文件

VS2013在WIN8下扁平的UI和我今天锈垢的大脑&#xff0c;让找这个设置找了好半天&#xff01;&#xff01;&#xff01;OK&#xff0c;言归正传。在要发布的网站上右键&#xff0c;选择"发布网站"。在发布窗口中&#xff0c;会让你选择一个发布配置文件&#xff0c;没…

钓鱼网站飙升居然因为这个原因...

2019独角兽企业重金招聘Python工程师标准>>> 2017年注定是个不太平的年份&#xff0c;钓鱼网站的数量已经达到了巅峰状态…… 虽然各大主流浏览器已经推进网站HTTPS的部署&#xff0c;但也正是因为这个原因&#xff0c;一部人认为只要安装了SSL证书就可以保证网站的…

凡客诚品官方网站的前端改进建议

打开http://www.vancl.com/发现采用的Asp.net&#xff0c;这点我感到很欣慰&#xff0c;毕竟国内采用.net技术体系的优秀网站少之又少。好奇之余右键-查看源码&#xff0c;却不由得皱起眉头&#xff0c;在此提几个可以让网站更快的前端建议&#xff1a; 01.合并头部的script为一…

Servlet过滤器实现网站访问计数器功能

实现网站在线访问计数器功能&#xff0c;网站的初始值设置为1000 &#xff08;1&#xff09;创建CountFilter的类&#xff0c;实现javax。servlet.Filter接口&#xff0c;是一个过滤器对象&#xff0c;通过过滤器实现统计网站人数功能&#xff1a; 123456789101112131415161718…

2017年最受欢迎的10个编程挑战网站

2019独角兽企业重金招聘Python工程师标准>>> https://mp.weixin.qq.com/s/nnswkOs_FAq1NHDzfX8mwQ 转载于:https://my.oschina.net/u/3705388/blog/1575013

记一次使用Node.js electron打包网站的记录

具体步骤请参考&#xff1a;http://blog.csdn.net/a727911438/article/details/70834467 打包时出现了不少问题&#xff0c;逐一记录下来以供其他人参考。 package.json文件内容 {"name": "appname","version": "0.1.0","main&qu…

SEO是什么意思?SEO有什么用,怎么做SEO?

什么是SEO&#xff1f;关于SEO的定义&#xff0c;在网络上可以找到很多。如果你去百度一下&#xff1a;SEO是什么。或者你直接去百度百科搜一下&#xff1a;SEO。百度就会向你陈列出关于SEO的定义。它会告诉你&#xff1a; SEO由英文Search Engine Optimization缩写而来&#x…