Python爬虫笔记【一】模拟用户访问之提交表单登入—第二次(7)
在第一次登入时遇到这个问题,页面验证码与下载下来需要识别的验证码不同的问题,从网上查寻说是叫验证码同步问题。发现是用cookie解决的,那次cookie介绍到通过cookie就可以实现时间戳同步问题,经过测试发现用同一个cookie打开上次的验证码网页是相同的。登入就是向后台服务器提交一个表单,那么我们就可以将cookie绑定(使验证码的post请求与验证码的请求时间戳相同,来解决验证码同步)然后以提交表单的方式来登入,所以下面来介绍这个方法(当然这个方法也没有解决)。原因有点崩溃。先上代码,问题之后再说。
import http.cookiejar
import urllib
import re # 验证码获取网页,即src。
CaptchaUrl = "http://xxxxxxxxxxxxxxValidateCode.aspx"
# post请求地址,通过网页属性可以得到,详细看之前的表单处理2 3项
PostUrl = "http:xxxxxxxxxxxxxxxxxxlogin_home.aspx"
# 将cookies绑定到一个opener cookie由cookielib自动管理
cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
# 用户名和密码
username = 'xxxxxxx'
password = 'xxxxxxx'
# 用openr访问验证码地址,获取cookie
img = opener.open(CaptchaUrl).read()
# 保存验证码到本地
location = open('./easy_code/checkcode.jpg', 'wb')
location.write(img)
location.close()
# 打开保存的验证码图片 输入,此处可以切换成tesseract-orc识别,但刚开始测试还是用个人识别准确点,之前的识别函数在上一篇
SecretCode = input('输入验证码: ')
# 根据抓包信息 构造表单,可以通过f12网络中的network获取,下面会指出
postData = {
'__VIEWSTATE': '/wEPDwUKMTAzNTIzMjg1NWRk',
'__EVENTVALIDATION':'/wEdAAIKtHwTirT2Pt1uwYfKvQ1EZ5IuKWa4Qm28BhxLxh2oFA==',
'txt_asmcdefsddsd': username,
'txt_pewerwedsdfsdff': password,
'txt_sdertfgsadscxcadsad': SecretCode,
}
# 根据抓包信息 构造headers
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding':'gzip, deflate',
'Content-Type':'application/x-www-form-urlencoded',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0',
}
# 生成post数据
data = urllib.parse.urlencode(postData).encode(encoding='UTF8')
# 构造request请求
request = urllib.request.Request(PostUrl, data, headers)
# 由于该网页是gb2312的编码,所以需要解码
response = opener.open(request)
result = response.read().decode('gb2312')
# 打印登录后的页面
print (result)
上面的表单信息可以通过F12获取 网络>找到post(你需要提交一下表单才有)>参数
__VIEWSTATE和__EVENTVALIDATION 两个参数有的话需要填一下,不然会报错,剩下的就是账号密码验证码了

以上验证码我运行之后弹出一个错误消息 Object reference not set to an instance of an object. 经过查询说是一个参数未填写,经过几次的测试发现,fgfggfdgtyuuyyuuckjg是个变化值,然后在html中查找其位置又发现它刚开始为空值,在你点击密码输入时,其值会跟着你的密码变化,而且每次输入时产生的这个数都不同,因为我们是用post请求来直接登入,不可能出发js获取这个值(当然有可能是我不知道,如果有大佬能够解决请务必联系)。所以这个方法就凉了,当然以上方法绝对可行,对于验证码同步问题可用,前提是你要登入的网站没有这种坑爹的post设定。针对这种问题在我没找到cookie之前还有种方法,下一篇介绍。
参考大佬的文章
利用post请求登入:http://www.cppcns.com/jiaoben/python/140695.html
__EVENTVALIDATION无参数报错原因:https://www.cnblogs.com/Tony_2009/archive/2009/06/15/1503780.html
三种post请求思路:https://blog.csdn.net/qq_18698003/article/details/51591346
Python爬虫笔记【一】模拟用户访问之提交表单登入—第二次(7)的更多相关文章
- python爬虫笔记之用cookie访问需要登录的网站
目标:用cookie访问一个需要登录的网站 如图,直接访问会跳转到登录页面,提示登录. 运行结果: 直接在浏览器上输入该url,网站立马跳转到登录页面. 方法: 1.先手动登录,通过抓包获取coo ...
- c#以POST方式模拟提交表单
这是我一年前写的一个用C#模拟以POST方式提交表单的代码,现在记录在下面,以免忘记咯.那时候刚学C#~忽忽..很生疏..代码看上去也很幼稚 臃肿不堪 #region 内容添加函数(Contentin ...
- php中限制ip段访问、禁止ip提交表单的代码
在需要禁止访问或提交表单的页面添加下面的代码进行判断就可以了. 注意:下边只是一个PHP限制IP的实例代码,如果您打算应用到CMS中,请自行修改. <?php /加IP访问限制 if(geten ...
- Python爬虫笔记【一】模拟用户访问之设置请求头 (1)
学习的课本为<python网络数据采集>,大部分代码来此此书. 网络爬虫爬取数据首先就是要有爬取的权限,没有爬取的权限再好的代码也不能运行.所以首先要伪装自己的爬虫,让爬虫不像爬虫而是像人 ...
- Python爬虫笔记【一】模拟用户访问之表单处理(3)
学习的课本为<python网络数据采集>,大部分代码来此此书. 大多数网页表单都是由一些HTML 字段.一个提交按钮.一个在表单处理完之后跳转的“执行结果”(表单属性action 的值)页 ...
- python爬虫笔记Day01
python爬虫笔记第一天 Requests库的安装 先在cmd中pip install requests 再打开Python IDM写入import requests 完成requests在.py文 ...
- [Python爬虫笔记][随意找个博客入门(一)]
[Python爬虫笔记][随意找个博客入门(一)] 标签(空格分隔): Python 爬虫 2016年暑假 来源博客:挣脱不足与蒙昧 1.简单的爬取特定url的html代码 import urllib ...
- Python爬虫笔记(一)
个人笔记,仅适合个人使用(大部分摘抄自python修行路) 1.爬虫Response的内容 便是所要获取的页面内容,类型可能是HTML,Json(json数据处理链接)字符串,二进制数据(图片或者视频 ...
- Python爬虫笔记一(来自MOOC) Requests库入门
Python爬虫笔记一(来自MOOC) 提示:本文是我在中国大学MOOC里面自学以及敲的一部分代码,纯一个记录文,如果刚好有人也是看的这个课,方便搬运在自己电脑上运行. 课程为:北京理工大学-嵩天-P ...
随机推荐
- OpenLayers的view与layer:控制显示内容
view与layer都可以进行显示内容的控制.这两者负责的功能是由区别的. view即显示的地图容器,有以下几个属性: center:[经度,纬度] ,对应的设置函数为view.setCenter() ...
- POJ-2255-Tree Recovery-求后序
Little Valentine liked playing with binary trees very much. Her favorite game was constructing rando ...
- java_缓冲流(字节输入流)
/** * java.iko.BufferedInputStream extends InputStream * BufferedInputStream:字节缓冲输入流 * 构造方法: * Buffe ...
- 如何在Vue项目中使用Element组件
[前提] 1.安装webpack cnpm install webpack -g 2.安装vue/vue-cli cnpm install vue vue-cli -g 3.初始化vue ...
- openSUSE 安装compass,mkmf.rb can't find,checking for ffi.h...extconf.rb failed
安装compass时,提示 Fetching: sass-.gem (%) Successfully installed sass- Fetching: ffi-.gem (%) Building n ...
- postgresql数据库学习-win平台下SQLshell基础操作及语法
由于在学习https://www.bilibili.com/video/av24590479小马视频时, up主采用的linux虚拟机进行教学, 而本人采用window7进行操作,故在基础操作和语法上 ...
- JZOJ[3771] 【NOI2015模拟8.15】小 Z 的烦恼
题目 描述 题目大意 有从111到nnn的数字,每个数字都可以放在一个盒子里(可以不放).一旦放,满足: 如果它不在第mmm个盒子,那么它的两倍一定在后面一个盒子里. 如果它不在第111个盒子,那么它 ...
- Codeforces Round #258 (Div. 2)E - Devu and Flowers
题意:n<20个箱子,每个里面有fi朵颜色相同的花,不同箱子里的花颜色不同,要求取出s朵花,问方案数 题解:假设不考虑箱子的数量限制,隔板法可得方案数是c(s+n-1,n-1),当某个箱子里的数 ...
- webpack打包指定HTML的文件并引入指定的chunks
1. 安装 html-webpack-plugin npm install html-webpack-plugin --save-dev 2. 在webpack.config.js中配置 const ...
- 利用R语言制作出漂亮的交互数据可视化
利用R语言制作出漂亮的交互数据可视化 利用R语言也可以制作出漂亮的交互数据可视化,下面和大家分享一些常用的交互可视化的R包. rCharts包 说起R语言的交互包,第一个想到的应该就是rCharts包 ...