100行Python代码自动抢火车票!
<p>今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool。</p> <p>先准备好:</p> <ol> <li> <p>12306网站用户名和密码</p> </li> <li> <p>chrome浏览器及下载chromedriver</p> </li> <li> <p>下载Python代码,来自网络整理 [ <a href="/misc/goto?guid=4959756324452799808" rel="nofollow,noindex">点击下载</a> ]</p> </li> </ol> <p>代码用的Python+Splinter开发,Splinter是一个使用Python开发的开源Web应用测试工具,它可以帮你实现自动浏览站点和与其进行交互。Splinter官网</p> <p><a href="/misc/goto?guid=4959756324549224441" rel="nofollow,noindex">http://splinter.readthedocs.io/en/latest/</a> 。Splinter执行的时候会自动打开你指定的浏览器,访问指定的URL。然后你所开发的模拟的任何行为,都会自动完成,你只需要坐在电脑面前,像看电影一样看着屏幕上各种动作自动完成然后收集结果即可。</p> <p>了解原理:</p> <p>找到相应URL,找到控件模拟登录、查询、订票操作。关键是找到控件名称,难点是起始地不是直接输入的页面值,需要在cookie中查出。</p> <p>12306查询URL: https://kyfw.12306.cn/otn/leftTicket/init</p> <p>12306登录URL: https://kyfw.12306.cn/otn/login/init</p> <p>我的12306URL: https://kyfw.12306.cn/otn/index/initMy12306</p> <p>购票确认URL: https://kyfw.12306.cn/otn/confirmPassenger/initDc</p> <p>Python代码打开URL,找到控件填充值:</p> <pre> def login(self): self.driver.visit(self.login_url) # 填充用户名 self.driver.fill("loginUserDTO.user_name", self.username) # 填充密码 self.driver.fill("userDTO.password", self.passwd) print u"等待验证码,自行输入..."</pre> <p style="text-align:center"><img src="https://simg.open-open.com/show/fe6847638a0b5800289bc9089f6795cb.png"></p> <p>找到用户名密码控件名</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/108ed8655033cb312631dcdaddc20a47.png"></p> <p>找到起始地控件名</p> <p>确定起始地的值,方法Chrome浏览器中的“检查”功能(按F12),Network ---> Cookies中找到:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/93fe569933075eebafb49d4551a8d5ff.png"></p> <p>cookie中起始地的值</p> <p>拷贝起始地的cookie值,我把几个常用的城市拷出来,放到了字典中:</p> <pre> cities= {'成都':'%u6210%u90FD%2CCDW', '重庆':'%u91CD%u5E86%2CCQW', '北京':'%u5317%u4EAC%2CBJP', '广州':'%u5E7F%u5DDE%2CGZQ', '杭州':'%u676D%u5DDE%2CHZH', '宜昌':'%u5B9C%u660C%2CYCN', '郑州':'%u90D1%u5DDE%2CZZF', '深圳':'%u6DF1%u5733%2CSZQ', '西安':'%u897F%u5B89%2CXAY', '大连':'%u5927%u8FDE%2CDLT', '武汉':'%u6B66%u6C49%2CWHN', '上海':'%u4E0A%u6D77%2CSHH', '南京':'%u5357%u4EAC%2CNJH', '合肥':'%u5408%u80A5%2CHFH'}</pre> <p>查询车票代码:</p> <pre> print u"购票页面开始..." # 加载查询信息 self.driver.cookies.add({"_jc_save_fromStation": self.starts}) self.driver.cookies.add({"_jc_save_toStation": self.ends}) self.driver.cookies.add({"_jc_save_fromDate": self.dtime}) self.driver.find_by_text(u"查询").click()</pre> <p>其实,你只需要运行代码:</p> <pre> python tickets.py 上海 广州 2018-02-05</pre> <p>当然,还需要手动点一下的还是万恶的12306验证码,抢到票后确认支付就行啦。</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/d41949cd480a11f66ba14951dfca7769.png"></p> <p>抢票进行中</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/d41949cd480a11f66ba14951dfca7769.png"></p> <p>抢票成功!</p> <p> </p> <p>来自:http://www.cocoachina.com/programmer/20180110/21816.html</p> <p> </p>
本文由用户 shungdawei 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!