zoukankan      html  css  js  c++  java
  • 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:转载注明出处

  • 相关阅读:
    PAT 甲级 1027 Colors in Mars
    PAT 甲级 1026 Table Tennis(模拟)
    PAT 甲级 1025 PAT Ranking
    PAT 甲级 1024 Palindromic Number
    PAT 甲级 1023 Have Fun with Numbers
    PAT 甲级 1021 Deepest Root (并查集,树的遍历)
    Java实现 蓝桥杯VIP 算法训练 无权最长链
    Java实现 蓝桥杯VIP 算法训练 无权最长链
    Java实现 蓝桥杯 算法提高 抽卡游戏
    Java实现 蓝桥杯 算法提高 抽卡游戏
  • 原文地址:https://www.cnblogs.com/zhm450/p/2870423.html
Copyright © 2011-2022 走看看