关于12306对订票过程的处理的讨论 返回讨论区:开发者讨论
请注意,这里仅供讨论与“12306订票助手”相关的问题和建议,请勿在此发表不相关的内容。
您当前尚未登录,将会以游客身份浏览。建议您登录后再进行操作。请点击 登录注册
关于12306对订票过程的处理的讨论
傲游Fast12306插件开发者 ,2013/8/9 0:46:13
木鱼,你好。
最近我自己为傲游4浏览器写了一个订票插件,只有50多行(你在git上托管的有几千行,太宏伟了,先膜拜一下你),仅作为个人订设定好的车次之用,所以很简捷,不过不能广谱应用。
插件的处理流程大致如下:登录后,自动输入发站、到站的文本和hidden属性的telecode以及日期,js模拟click事件,自动点查询并自动点订票,进入订票后填写订票人信息,并给验证码焦点,验证码长度达到4之后自动模拟点击提交订单按钮,弹出信息确认后自动点确定按钮。
未来我还想尝试开发的功能是利用canvas的图像处理识别验证码#rand。
和你的插件的区别是,你是直接GET和POST,我是模拟点击按钮。
但在测试过程中发现一些问题,况且我对12306的脚本没你分析的透彻,只是粗略看了下,想向你请教请教。
0. 常用联系人那里,打完勾会自动补全下面表中信息,GET traceAction.do返回的信息似乎为空,在不使用jQ的情况下如何很好地模拟打勾操作呢?我目前都是联系人名字前面的checkbox的checked直接改为true,但貌似这样下面的信息没补全,继续直接操作input和select的value值,然后提交,这里如何改进好?当然我不太想用jQuery。
1. 一开始是网站提示“出票失败”,errMsg是“不能重复提交订单”,后来我改了一下插件的代码错误提示就变成alert(网络可能存在问题)或者是点完确定按钮后出票失败,errMsg是“网络可能存在问题,请重试!(POST confirmPassengerAction.do?method=confirmSingleForQueue返回的)”。(当然这个时候失败后再手工提交一次就会成功啦) 你觉得这个问题可能出在哪些环节?自动点按钮太快了么?
我分析了一下,我的脚本和人工处理的GET和POST后得到的json的区别如下:
提交订单操作里面:
【人工操作】GET /otsweb/order/confirmPassengerAction.do?method=getQueueCount后面略了,返回{"countT":0,"count":0,"ticket":"1*****30504*****00001*****00503*****0027","op_1":false,"op_2":false};
【我的插件操作】自动点按钮返回的count值是6,op_1:是true,貌似对于op_1的情况,12306的js里面注释掉了,也就是和false处理方式一样,不区别。这里json的各项都是什么意思,尤其是count,后来还返回过13。(GET confirmPassengerAction.do?method=getQueueCount&……返回的)至于收到的{"checkHuimd":"Y","check608":"Y","msg":"","errMsg":"Y"},Huimd大概是灰名单的意思吧,check608还像是一日一车一票吧,errMsg还是一样的。这个应该问题不大吧。
另外在你开发过程中,觉得那几个环节容易出错,也欢迎说一下,以防我犯类似的错误。
回复
傲游Fast12306插件开发者 ,2013/8/9 0:50:39
对了,在queue里面排队计时这一块我觉得是不是模拟点击就不用考虑这些了?觉得用不用考虑,直接indexOf到各步骤的按钮出现就点合不合适?
回复
木魚(iFish) ,2013/8/9 1:25:15

您好。

首先是你说的那么长一段,其实我对你说的工作流程看得不是很明白。

在12306中,提交页面的常见联系人是异步加载的,也就是说进入提交页面并没有联系人,联系人列表是在这页面加载之后通过ajax来加载的。

另外就是提交时候的莫名其妙的错误,对于模拟点击而并非自己拼凑数据提交的话,最有可能的问题就是提交过快。在这中间的几个提交中,分别需要一定的间隔时间,从进入提交页到确认可以继续购票需要至少5秒,确认购票到排队确认目前不需要停顿,确认排队到最后提交需要至少1秒,否则会有各种异常错误。

回复
傲游Fast12306插件开发者 ,2013/8/9 14:33:37

谢谢,我在模拟点击的时候把对页面元素进行检测的时间间隔从0.3秒改到了1.5秒,现在可以订票成功了。

如果12306对时间间隔有这么高的要求,那么验证码自动识别的意义就不大了,我原来还打算做一下验证识别呢。。

回复
木魚(iFish) ,2013/8/9 15:22:31
自动识别验证码对于那些用后台程序大量值守抢票的人还是管用的、甚至是必须的。所以我一直在期待他们改进验证码。
5条信息/每页10
编辑器
回复
验证码
点击验证码框获得验证码。因为有人发广告,很抱歉必须使用验证码。登录后免输验证码