51Testing软件测试论坛
标题:
QTP版"12306订票助手"--支持刷票及自动预定
[打印本页]
作者:
mmsw450
时间:
2013-1-21 21:39
标题:
QTP版"12306订票助手"--支持刷票及自动预定
本帖最后由 mmsw450 于 2013-1-23 23:13 编辑
12306把订票助手封杀了,闲来无事用QTP写了个简单的刷票脚本。
登录以及设置始发、终点 、日期部分未做;
一是简单,二是没有做的必要!(因为订票时,可能随时修改始、终站及购票日期,由QTP来控制不合理)
目前已实现的功能:
0、至少5秒自动查询一次(可设定查询间隔)
1、支持车次白名单,
2、支持席位选择,目前支持“仅卧铺”或“仅座票”或“全部”,一旦设定席位有票根据白名单自动预定车次
3、支持自动选择订票人员(暂未做验证码识别,不能自动提交订单)
使用方法:
1、先打开QTP,后打开IE
2、登录帐号,设置好始发及终点站;出行日期。
3、修改NameList;WhiteList;FirstSelect三个变量
4、运行脚本即可
脚本下载地址:
[attach]83302[/attach]
同几个朋友交流后,把
登录
部分也发布出来:
1、 登录部分需要手动输入验证码;脚本自动检测,如果验证码长度=4位时,自动点击登录;
2、如果验证码错误,则自动输入密码,重复步骤1
[attach]83335[/attach]
PS:0
完全描述性编程,代码粘贴到QTP中即可使用。
1 仅个人娱乐之作,勿喷;欢迎指点。
测试交流群:288793120
2 在IE7 IE9 下测试通过
3 计划用JAVA+WebDriver重写
4 因为51论坛代码排版有点难看;删除代码部分。请下载后查看。
作者:
mmsw450
时间:
2013-1-22 09:31
51这排版好淡疼啊
cnblogs地址
http://www.cnblogs.com/zhm450/archive/2013/01/21/2870423.html
作者:
赵佳乐SMILE
时间:
2013-1-22 09:35
厉害啊
作者:
黑羽祭
时间:
2013-1-22 09:39
支持一下~
作者:
测试ing2012
时间:
2013-1-22 11:36
作者:
jhbaiyang
时间:
2013-1-22 14:12
听不错的,,用来学习qtp如何实现一个具体功能的很好的例子,
里面包含了数组的使用,引用function还有描述性编程,感谢楼主!!!
楼主用的uft11.5还是qtp11写的?
作者:
mmsw450
时间:
2013-1-22 14:41
回复
6#
jhbaiyang
在QTP 9.2 下写的;在11下测试通过。
本来登录以及选择始发、终点、日期等也作了自动化。但考虑到这几个值可能会不断变化,就把这些功能屏蔽掉了。
登录功能之所以屏蔽掉,是因为如登录都不成功,也没有接下来的刷票过程了。
之所以用描述性编程来写,想直接把代码粘上就能用,脱离对象库。
作者:
wjtest
时间:
2013-1-22 16:22
没用过QTP,支持下
作者:
fengshijie
时间:
2013-1-23 09:15
貌似很强啊,充分的学以致用了,支持
作者:
t_user
时间:
2013-1-23 09:18
呵呵 闲来没事居然就可以写个脚本耍,学习了
作者:
Nexi
时间:
2013-1-23 09:47
楼主,我想请教你个问题,你那个登录时的验证码怎么处理的呢
作者:
mmsw450
时间:
2013-1-23 10:08
回复
11#
Nexi
回复楼上:
登录部分我删除掉,没有上传。
验证码部分不好做,有人说用OCR,但OCR的识别率不敢恭维。
我的处理方式是,自动输入用户名及密码,然后循环检查验证码输入框,如果字符串长度=4时,则登录,登录成功后点击车票预定,然后自动输入始发及终点、日期等
后来考虑到某些因素,把这个给删除掉,没有上传。如果有需要的话,可以追加上去。
作者:
louqqson008
时间:
2013-1-23 11:18
本帖最后由 louqqson008 于 2013-1-23 11:19 编辑
非常厉害。至于验证码,可以先登录了,再执行这段QTP。不知道这样行不行
作者:
zb460989093
时间:
2013-1-23 11:47
膜拜
作者:
mmsw450
时间:
2013-1-23 12:04
回复
13#
louqqson008
就是先登录,再执行这段,在运行设置里, 设置为“Record and run test on any open browser”就可以了
作者:
junyjiang
时间:
2013-1-23 16:23
ocr识别的时候输入框=4时也不能确定他就是正确的验证码 啊?
作者:
mmsw450
时间:
2013-1-23 18:53
本帖最后由 mmsw450 于 2013-1-26 14:16 编辑
回复
16#
junyjiang
我并没有用OCR,如果OCR识别率不高反而不如不用!
阁下可看一下登录部分的代码 ;我写了很多注释,很容易理解。
PS:51 的代码排版太乱,无奈下重新整理了一遍登录的代码。也可从一楼下载。
[attach]83360[/attach]
作者:
zjuan2002
时间:
2013-1-26 14:48
顶一个
作者:
icu200934
时间:
2013-1-27 15:58
嗯,,好厉害,,支持
作者:
四季草堂
时间:
2013-1-28 11:40
楼主用的什么编程工具
作者:
mmsw450
时间:
2013-1-28 14:12
回复
20#
四季草堂
QTP自带的IDE为主,辅之以VBSEdit、NotePad++等;
推荐VBSEdit.蛮好用。
Notepad++ 用来格式化和阅读代码;很好使。
作者:
xajhuang
时间:
2013-1-28 17:26
楼主说的“输入始发,终点 及 日期;然后点击查询按钮;因为12306作了一点小手段,
'导致QTP自动输入后查不出来车次!此步骤建议手动输入!!”其实是可以自动化实现的:输入值之前先使“WebEdit”获得焦点,然后输入值,再模拟键盘{Enter}一下,即可查询了,代码如下:
Set wshShell = CreateObject("Wscript.Shell")
With Browser("micclass:=Browser").Page("micclass:=Page")
'点击“车票预定”链接
.Link("name:=车票预订","class:=text_yellow").Click
'输入始发,终点 及 日期;然后点击查询按钮;加了几个Hidden的input,根据输入的车站值自动变化)
.WebEdit("name:=orderRequest.from_station_name").Click 1,1
.WebEdit("name:=orderRequest.from_station_name").Object.classname="input_20txt"
.WebEdit("name:=orderRequest.from_station_name").Object.value= "杭州"
wshShell.SendKeys "{ENTER}"
.WebEdit("name:=orderRequest.to_station_name").Click 1,1
.WebEdit("name:=orderRequest.to_station_name").Object.classname="input_20txt"
.WebEdit("name:=orderRequest.to_station_name").Object.value= "上海"
wshShell.SendKeys "{ENTER}"
.WebEdit("name:=orderRequest.train_date").Object.value = "2013-2-13"
wshShell.SendKeys "{ENTER}"
.WebButton("class:=search_u").Click
End With
作者:
mmsw450
时间:
2013-1-28 21:19
回复
22#
xajhuang
感谢 xajhuang兄 提供的方法;坛子里果然藏龙卧虎。
我在之间曾试过,用QTP但无论输入值是什么,模拟回车时,都会变成“北京北”,如附图。
这让我略微郁闷了一把。所以才有附件代码中的注释。
不知道您那里为何能够正常,
希望能加阁下QQ,交流一二。我Q:85645204
手动输入的时候,是需要鼠标点一下悬浮提示站点,或者回车一下的。就会正常查询。
这时 ,它会把车站的站名和车站编号分别赋值给下面的FORM表单中。附图如下。
如果不执行回车过程,在FORM表单中,就没有这个编号值。查询的时候,结果也就为空。
[attach]83388[/attach]
[attach]83387[/attach]
作者:
xajhuang
时间:
2013-1-29 09:52
我也是QTP的学习者之一,正好自己也在用QTP写小助手订票。看到贵兄的帖子,想学习一下,才有了上述不成熟的建议,“藏龙卧虎”实在不敢当。
你说的那两种现象我都碰到了:1、直接赋值后查询,12306会提示“您选择的日期不在预售期内”;2、赋值后回车,出发地和目的地都是“北京北”。
后来参考了一下手工操作,发现要
在赋值之前使文本框获得焦点
,然后赋值,再回车,这样就可以查询了。不过这样做有个问题:回车后会默认选择下拉框的第一个值。比如出发地,输入“北京”,回车后,会把下拉框第一个值“北京北”赋值给“出发地”,虽然不影响最后的查询结果。但是这也终归是个问题,呵呵。
作者:
想你的美
时间:
2013-1-29 12:22
支持哈
作者:
xiaoshi_2011
时间:
2013-1-29 14:29
顶一个
作者:
xiaoyouer
时间:
2013-1-29 15:26
回复
1#
mmsw450
我对qtp只到了录制回放和简单设置参数级别,而且浏览器装了多个,要命的是装了360急速,所以ie一直不好用,现在又录制不了了。
作者:
泰然
时间:
2013-1-29 15:58
呵呵,我也来做一个,对象名称有调整.另外脚本从完成登录,点开车票预订界面后开始执行.解决了输入的问题
Dim strFrom, strTo, strDate
strFrom = inputBox("出发地")
strTo = inputBox("目的地")
strDate = inputBox("出发日期,格式如2013-01-01")
'strFrom = "上海"
'strTo = "北京"
'strDate = "2013-02-02"
Browser("12306").Page("NewOrder").Frame("main").WebEdit("FromCity").Set ""
Browser("12306").Page("NewOrder").Frame("main").WebEdit("FromCity").Click 1,1
Set oClp = CreateObject("Mercury.Clipboard")
oClp.Clear
oClp.SetText strFrom
Set oWsh = CreateObject("Wscript.shell")
oWsh.SendKeys "^v"
Set oCityList = Browser("12306").Page("NewOrder").Frame("main").Object.getElementById("panel_cities").ChildNodes
For i = 0 to oCityList.length -1
If oCityList(i).ChildNodes(0).innertext=strFrom then
For j = 0 to i-1
oWsh.SendKeys "{DOWN}"
Next
oWsh.SendKeys "{ENTER}"
Exit for
end if
Next
Set oCityList = Nothing
Browser("12306").Page("NewOrder").Frame("main").WebEdit("ToCity").Set ""
Browser("12306").Page("NewOrder").Frame("main").WebEdit("ToCity").Click 1,1
oClp.Clear
oClp.SetText strTo
oWsh.SendKeys "^v"
wait 1
Set oCityList = Browser("12306").Page("NewOrder").Frame("main").Object.getElementById("panel_cities").ChildNodes
For i = 0 to oCityList.length -1
print oCityList(i).ChildNodes(0).innerhtml
If oCityList(i).ChildNodes(0).innertext=strTo then
print i
For j = 0 to i-1
oWsh.SendKeys "{DOWN}"
Next
wait 1
oWsh.SendKeys "{ENTER}"
Exit for
end if
Next
Set oCityList = Nothing
Set oWsh = Nothing
Set oClp = Nothing
Browser("12306").Page("NewOrder").Frame("main").WebEdit("TrainDate").Object.innerText = strDate
Browser("12306").Page("NewOrder").Frame("main").WebButton("Select").Click
复制代码
作者:
liurenhui
时间:
2013-1-29 17:19
学以致用,,哈哈哈
作者:
104509426
时间:
2013-1-29 21:09
楼上全是高手,能否请教如何提交订单呢,提交订单前必须要输入验证码?那些抢票软件是如何做到啊,求解啊
作者:
mmsw450
时间:
2013-1-30 09:19
回复
28#
泰然
泰然兄居然利用了剪贴版;呵呵;有想法。
呆会试试你这部分代码。
作者:
mmsw450
时间:
2013-1-30 10:16
回复
27#
xiaoyouer
QTP是利用BHOmanager插件驱动IE的、建议你把防火墙、杀软、助手啊,一些不常用IE插件都关闭或停用。
作者:
coolwind09
时间:
2013-1-30 14:24
绝对是人才。百分之百的是人才啊···
复制代码
作者:
hnhellen
时间:
2013-1-30 17:45
楼主学以致用,受教了
作者:
hnhellen
时间:
2013-1-30 17:46
不过我用QTP 到入不了文件 我用的是QTP 9.2 不知道是不是版本问题?
作者:
黑羽祭
时间:
2013-2-1 09:32
有点意思啊~
作者:
pl80601983
时间:
2013-2-1 09:38
学习与时俱进,真好.
作者:
seven_1987
时间:
2013-2-1 09:55
牛逼人物!
作者:
mmsw450
时间:
2013-2-1 10:26
回复
36#
黑羽祭
谢 黑羽祭 彭Sir 两位版主捧场指导。
作者:
咖啡猫来啦
时间:
2013-2-2 13:43
来学习一下
作者:
netTong
时间:
2013-2-2 19:53
Mark
作者:
helenhuoyy
时间:
2013-2-4 13:11
楼主学以致用,学习了。
作者:
yxd2006
时间:
2013-2-4 15:27
谢谢楼主分享
作者:
hm_51testing
时间:
2013-3-4 16:40
很强大啊,学习学习,非常感谢楼主。。。早知道看这个帖子,订火车票时就不用愁了。。。
作者:
lijingprince5
时间:
2013-3-5 11:24
楼主是怎么绕过验证码的呢?
作者:
o0o0123
时间:
2013-3-9 23:20
这个必须顶!!!!!
作者:
o0o0123
时间:
2013-3-9 23:20
这个必须顶啊!!!
作者:
o0o0123
时间:
2013-3-9 23:20
这个必须要定一个!!
作者:
ykp_111
时间:
2014-5-14 16:12
QTP菜鸟,楼主的这个代码我执行不了,为什么,是不是需要配置什么哦。
作者:
auto_tester
时间:
2014-5-15 09:24
学习了!
作者:
757563246
时间:
2015-11-29 22:18
支持下
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2