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 ...
随机推荐
- 常用JavaScript字符串方法简述
网址来源:http://www.html-js.com/article/JS-rookie-in-the-rookie-to-start-learning-to-fly-the-commonly-us ...
- linux文件系统拓展属性
在研究GlusterFS中,发现GlusterFS使用了文件系统的Extended Attributes,中文可以称之为文件系统扩展属性.由于资料比较少,中文资料更少,因此把记录几点Extended ...
- jquery 下拉框 收藏
jquery 下拉框 Query获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code. ...
- QQ头像一键添加校徽
简书链接地址:http://www.jianshu.com/p/dcb2cbd07e4d 项目展示链接地址:www.zhaozhengyu.cn/SchoolImage/index.html
- json解析的函数eval_r() 和 JSON.parse()
eval_r()解析的字符串格式是'({"data":"hello","num":"5"})' ...
- use include to read a file
#include<iostream> #include<fstream> using namespace std; void process(string filename) ...
- Leetcode 073 Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. click ...
- chapter 13_0 元方法
通常,Lua中的每个值都有一套预定义的操作集合. 例如:可以将数字相加.可以连接字符串.可以在table中插入一对key-value等. 但是无法将两个table相加,无法对函数作比较,或无法调用一个 ...
- offset()值不准问题
本来应该只需获取含图片的div的offset(),然后将标签div的坐标设置好即可,但是不知为何越靠后的div的offset().top越不正常,跟标准值偏离的越来越大. 即使你在$(document ...
- js 技巧
用于浮窗跳转至父窗口 parent.document.location.href='/xxx/xxx.htm'; 取父窗口的元素 window.parent.$('#xxx'); 正常跳转 windo ...