当前位置:网站首页 > 技术博客 > 正文

python抢票软件



一、selenium原理

  • Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。
  • 这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成.Net、Java、Perl等不同语言的测试脚本。(来源于百度百科)
  • 在这里,我们使用python调用selenium进行编程实现。

二、项目实战操作

本次实现使用python3.10版本
这里导入selenium包与改包中的By包。(因为使用了最新的selenium语法,需要使用By包中的类)
 

 
  • 这里的目标页为我随便选择的一个,大家可根据自己的需要修改抢票目标页。

需要注意文章中的所有方法都是在该类下定义的方法。
 

这个方法调用是在Concert类中login_method = 1是才会使用到,便于快速登陆,省去登陆过程,其中初次运行代码时,用户登陆后会在本地生成cookies.pkl文件来存储cookie信息,用于快速登陆。
 

在登录后页面会跳转至所选演唱会详情界面
 

 

选择具体票型部分未写,该部分可由读者们自行添加,不添加的话,自行选择进入页面后大麦的默认选择。
 
通过观察目前(2024.1.27)PC端浏览器中大麦的购票流程,进入演唱会详情界面后若已经开售则会出现购票二维码,推荐使用手机支付,在其下有个浏览器支付的连接,点击后才会进入订单确定界面。这里的time.sleep不能删去,在Http请求响应完成之前,直接执行下面的操作的话会出现错误,所以这里选择sleep,让HTTP响应能够完成,页面完成加载。

 
跳转至支付界面后,系统仍然会推荐使用手机支付宝支付,在这里我们选择中间的在浏览器支付,这样会跳转至支付宝登陆界面。

 
大家需要使用时将支付宝账号改为自己的账号。
这个方法主要是跳转至支付宝登录界面后自动填写支付宝账号,首先填写账号后会跳转至手机短信发送, 此时我们选择下面的支付密码,然后跳转至支付密码的输入。由于支付密码过于隐私,此处未实现自动输入支付密码(不然测试时直接付款了哭都来不及)。
 

 

看到这里的小伙伴们呢应该在运行上述代码时发现了,在登陆后进入确定订单时,大麦会进行机器检测的情况,而且自己手动验证无法通过。
这个情况涉及到了机器人检测。这个程序的本质是使用测试工具进行抢票操作,使用的driver会被识别为机器人,无法欺骗到检测程序,这里我们使用stealth.min.js进行解决。
其实stealth.min.js这个文件应该不用我多介绍了,是puppeteer中用于抹去自动化程序特征的。当他被单独提取出来后就可以在selenium中加载并使用,使得可以抹掉selenium中的自动化特征,从而绕过一些网站或者验证程序的机器人检测。
关于这个文件在Python的selenium的用法其实很简单,就是在初始化完webdriver后使用execute_cdp_cmd函数来执行这个js文件即可
 
然后就可以正常使用driver来进行其他操作了
该程序利用了selenium自动测试工具实现了抢票的一个简单脚本,相当于是对抢票功能的一个测试用例,但用在了具体抢票这件事上。同时提醒读者,该脚本在目前的大麦网上能够实现该功能,由于使用了XPATH的定位方式,若大麦网进行页面UI更改时,需要在新界面的基础上修改程序中的XPATH。

今天的分享就到这里,喜欢且对你有所帮助的话,记得点赞关注哦~下回见 !

  • 上一篇: fastjson解析map
  • 下一篇: centos8哪个版本稳定
  • 版权声明


    相关文章:

  • fastjson解析map2024-11-19 11:30:01
  • python py pyc2024-11-19 11:30:01
  • java静态内部类作用2024-11-19 11:30:01
  • 三种linux常见的文件系统2024-11-19 11:30:01
  • snat,dnat2024-11-19 11:30:01
  • centos8哪个版本稳定2024-11-19 11:30:01
  • 位图索引是什么2024-11-19 11:30:01
  • nb-iot基站与普通基站的区别2024-11-19 11:30:01
  • 图的遍历方法有哪些2024-11-19 11:30:01
  • memset(sizeof)和memset(strlen)的区别2024-11-19 11:30:01