VB webbrowser 控件的应用(跨域 内嵌网页元素的访问)
自动登录财付通,难点在于会出现验证码,并且验证码页是在iframe元素下的,出于各种安全考虑,webbrowser控件不提供这种访问机制!当然,第一想到的是将这个网页拿出来,可是输入完毕验证码后,点击“确定”需要与原网页交互,而此时已经脱离原网页,所以不能实现跳转。查找好久,还是找到了访问ifame内元素的解决办法:
需要引入这三个引用:
对于选中的那个,如果没有,可以在这儿下载
下面直接看源代码:
Private Sub goto_Click()
For j = To
Set WebBrowser1.Document.cookie = Nothing
WebBrowser1.Navigate2 ("https://xui.ptlogin2.tenpay.com/cgi-bin/xlogin?appid=546000248&style=34&hide_border=1&proxy_url=https%3A%2F%2Fwww.tenpay.com%2Fv2%2Fproxy.html&target=self&daid=120&s_url=https%3A%2F%2Fwww.tenpay.com%2Fv2%2Fres%2Fjs%2Fyui%2Fbuild%2Flogin%2Fptlogin.shtml&pt_no_auth=1&v=10063002#1444282478405")
Do
DoEvents
If WebBrowser1.ReadyState = READYSTATE_COMPLETE Then
'MsgBox "载入完成":
Exit Do
End If
Loop Set vDoc = WebBrowser1.Document
vDoc.All().Click Dim i As Integer
For i = To vDoc.All.length -
If UCase(vDoc.All(i).id) = "U" Then
'vDoc.All(i).Click
'MsgBox vDoc.All(i).id:
vDoc.All(i).Value = "*******帐号"
End If
If UCase(vDoc.All(i).id) = "P" Then
'vDoc.All(i).Click
'MsgBox vDoc.All(i).id:
vDoc.All(i).Value = "*******密码"
End If
Next
For i = To vDoc.All.length -
If UCase(vDoc.All(i).id) = "LOGIN_BUTTON" Then
'MsgBox vDoc.All(i).id
vDoc.All(i).Click
End If
Next If j = Then
While WebBrowser1.Busy
DoEvents
Wend
Set vDocFrame = getFrames(WebBrowser1).Document
For i = To vDocFrame.All.length -
If UCase(vDocFrame.All(i).id) = "CAP_INPUT" Then
vDocFrame.All(i).Value = "szbv"
End If
Next For i = To vDocFrame.All.length -
If UCase(vDocFrame.All(i).innerText) = "确 定" Then
vDocFrame.All(i).Click
While WebBrowser1.Busy
DoEvents
Wend
WebBrowser1.Navigate ("https://www.tenpay.com/app/v1.0/cftaccount.cgi")
Exit For
End If
Next
'If UCase(vDocFrame.All(i).id) = "CAP_INPUT" Then
'MsgBox vDocFrame.All(0).id
'End If
End If
'vDoc.All(75).Click
Next
End Sub
'取出iframe对象
'WB为要处理的webbrowser
Private Function getFrames(ByVal WB As WebBrowser) As Object
Dim pContainer As olelib.IOleContainer
Dim pEnumerator As olelib.IEnumUnknown
Dim pUnk As olelib.IUnknown
Dim pBrowser As SHDocVwCtl.WebBrowser_V1 Set pContainer = WB.Object.Document
If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = Then
Set pContainer = Nothing
Do While pEnumerator.Next(, pUnk) =
Set pBrowser = pUnk
If Err.Number = Then
Print "Frame: " & pBrowser.LocationURL If InStr(, pBrowser.LocationURL, "https://ssl.captcha.qq.com/cap_union_show") Then '可以在这里加条件判断得到指定的frame,基本可以根据url或者innerHTML中的某个关键字符
Set getFrames = pBrowser
Exit Function
End If
End If Loop
Set pEnumerator = Nothing
End If
End Function
财付通登录
VB webbrowser 控件的应用(跨域 内嵌网页元素的访问)的更多相关文章
- Webbrowser控件判断网页加载完毕的简单方法 (转)
摘自:http://blog.csdn.net/cometnet/article/details/5261192 一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,W ...
- WebBrowser控件使用技巧分享
原文:WebBrowser控件使用技巧分享 在发布“淘宝登货员”时发现不少朋友对WebBrowser控件比较感兴趣,故在此分享一下使用心得. 首先分享一个WebBrowser的扩展类(此类所需的dll ...
- WinForm webbrowser控件的使用
webbrowser是一个比较实用的工具,主要用于在winform窗体中嵌入浏览器,达到winform与webform互操作的目的. 先上一个demo,看一下能实现什么效果. private void ...
- VB.NET让webbrowser控件中JS脚本错误最新方法(2013-09-16)
最近也是在项目中遇到了webbrowser控件中想关闭JS脚本错误窗口的问题,所以经过多次测试,终于用一段高效实用的代码完美解决webbrowser控件中JS脚本错误窗口关闭的问题. 通过创建一个子线 ...
- Webbrowser控件史上最强技巧全集
原文:Webbrowser控件史上最强技巧全集 Webbrowser控件史上最强技巧全集 VB调用webbrowser技巧集 1.获得浏览器信息: Private Sub Command1_Click ...
- WebBrowser控件使用详解
原文:WebBrowser控件使用详解 方法 说明 GoBack 相当于IE的“后退”按钮,使你在当前历史列表中后退一项 GoForward 相当于IE的“前进”按钮,使你在当前历史列表中前进一项 G ...
- 关于webbrowser控件自动登陆的问题
原文:关于webbrowser控件自动登陆的问题 楼主dtb(陈少)2004-03-04 22:16:55 在 VB / 网络编程 提问 请问怎么用webbrowser自动登陆www.jp168.co ...
- C# Winform WebBrowser控件
C# WinForm WebBrowser 1.主要用途:使用户可以在窗体中导航网页. 2.注意:WebBrowser 控件会占用大量资源.使用完该控件后一定要调用 Dispose 方法,以便确保及时 ...
- BCB:WebBrowser 控件说明
控件文件:system32\shdocvw.oca shdocvw.dll 注册:regsvr32 shdocvw.dll WebBrowser 是 IE 内核做的 VB 控件, WebBrow ...
随机推荐
- 使用php创建WebSocket服务
执行方法:首先先修改server.php与index.html的ip通过命令行执行 [php路径]php.exe "[文件路径]server.php"然后通过浏览器打开index. ...
- 一行一行分析JQ源码学习笔记-06
节点类型获取$("span")首先 判断 if(select.nodeType) markarray() 类数组 转化成真正的数组 var adiv = document.getE ...
- Python创建多进程,用Queue传递信息
创建10个进程,分别计算0到1000各个区间的和,主进程汇总 __author__ = 'Administrator' # -*- coding:utf-8 -*- ''' @author:qiush ...
- ARC下面的对象被释放的bug
一般在ARC管理的方式之下,很难出现对象被过度释放的问题,下面是我将遇到的一个crash. * thread #: tid = , queue = , address=0x18) frame #: f ...
- 关于string的对象引用
什么都不说了, 一切都在代码里: Console.WriteLine(object.ReferenceEquals(c5, c4)); //False ...
- js与jquery实时监听输入框值变化方法
本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ...
- Gentoo:Xorg:Failed to load module "……" 问题
错误描述: 安装完xorg-server后,startx启动桌面环境,出现缺少模块错误. Xorg:Failed to load module "--" 查看log: cat /v ...
- 将json文件转换为字符串
//从给定位置读取Json文件 public String readJson(String path){ //从给定位置获取文件 File file = new ...
- android中对Bitmap图片设置任意角为圆角
http://blog.csdn.net/l448288137/article/details/48276681 最近项目开发中使用到了圆角图片,网上找到的圆角图片控件大多比较死板,只可以全圆角.其中 ...
- Struts2之checkboxlist 设置默认值和结果回显
<s:checkboxlist list="#{'篮球':'篮球','足球':'足球','排球':'排球'}"></s:checkboxlist> 这么定义 ...