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 ...
随机推荐
- let能否完全替代IIFE
let是什么 http://es6.ruanyifeng.com/#docs/let 最近,我写了一篇关于syntax of Java’s IIFE pattern的文章,来解释为什么我们用现在的方式 ...
- PAT甲级——A1134 Vertex Cover【25】
A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at le ...
- 第十篇:javaScript中的JSON总结
参考网站:json中国,MDN json 一.必知基础 JSON 是JavaScript对象文字符号的一个子集,它可以自如的在JavaScript中使用.看下这个对象: var myJSONOb ...
- 猥琐发育,3月份Java干货已到达战场!
时间真的过得很快,又是月底了,又到了我们总结这个月干货的时候了.3月份这个月我们都带来了哪些干货呢?我们一起回顾一下. 坑爹,手机端链接点不开,请切换到电脑端或者关注我们的微信公众号进行阅读. 扫描关 ...
- 阿里云服务器安装Python3.8
1.操作系统: CentOS 7.4 64位 2.下载python安装包 wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.x ...
- (function($){….})(jQuery)与$(function(){})的区别
function fun($){…};fun(jQuery);这种方法多用于存放开发的插件,执行其中的代码时,Dom对象并不一定加载完毕. $(function(){})等价于$(document). ...
- 18-2-call和apply
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用Flume+Kafka+SparkStreaming进行实时日志分析
每个公司想要进行数据分析或数据挖掘,收集日志.ETL都是第一步的,今天就讲一下如何实时地(准实时,每分钟分析一次)收集日志,处理日志,把处理后的记录存入Hive中,并附上完整实战代码 1. 整体架构 ...
- linux及windows安装maven
一.linux安装maven 1.wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6. ...
- 0907NOIP模拟测试赛后总结
120分rank26.我又被打回原型了…… 下午考的.中午由于种种原因并没有睡好.于是状态很差. 第一眼看题感觉T1是一道XX题.部分分竟然给这么肥 然后看T2.T3好像都还不是特别恶心的题目,挺常规 ...