热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

模拟12306登录

模拟12306登录思路1.获取验证码url保存到本地,在寻找时遇到了一些困难,因为之前网页上图片都是http:www.xxx.png这类格式的

模拟12306登录思路

1.获取验证码url保存到本地,在寻找时遇到了一些困难,因为之前网页上图片都是http://www.xxx.png这类格式的,直接常规操作就ok了,开始以为这样所以就一直研究红色箭头的部分,还是没有突破。然后放弃再找,点开黄色箭头是生成验证码的url,不过验证码是以base64编码的,终于找到了。接下来可以用base64.b64decode()转化成二进制保存图片。验证码获取到此为止。好像再早一些可以直接获取验证码的url。。。

 

2.验证,这就比较简单了,直接传参就ok。

3.模拟登录,传参POST请求就ok了。

4.最终的效果图。

PS:这里的图片位置是从八张图片的第一张左上角开始计算的,这里不太方便,需要通过截图工具测量手动填入,并且要注意逗号是英文的!不要填错!还有在请求时各种参数请详见代码注释。

 5.code已优化用户输入

import requests
import base64
import json
import re
from PIL import Image
s = requests.Session()#创建一个s对象,实现自动会话处理
pic_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image64'#生成验证码的url
check_url = 'https://kyfw.12306.cn/passport/captcha/captcha-check'#检查验证码的url
login_url = 'https://kyfw.12306.cn/passport/web/login'#登陆的url
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6824.400 QQBrowser/10.3.3127.400'
}
params = {'login_site':'E','module':'login','rand':'sjrand','1548225897803':'','callback':'jQuery191022828784922393353_1548223378930',#每次都是定值,但是如果两次是关闭网页重新打开是不一样的,'_':'1548223378936'#似乎与时间有关系,时间戳
}#测试之后发现只保留callback参数就可以
response = s.get(pic_url,params = params,headers = headers)
html = response.text
jsondata = re.findall('\/\*\*\/.*?\((.*?)\).*?',html)[0]#注意转义\* \( \)
dic = json.loads(jsondata)
img = base64.b64decode(dic['image'])
with open('pic.jpg','wb') as f:f.write(img)
img = Image.open('pic.jpg')
img.show()nums = input('请输入正确的图片编号1~8,示例("1,2")')
params = {'callback':'jQuery191022828784922393353_1548223378930','rand':'sjrand','login_site':'E','_':'1548223378941'#两次请求此参数无关紧要
}pic_position = {'1': '40,40','2': '110,40','3': '180,40','4': '260,40','5': '40,120','6': '110,120','7': '180,120','8': '260,120'
}
num_list = nums.split(',')
new_list = [pic_position[i] for i in num_list]
answer = ','.join(new_list)#转字符串params['answer'] = answer
verify_result = s.get(url = check_url,params = params,headers = headers).text
print(verify_result)username = input('请输入用户名')
password = input('请输入密码')
data = {'username':username,'password':password,'appid':'otn','answer':answer
}
login_result = s.post(url = login_url,data = data,headers = headers).text
print(login_result)

PS:弹出exe框后将其关闭然后在进行输入。 


推荐阅读
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 本文汇集了我在网络上搜集以及在实际面试中遇到的前端开发面试题目,并附有详细解答。无论是初学者还是有一定经验的开发者,都应深入理解这些问题背后的原理,通过系统学习和透彻研究,逐步形成自己的知识体系和技术框架。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 在iOS开发中,基于HTTPS协议的安全网络请求实现至关重要。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一种旨在提供安全通信的HTTP扩展,通过SSL/TLS加密技术确保数据传输的安全性和隐私性。本文将详细介绍如何在iOS应用中实现安全的HTTPS网络请求,包括证书验证、SSL握手过程以及常见安全问题的解决方法。 ... [详细]
  • 本文以 www.域名.com 为例,详细介绍如何为每个注册用户提供独立的二级域名,如 abc.域名.com。实现这一功能的核心步骤包括:首先,确保域名支持泛解析,即将 A 记录设置为 *.域名.com,以便将所有二级域名请求指向同一服务器。接着,在服务器端使用 ASP.NET 2.0 进行配置,通过解析 HTTP 请求中的主机头信息,动态识别并处理不同的二级域名,从而实现个性化内容展示。此外,还需在数据库中维护用户与二级域名的对应关系,确保每个用户的二级域名都能正确映射到其专属内容。 ... [详细]
author-avatar
皮皮美2_160
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有