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重写

 

'**********************************
'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:转载注明出处

posted on 2013-01-21 21:38  @以轩-之名  阅读(1450)  评论(0编辑  收藏  举报