Python爬虫笔记【一】模拟用户访问之提交表单登入—第二次(4)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python爬虫笔记【一】模拟用户访问之提交表单登入—第二次(4),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3226字,纯文字阅读大概需要5分钟。
内容图文
![Python爬虫笔记【一】模拟用户访问之提交表单登入—第二次(4)](/upload/InfoBanner/zyjiaocheng/712/e84627ea6a25454f96fbbb5dee1d0231.jpg)
在第一次登入时遇到这个问题,页面验证码与下载下来需要识别的验证码不同的问题,从网上查寻说是叫验证码同步问题。发现是用cookie解决的,那次cookie介绍到通过cookie就可以实现时间戳同步问题,经过测试发现用同一个cookie打开上次的验证码网页是相同的。登入就是向后台服务器提交一个表单,那么我们就可以将cookie绑定(使验证码的post请求与验证码的请求时间戳相同,来解决验证码同步)然后以提交表单的方式来登入,所以下面来介绍这个方法(当然这个方法也没有解决)。原因有点崩溃。先上代码,问题之后再说。
import http.cookiejar import urllib import re # 验证码获取网页,即src。 CaptchaUrl = "http://60.216.103.149/jwweb/sys/ValidateCode.aspx" # post请求地址,通过网页属性可以得到,详细看之前的表单处理2 3项 PostUrl = "http://60.216.103.149/jwweb/_data/login_home.aspx" # 将cookies绑定到一个opener cookie由cookielib自动管理 cookie = http.cookiejar.CookieJar() handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler) # 用户名和密码 username = '1803120104' password = 'DFY5201314' # 用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爬虫笔记【一】模拟用户访问之提交表单登入—第二次(4)全部内容,希望文章能够帮你解决Python爬虫笔记【一】模拟用户访问之提交表单登入—第二次(4)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。