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 ...
随机推荐
- Docker系列(三):Docker自定义容器镜像
将容器编程镜像: docker commit [repo:tag] 网上有这句话:当我们在制作自己的镜像的时候,会在container中安装一些工具.修改配置,如果不做commit保存 起来,那么co ...
- DXP 笔记
1. 从原理图上添加 net class,快捷键 : P -> V -> C
- [kuangbin带你飞]专题一 简单搜索 - E - Find The Multiple
//Memory Time //2236K 32MS #include<iostream> using namespace std; ]; //保存每次mod n的余数 //由于198的余 ...
- HYNB Contest 7:2017 Asia HCMC Vietnam National Programming Contest
A. Another Query on Array Problem B. Board Covering C. Cumulative Sums 题意 \(A_1=1,A_i=A_{i-1}+sod(A_ ...
- 帝国cms学习
手册地址1 手册地址2 入门 安装: 将下载的upload里的文件上传到网站更目录 然后 域名/e/install/index.php Warning: Use of undefined consta ...
- 提问(prompt 消息对话框)用于询问一些需要与用户交互的信息。弹出消息对话框(包含一个确定按钮、取消按钮与一个文本输入框)
提问(prompt 消息对话框) prompt弹出消息对话框,通常用于询问一些需要与用户交互的信息.弹出消息对话框(包含一个确定按钮.取消按钮与一个文本输入框). 语法: prompt(str1, s ...
- 小程序中template的用法
demo案例: wxml代码: <view> <text>template使用demo</text> <!-- <view wx:for="{ ...
- [转]关于 MVVMLight 设计模式系列
关于 MVVMLight 设计模式系列 http://www.wxzzz.com/958.html MvvmLight框架使用入门 http://www.cnblogs.com/manupstairs ...
- 三. var let const的理解 以及 立即执行函数中的使用 以及 for循环中的例子
一. 立即执行函数 windows中有个name属性,name='' '' var 如果我们用var name 去声明,那就会改变windows中name的值(因为我们不是在函数作用域中声明的,所以会 ...
- iOS开发UIView.h简介
1.UICoordinateSpace不同坐标空间的坐标切换 @protocol UICoordinateSpace <NSObject> //将当前的坐标空间点转换到指定的坐标空间 - ...