ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: liucqa

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

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-1-18 00:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:网页交互
本帖最后由 liucqa 于 2012-1-18 01:00 编辑

我大约知道为什么WB在IE9下面不能查询了
错误位置.JPG

网页代码似乎有问题,在ie9的WB下面 订票张数始终为undefined张

说明代码不太兼容wb,在IE9页面下没有这个问题,不知道是哪里的差错

点评

没有用过IE9,有空我也下载个试看看,会不会有你的问题。。。  发表于 2012-1-18 10:00

TA的精华主题

TA的得分主题

发表于 2012-1-18 09:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liucqa 发表于 2012-1-18 00:59
我大约知道为什么WB在IE9下面不能查询了

在公司测试了下,公司这里是IE7
首先,关于网页的验证码错误阿,登录的人太多啦,这些提示,不需要模拟点击,它其实是个ALERT,用
  1. pDisp.Document.parentWindow.execScript "window.alert=null;"
复制代码
就可以关闭了。

其次,注销的时候也没有出现脚本错误的提示,查询的时候也一切正常,我想,会不会是你的IE的设置或者一些安全软件,是不是限制了你IE脚本执行导致的错误

再次NavigateComplete2里面留上面那句话就可以,可以避免什么调试器的错误警告。
  1. Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
  2. pDisp.Document.parentWindow.execScript "window.alert=null;"

  3. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-1-18 12:14 | 显示全部楼层
12306 submit提交-推荐IE8.rar (81.85 KB, 下载次数: 98)

更新1月18日版,增加WB状态的调试信息。

问题出来:为什么用submit提交表单,WebBrowser1.ReadyState和WebBrowser1.Busy两个状态不正确呢?
前者大部分时候都是直接就=4,后者要等一小会才变成True,不是实时的。导致我的计时器屡屡判断错误

临时解决只好加上计时器超时判定。

反正这个程序基本能用了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-1-18 12:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 liucqa 于 2012-1-18 12:22 编辑
xmyjk 发表于 2012-1-18 09:36
在公司测试了下,公司这里是IE7
首先,关于网页的验证码错误阿,登录的人太多啦,这些提示,不需要模拟点 ...

我靠计时器的窗口检查来判断是不是需要重新提交submit,所以不能直接屏蔽这类信息。昨天有JS脚本报错的时候,试过如下语句
        'pDisp.Document.parentWindow.execScript "window.open = null;", "javaScript"
        'pDisp.Document.parentWindow.execScript "window.alert = null;", "javaScript"
        'pDisp.Document.parentWindow.execScript "window.confirm = null;", "javaScript"
        'pDisp.Document.parentWindow.execScript "window.showModalDialog = null;", "javaScript"
都不管用。

原本是希望能够屏蔽JS脚本错误,不过今天运行程序居然网页没有脚本错误的提示了,也许12306今天吃药了

只是submit提交的.ReadyState和.Busy结束标志很不准确,你还有别的什么方法吗?

点评

脚本错误那个是没办法用你上面哪些关闭的,脚本错误本来就是IE的系统提示,是不能靠脚本来关闭的。  发表于 2012-1-18 12:35
submit提交后的页面靠ReadyState基本没戏,只能靠URL变化后的页面的加载完毕,或者INNERTEXT变化才行  发表于 2012-1-18 12:23

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-1-18 12:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我C,看来只有用计时器和INNERTEXT了,我在程序里面就是这么对付的。

大虾有空研究一下POST方法吧,这个方法结束判断是准的

点评

POST是一般是准的,不过就怕POST有时候会跳过一些页面转向或者一些辅助页面的加载,导致页面一些加载失败,后续操作很有可能就会报错。就例如微博那个网站,靠输入和点击还会触发很多脚本下载,靠POST就肯定不行  发表于 2012-1-18 12:38

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-1-18 14:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
俺的程序终于发挥功效了,在用IE人工登录12306网站忙活5分钟不果之后,换程序1分钟登录成功,在IE8的WB里面完全可以查询、下单、支付,一切正常。

点评

搞定就好,恭喜哈。  发表于 2012-1-18 15:09

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-1-18 15:17 | 显示全部楼层
按F12快捷键调出IE开发者工具栏 >>> Script(脚本)选项卡 >>> 复制如下图代码到内容文本框中 >>>  点击 Run Script(运行脚本) 按钮

            var page = "https://dynamic.12306.cn/otsweb/loginAction.do?method=init";
            var url = "https://dynamic.12306.cn/otsweb/loginAction.do?method=login";
            var queryurl = "https://dynamic.12306.cn/otsweb/order/querySingleAction.do?method=init";

            function submitForm() {
                var _ifrMain = document.getElementById('main');
                var userName = _ifrMain.contentWindow.document.getElementById('UserName');
                var password = _ifrMain.contentWindow.document.getElementById('password');
                var randCode = _ifrMain.contentWindow.document.getElementById('randCode');

                var subLink = _ifrMain.contentWindow.document.getElementById('subLink');

                var submitUrl = url;
                $.ajax({
                    type: "POST",
                    url: submitUrl,
                    data: {
                        "loginUser.user_name": userName.value
                      , "user.password": password.value
                      , "randCode": randCode.value
                    },
                    timeout: 30000,
                    success: function (msg) {
                        if (msg.indexOf('请输入正确的验证码') > -1) {
                            alert('请输入正确的验证码!');
                        };
                        if (msg.indexOf('当前访问用户过多') > -1) {
                            reLogin(msg);
                        }
                        else {
                            location.replace(queryurl);
                        };
                    },
                    error: function (msg) {
                        reLogin(msg);
                    },
                    beforeSend: function (XHR) {
                        ;
                    }
                });
            }

            var count = 1;
            function reLogin(msg) {
                count++;
                subLink.innerHTML = "(" + count + ")次登录中..." + msg;
                setTimeout(submitForm, 500);
            }

            submitForm();

用IE的脚本登录  http://www.cnblogs.com/cnshangsha/archive/2012/01/12/12306cnautologin.html

点评

确实还是直接在页面植入脚本方便。  发表于 2012-1-18 18:15

TA的精华主题

TA的得分主题

发表于 2012-1-18 15:20 | 显示全部楼层
vba如何捕获页面IE对象弹出的消息窗口?(不是屏蔽)?趁热打铁追问到

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-1-18 15:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
eyeshot 发表于 2012-1-18 15:20
vba如何捕获页面IE对象弹出的消息窗口?(不是屏蔽)?趁热打铁追问到

看代码,VBA捕获窗口很容易,用API就可以

TA的精华主题

TA的得分主题

发表于 2012-1-18 16:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 eyeshot 于 2012-1-18 16:02 编辑

那个closeMSG模块。。。?

点评

对  发表于 2012-1-18 16:03
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-24 06:35 , Processed in 0.033216 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表