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

  • 相关阅读:
    电商搜索“随便逛逛,想知道大家都在搜什么?现在什么最热门?”
    最佳实践:使用阿里云CDN加速OSS访问
    Arthas 初探安装初步适用
    分布式锁在存储系统中的技术实践
    Flink 源码 | 自定义 Format 消费 Maxwell CDC 数据
    云原生时代 RocketMQ 运维管控的利器 RocketMQ Operator
    SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可监控)
    文件系统04 零基础入门学习Delphi37
    文件系统03 零基础入门学习Delphi36
    鱼油账号记录程序 零基础入门学习Delphi38
  • 原文地址:https://www.cnblogs.com/zhm450/p/2870423.html
Copyright © 2011-2022 走看看