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 ...
随机推荐
- 5.1_Spring Boot2.x安装Docker
1.简介 Docker是一个开源的应用容器引擎:是一个轻量级容器技术: Docker 是一个开源的应用容器引擎,基于Go 语言并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用 ...
- POJ 1873 /// 状压+凸包
题目大意: 国王有一片森林,巫师需要从所有树中选出一些做成围栏把其他树围起来, 每棵树都有其对应的价值 v 和能作为围栏的长度 l 要求最小价值,若存在多种最小价值的方案则选择余下长度更少的 树木较少 ...
- js 仿微信投诉—引入vue.js,拆分组件为单个js
效果 页面目录 index.html <!DOCTYPE html > <html> <head> <meta charset="UTF-8&quo ...
- Python全栈开发:socket代码实例
客户端与服务端交互的基本流程 服务端server #!/usr/bin/env python # -*- coding;utf-8 -*- import socket sk = socket.sock ...
- jQuery实现contains方法不区分大小写的方法教程
jQuery.expr[':'].Contains = function(a, i, m){ return jQuery(a).text().toUpperCase() .indexOf(m[3].t ...
- 【JZOJ3236】矮人排队
description 在七山七海之外的一个小村庄,白雪公主与N个矮人住在一起,所有时间都花在吃和玩League of Legend游戏.白雪公主决心终结这样的生活,所以为他们举办了体育课. 在每节课 ...
- 回首2018 | 分析型数据库AnalyticDB: 不忘初心 砥砺前行
题记 分析型数据库AnalyticDB(下文简称ADB),是阿里巴巴自主研发.唯一经过超大规模以及核心业务验证的PB级实时数据仓库.截止目前,现有外部支撑客户既包括传统的大中型企业和政府机构,也包括众 ...
- thinkphp 模板赋值
如果要在模板中输出变量,必须在在控制器中把变量传递给模板,系统提供了assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值. 大理石平台检定规程 $this->assign( ...
- vue-resourse简单使用方法
一.安装引用 安装: npm install vue-resource --save-dev 引用: /*引入Vue框架*/ import Vue from 'vue' /*引入资源请求插件*/ im ...
- apache配置域名子目录,访问不同子项目
<VirtualHost *:443> DocumentRoot "E:/phpstudy/WWW/nextplus" ServerName local-main.co ...