QTP版"12306订票助手"
12306把订票助手封杀了,闲来无事用QTP写了个简单的刷票脚本。
登录以及设置始发、终点 、日期部分未做;一是简单,二是没有做的必要!(因为订票时,可能随时修改始、终站及购票日期,由QTP来控制不合理)
目前已实现的功能:
0、至少5秒自动查询一次(可设定查询间隔)
1、支持车次白名单,
2、支持席位选择,目前支持“仅卧铺”或“仅座票”或“全部”,一旦设定席位有票根据白名单自动预定车次
3、支持自动选择订票人员(暂未做验证码识别,不能自动提交订单)
使用方法:
1、先打开QTP,粘帖代码到IDE中,而后打开IE
2、登录帐号,设置好始发及终点站;出行日期。
3、修改NameList;WhiteList;FirstSelect三个变量
4、运行脚本即可
PS:
0 完全描述性编程,代码粘贴到QTP中即可使用。
1 仅个人娱乐之作,勿喷;欢迎指点。 测试交流群:288793120
2 在IE7 IE9,QTP9.2 QTP11 下测试通过
3 计划用JAVA+WebDriver重写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | '********************************** 'Written by @以轩-之名 'Date : 2013年1月21日 '仅供娱乐和学习使用 'QQ:85645204 '请提前登录,设置好始发及终点站;出行日期。 '修改NameList;WhiteList;FirstSelect三个变量 '********************************** Dim CheCi,i,j,WhiteList,NameList '白名单;即想要预定的车次名单;车次之间以“,”隔开 WhiteList = "K110,T119,G315,D120,SB12306" NameList= "张三,李四" '订票人员名单 Dim hasTickt '标记是否已找到有票的车次 hasTickt = False Dim FirstSelect '定义卧铺优先还是座票优先 值只能为 "卧铺"或"座票"或"全部" FirstSelect = "卧铺" Dim RowCountofTable '临时变量,保存当前车次及查询结果数 myArr = Split(WhiteList, "," ) nameArr = Split(NameList, "," ) Dim waitTime '查询间隔,至少为5秒;(12306规定每次间隔不低于5秒) waitTime = 5 '检查是否是查到票,没有则循环刷新 While not hasTickt Browser( "micclass:=Browser" ).Page( "micclass:=Page" ).WebButton( "class:=search_u" ).Click For i=0 To Ubound(myArr) CheCi = myArr(i) RowCountofTable = Browser( "micclass:=Browser" ).Page( "micclass:=Page" ).webTable( "class:=obj row20px" ).RowCount For j = 2 to RowCountofTable '检查每一行车次名与白名单中车次是否一致,一致则检查对应车次的车票情况 If Browser( "micclass:=Browser" ).Page( "micclass:=Page" ).webTable( "class:=obj row20px" ).ChildItem(j,1, "WebElement" ,0).GetROProperty( "outertext" )=CheCi Then '检查该车次是否有卧铺或硬座或全部 If CheckTickt (j,FirstSelect) Then hasTickt = true Exit for End If End If Next '如果有票,则执行订票过程 If hasTickt Then BookTickts(j) Exit For End If Wait waitTime Next Wend '根据名单列表选择相应的购票人员 For i = 0 to UBound(NameArr) If Browser( "micclass:=Browser" ).Page( "micclass:=Page" ).WebCheckBox( "html id:=" &NameArr(i) & ".*" ).Exist(1) Then Browser( "micclass:=Browser" ).Page( "micclass:=Page" ).WebCheckBox( "html id:=" &NameArr(i) & ".*" ). Set "on" End If Next Function CheckTickt(i , XiWei) With Browser( "micclass:=Browser" ).Page( "micclass:=Page" ).webTable( "class:=obj row20px" ) YingWo = .GetCellData(i,11) RuanWo = .GetCellData(i,10) GaoRuan = .GetCellData(i,9) ShangWuZuo = .GetCellData(i,5) TeDengZuo = .GetCellData(i,6) YiDengZuo = .GetCellData(i,7) ErDengZuo = .GetCellData(i,8) RuanZuo = .GetCellData(i,12) YingZuo = .GetCellData(i,13) WuZuo = .GetCellData(i,14) End with If XiWei= "卧铺" then '检查所有卧铺票是否有票(包括软卧及高软) If (NOT YingWo = "--" AND not YingWo = "无" AND not YingWo= "*" ) OR _ ( NOT RuanWo = "--" AND not RuanWo = "无" AND not RuanWo= "*" ) OR _ (NOT GaoRuan = "--" AND not GaoRuan = "无" AND not GaoRuan= "*" ) Then CheckTickt = True Exit Function End If ElseIF XiWei= "座票" Then '检查所有座票是否有座(包括站票) If (NOT ShangWuZuo = "--" AND not ShangWuZuo = "无" AND not ShangWuZuo= "*" ) OR _ ( NOT TeDengZuo = "--" AND not TeDengZuo = "无" AND not TeDengZuo= "*" ) OR _ (NOT YiDengZuo = "--" AND not YiDengZuo = "无" AND not YiDengZuo= "*" ) _ OR (NOT ErDengZuo = "--" AND not ErDengZuo = "无" AND not ErDengZuo= "*" ) OR _ (NOT RuanZuo = "--" AND not RuanZuo = "无" AND not RuanZuo= "*" )OR _ (NOT YingZuo = "--" AND not YingZuo = "无" AND not YingZuo= "*" )OR _ (NOT WuZuo = "--" AND not WuZuo = "无" AND not WuZuo= "*" ) Then CheckTickt = True Exit Function End If ElseIF XiWei= "全部" then '检查按钮是否为灰色不可用,如果是,则无票;否则为有票。 If not Browser( "micclass:=Browser" ).Page( "micclass:=Page" ).webTable( "class:=obj row20px" ).ChildItem(i,16, "WebElement" ,0).GetRoProperty( "class" )= "btn130" then 'msgbox "有票:" &i CheckTickt = True End if ' class btn130 end if End Function Function BookTickts(j) '点击对应车次后的“预定”按钮 Browser( "micclass:=Browser" ).Page( "micclass:=Page" ).webTable( "class:=obj row20px" ).ChildItem(j,16, "WebElement" ,0).click End Function |
PS:转载注明出处
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步