ExcelHome技术论坛

 找回密码
 免费注册
QQ登录 只需一步,快速开始
   
高效办公必会的Office99uu优优 永久免费,网表让Excel秒变数据库 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! 国内首部Excel函数公式学习大典 职场充电黑科技, Office微99uu优优 免费下载Excel行业应用视频
300集Office 2010微99uu优优 Tableau-数据可视化工具 突破Excel限制,用活字格提高效率 12门Excel免费公开课任你学
你的Excel 201099uu优优学习锦囊 欲罢不能, 过目难忘的 Office 新界面 免费的Excel考勤计算系统
查看: 41553|回复: 135
打印 上一主题 下一主题

WebBrowser控件登录12306订票小助手--抓验证码图片、API关闭弹窗,更新0.53版

  [复制链接]
TA的精华主题TA的得分主题
跳转到指定楼层
1
发表于 2012-1-10 10:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖已被收录到知识树中,索引项:网页交互
本帖最后由 liucqa 于 2012-11-28 01:27 编辑

WebBrowser帮助 MSDN
http://msdn.microsoft.com/en-us/library/aa752085%28v=VS.85%29.aspx


用C#做的识别验证码图片的演示(双字库)。



从实践来看,识别验证码还是通过C#之类的高级语言比较方便,VBA不适合做这种复杂的图像处理。



************************************保留的原来信息,基本已经无用,请直接看103楼**********************************************

终于可以登录12306了

12306登录演示.rar (34.11 KB, 下载次数: 449)

采用WebBrowser控件,登录之后还有个问题,不能直接进入网站页面,还回到登录页面,需要自己点击我的12306,不知道为什么?
难道Webrowser的Post有什么问题吗?  另外谁知道怎么得到网页弹出来的消息?
请高手看看。也许是没在网页上填写用户名和密码的问题

看2楼和3楼的Script
可能是因为我的WebBrowser不知什么原因造成3楼的红色代码不能执行。

************************1月15日*********************************

新版改了一点代码,毛病依旧。测试发现即使我不用WebBrowser Post登录,手工点登录进去,到查询页面依然无法查询,用IE没问题。
12306登录演示new.rar (39.52 KB, 下载次数: 341)

我有几个问题请高手研究一下
1、如何用WebBrowser取得登录页面loginForm表单里面的用户名、密码、验证码。(已解决)
2、为什么Post之后验证是成功的,但页面不进入我的12306页面,还要自己点击呢。(即使用WB点击我的12306link也直接回到登录页面)
3、为什么用WB打开12306页面之后,即使人工操作登录进去,还是不能查询车票呢?这个就和我的程序无关了,纯粹是网站和WB之间的问题!

还有一个终极问题,WB如何捕获页面弹出的消息窗口?(不是屏蔽)。传说用IDocHostShowUI接口实现,谁知道VBA下咋弄?难道要换扩展WB控件才行吗?

*************************1月17日**********************************

临时先搞一个用计时器关闭页面弹出消息的版本
12306登录演示-计时器API版.rar (71.57 KB, 下载次数: 322)
这个版本可以关闭安全证书的警报窗口和IE的内容不安全的警告窗口,但是不能关闭JS的脚本错误窗口(计时器收不到)
明天准备在页面执行中加入JS脚本来屏蔽错误信息试试效果。

计时器源代码来自http://club.excelhome.net/thread-488569-1-1.html
一开始用http://club.excelhome.net/forum.php?mod=viewthread&tid=783286这个计时器类模块,结果发现IE出现警告窗口之后,计时器就收不到了,估计和VBA单线程有关。前一个计时器好歹在这个窗口能接收到,但是在JS脚本错误时,还是收不到了。

最新submit提交表单的版本在63楼

*************************1月20日**********************************
1月20日版正式出炉,更新如下:
1、支持获得验证码图片,哪个牛人给弄个OCR识别?
2、验证码输入4位自动登录
3、页面状态的监测更加完善(可以识别用户名、密码、验证码各种错误提示。在一些特定操作下,计时器偶尔会提前终止,务请淡定)
4、隐藏EXcel界面。

新版在103楼,注意只有安装IE8(或以下版本,未测试)的机器才能在登录之后查询车票及提交订单。
IE9 的WB只能登录,不能查询。

本程序只能登录,后继订票请自行操作。

评分

参与人数 1鲜花 +2 收起 理由
awnuwfkd + 2 优秀作品
查看全部评分
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏37 分享分享 有用有用1 无用无用
TA的精华主题TA的得分主题
2
 楼主| 发表于 2012-1-10 10:20 | 只看该作者 |楼主
本帖最后由 liucqa 于 2012-8-24 10:56 编辑

利用IDocHostUIHandler接口屏蔽WebBrowser的弹出菜单

简单说两句:大致就是实现IDocHostUIHandler接口,挂接IDocHostUIHandler接口可以利用ICustomDoc接口或IOleObject接口实现,这里演示了利用ICustomDoc

接口进行挂接。由于只是想屏蔽webbroswer的弹出菜单,所以只在IDocHostUIHandler的ShowContextMenu方法上做点文章就够了,IDocHostUIHandler的其它的方法不必

进行处理,但是你必须实现它们,哪怕你只写上一些注释,好了,下面看代码:
'窗体上一个按钮,一个tetbox,一个checkbox,一个WebBrowser
'这里我依旧引用Edanmo's OLE interfaces & functions v1.81(对应文件olelib.tlb)
Option Explicit
Implements IDocHostUIHandler
Dim mshow As Boolean
Dim mICustomDoc As ICustomDoc

Private Sub Check1_Click()
    mshow = Check1.Value
End Sub

Private Sub Command1_Click()
    Me.WebBrowser1.Navigate Text1.Text
End Sub

Private Sub Form_Load()
    Me.WebBrowser1.Navigate "about:blank"
End Sub

Private Sub IDocHostUIHandler_EnableModeless(ByVal fEnable As olelib.BOOL)
    IDocHostUIHandler.EnableModeless fEnable
End Sub

Private Function IDocHostUIHandler_FilterDataObject(ByVal pDO As olelib.IDataObject) As olelib.IDataObject
    Set IDocHostUIHandler_FilterDataObject = IDocHostUIHandler.FilterDataObject(pDO)
End Function

Private Function IDocHostUIHandler_GetDropTarget(ByVal pDropTarget As olelib.IDropTarget) As olelib.IDropTarget
    Set IDocHostUIHandler_GetDropTarget = IDocHostUIHandler.GetDropTarget(pDropTarget)
End Function

Private Function IDocHostUIHandler_GetExternal() As Object
    Set IDocHostUIHandler_GetExternal = IDocHostUIHandler.GetExternal
End Function

Private Sub IDocHostUIHandler_GetHostInfo(pInfo As olelib.DOCHOSTUIINFO)
     IDocHostUIHandler.GetHostInfo pInfo
End Sub

Private Sub IDocHostUIHandler_GetOptionKeyPath(pOLESTRchKey As Long, ByVal dw As Long)
    IDocHostUIHandler.GetOptionKeyPath pOLESTRchKey, dw
End Sub

Private Sub IDocHostUIHandler_HideUI()
    IDocHostUIHandler.HideUI
End Sub

Private Sub IDocHostUIHandler_OnDocWindowActivate(ByVal fActivate As olelib.BOOL)
     IDocHostUIHandler.OnDocWindowActivate fActivate
End Sub

Private Sub IDocHostUIHandler_OnFrameWindowActivate(ByVal fActivate As olelib.BOOL)
    IDocHostUIHandler.OnFrameWindowActivate fActivate
End Sub

Private Sub IDocHostUIHandler_ResizeBorder(prcBorder As olelib.RECT, ByVal pUIWindow As olelib.IOleInPlaceUIWindow, ByVal fRameWindow As

olelib.BOOL)
    IDocHostUIHandler.ResizeBorder prcBorder, pUIWindow, fRameWindow
End Sub

Private Sub IDocHostUIHandler_ShowContextMenu(ByVal dwContext As olelib.ContextMenuTarget, pPOINT As olelib.POINT, ByVal pCommandTarget As

olelib.IOleCommandTarget, ByVal HTMLTagElement As Object)
    If mshow = True Then
        IDocHostUIHandler.ShowContextMenu dwContext, pPOINT, pCommandTarget, HTMLTagElement
    End If
End Sub

Private Sub IDocHostUIHandler_ShowUI(ByVal dwID As Long, ByVal pActiveObject As olelib.IOleInPlaceActiveObject, ByVal pCommandTarget As

olelib.IOleCommandTarget, ByVal pFrame As olelib.IOleInPlaceFrame, ByVal pDoc As olelib.IOleInPlaceUIWindow)
    IDocHostUIHandler.ShowUI dwID, pActiveObject, pCommandTarget, pFrame, pDoc
End Sub

Private Sub IDocHostUIHandler_TranslateAccelerator(lpmsg As olelib.MSG, pguidCmdGroup As olelib.UUID, ByVal nCmdID As Long)
    IDocHostUIHandler.TranslateAccelerator lpmsg, pguidCmdGroup, nCmdID
End Sub

Private Function IDocHostUIHandler_TranslateUrl(ByVal dwTranslate As Long, ByVal pchURLIn As Long) As Long
    IDocHostUIHandler_TranslateUrl = IDocHostUIHandler.TranslateUrl(dwTranslate, pchURLIn)
End Function

Private Sub IDocHostUIHandler_UpdateUI()
    IDocHostUIHandler.UpdateUI
End Sub

Private Sub WebBrowser1_DownloadComplete()
    Set mICustomDoc = Me.WebBrowser1.Document
    mICustomDoc.SetUIHandler Me
End Sub

        最后,需要说明的是,这个程序可能有一些问题,以至于在vb的IDE中它不能很好的工作(至于是什么原因,现在没时间研究了,以后再说吧,有知道的,欢迎

你告诉我),不过,编译成exe文件后,它还是可以实现我们的目的的。
TA的精华主题TA的得分主题
3
 楼主| 发表于 2012-1-10 11:21 | 只看该作者 |楼主
本帖最后由 liucqa 于 2012-1-16 12:15 编辑

https://dynamic.12306.cn/otsweb/main.jsp  这个页面的Script


<script>
    $(function(){
        //if(!$.browser.msie){
        //    alert("非常抱歉,系统目前暂不支持您的浏览器!");
        //}
     $('.menu_left ul li[name="horverLi"]').hover(
        function(){
           $(this).find('p').stop(true,true).show();
        },function(){
     $(this).find('p').stop(true,true).hide();
          });
    });
        
         $("#menu_w a").bind("click",function(){
             $("#menu_w a").attr("class","n_out");
             $(this).attr("class","n_on");
          });
         function hideMenu(){
             $("#menu_w").hide();
             doIframe() ;
         }
         function showMenu(){
             $("#menu_w").show();
             doIframe() ;
         }
         function clickMenu(title){
             $("#menu_w a").each(function(){
                if($(this).find("cite").length>0){
                 if($(this).find("cite")[0].innerHTML == title){
                     $(this).click();
                  }
                }
             });
         }

         function hasLogin(_name)
         {
             $("#username_ a").attr("href","/otsweb/sysuser/user_info.jsp");
             $("#username_ a > cite").html(_name);
             $("#login_out a").attr("href","/otsweb/loginAction.do?method=logout");
             $("#login_out a > cite").html("退出");
         }

       //退出登录
         function notLogin(){
             $("#username_ a").attr("href","/otsweb/registAction.do?method=regitNote");
             $("#username_ a > cite").html("注册");
              $("#login_out a").attr("href","/otsweb/loginAction.do?method=init");
             $("#login_out a > cite").html("登录");
         }
         
          $(document).ready(function(){
             var iframeForwardUrl = "";
               if (iframeForwardUrl != ""){
                   $("#main")[0].src=iframeForwardUrl;
                   if(iframeForwardUrl == "http://dynamic.12306.cn/TrainQuery/leftTicketByStation.jsp"){
                       clickMenu('余票查询');
                      }else if(iframeForwardUrl == "http://dynamic.12306.cn/TrainQuery/trainPassStationByTrainCode.jsp"){
                          clickMenu('列车时刻表查询');
                         }else if(iframeForwardUrl == "http://dynamic.12306.cn/TrainQuery/ticketPriceByStation.jsp"){
                          clickMenu('列车时刻表查询');
                         }else if(iframeForwardUrl == "http://dynamic.12306.cn/TrainQuery/sellTicketStation.jsp"){
                             clickMenu('客票代售点');
                         }else if(iframeForwardUrl == "http://dynamic.12306.cn/map_zwdcx/CCCX.jsp"){
                             clickMenu('正晚点查询');
                         }
                        
               }else{
                   $("#main")[0].src="/otsweb/loginAction.do?method=init";
               }
          });
    </script>
TA的精华主题TA的得分主题
4
 楼主| 发表于 2012-1-10 14:08 | 只看该作者 |楼主
TA的精华主题TA的得分主题
5
 楼主| 发表于 2012-1-10 16:34 | 只看该作者 |楼主
TA的精华主题TA的得分主题
6
 楼主| 发表于 2012-1-10 22:41 | 只看该作者 |楼主
TA的精华主题TA的得分主题
7
 楼主| 发表于 2012-1-10 23:34 | 只看该作者 |楼主
TA的精华主题TA的得分主题
8
 楼主| 发表于 2012-1-11 00:14 | 只看该作者 |楼主
TA的精华主题TA的得分主题
9
发表于 2012-1-11 08:20 | 只看该作者
TA的精华主题TA的得分主题
10
发表于 2012-1-11 09:29 | 只看该作者
您需要登录后才可以回帖 登录 | 免费注册
本版积分规则
关闭

最新热点上一条 /1 下一条

关注官方微信,每天坐享新鲜教程
手机版|关于我们|联系我们|ExcelHome    GMT+8, 2018-1-18 19:40 , Processed in 0.089458 second(s), 13 queries , Gzip On, MemCache On.
Powered by Discuz! X3.3 © 2001-2017 Wooffice Inc.
    沪公网安备 31011702000001号 沪ICP备11019229号 本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师
快速回复 返回顶部 返回列表
99uu优优