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 ...
随机推荐
- css样式重置(初始化)收集
淘宝的样式初始化: body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fields ...
- jQuery插件实现左右无缝轮播
前段时间学习jQuery的时候,在网上找了个SuperSlide插件,做轮播图demo,感觉对于新人而言,还是挺容易上手的,代码量也少. 直接贴代码吧. 1.HTML <!DOCTYPE htm ...
- (转)eclipse自动补全的设置
如果你用过Visual Studio的自动补全功能后,再来用eclipse的自动补全功能,相信大家会有些许失望. 但是eclipse其实是非常强大的,eclipse的自动补全没有VS那么好是因为ecl ...
- Matlab - 矩阵元素引用
>> A = [ ; ; ] A = 1. 选择第m行n列的元素 >> A(,) ans = 2. 选择第i列所有元素 >> A(:,) ans = 3. 选择第j ...
- 洛谷-陶陶摘苹果(升级版)-BOSS战-入门综合练习1
题目描述 Description 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同 ...
- aforge之hough
/// <summary> /// 参数不能是一位索引 /// </summary> /// <param name="bmp"></pa ...
- Linux CPU 核数检查脚本
#!/bin/bash physicalNumber=0 coreNumber=0 logicalNumber=0 HTNumber=0 logicalNumber=$(grep "proc ...
- 【java学习】Servlet简单的表单程序(一)
此文用于java学习,在此小记. 在此小Demo中使用到了Servlet,所以有必要了解一下Servlet的相关知识.(Servlet的相关知识摘抄自http://blog.csdn.net/jiuq ...
- xxx app 项目问题解决一览
前话:作为人生旅途中的小记录 不同账号玩法限制 解决 <vn_rule>x</vn_rule> 6.调整下注筹码 **** 解决 不同账号的玩法限制 **** ...
- U盘做svn版本控制
svn提供的访问方式有: file:///本地路径/to/svnrepo/ //访问本地磁盘 http://host/to/svnrepo/ //通过配置subversion的apache服务器的we ...