自动登录财付通,难点在于会出现验证码,并且验证码页是在iframe元素下的,出于各种安全考虑,webbrowser控件不提供这种访问机制!当然,第一想到的是将这个网页拿出来,可是输入完毕验证码后,点击“确定”需要与原网页交互,而此时已经脱离原网页,所以不能实现跳转。查找好久,还是找到了访问ifame内元素的解决办法:

需要引入这三个引用:  对于选中的那个,如果没有,可以在这儿下载

  下面直接看源代码:

  1. Private Sub goto_Click()
  2. For j = To
  3. Set WebBrowser1.Document.cookie = Nothing
  4. 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")
  5. Do
  6. DoEvents
  7. If WebBrowser1.ReadyState = READYSTATE_COMPLETE Then
  8. 'MsgBox "载入完成":
  9. Exit Do
  10. End If
  11. Loop
  12.  
  13. Set vDoc = WebBrowser1.Document
  14. vDoc.All().Click
  15.  
  16. Dim i As Integer
  17. For i = To vDoc.All.length -
  18. If UCase(vDoc.All(i).id) = "U" Then
  19. 'vDoc.All(i).Click
  20. 'MsgBox vDoc.All(i).id:
  21. vDoc.All(i).Value = "*******帐号"
  22. End If
  23. If UCase(vDoc.All(i).id) = "P" Then
  24. 'vDoc.All(i).Click
  25. 'MsgBox vDoc.All(i).id:
  26. vDoc.All(i).Value = "*******密码"
  27. End If
  28. Next
  29. For i = To vDoc.All.length -
  30. If UCase(vDoc.All(i).id) = "LOGIN_BUTTON" Then
  31. 'MsgBox vDoc.All(i).id
  32. vDoc.All(i).Click
  33. End If
  34. Next
  35.  
  36. If j = Then
  37. While WebBrowser1.Busy
  38. DoEvents
  39. Wend
  40. Set vDocFrame = getFrames(WebBrowser1).Document
  41. For i = To vDocFrame.All.length -
  42. If UCase(vDocFrame.All(i).id) = "CAP_INPUT" Then
  43. vDocFrame.All(i).Value = "szbv"
  44. End If
  45. Next
  46.  
  47. For i = To vDocFrame.All.length -
  48. If UCase(vDocFrame.All(i).innerText) = "确 定" Then
  49. vDocFrame.All(i).Click
  50. While WebBrowser1.Busy
  51. DoEvents
  52. Wend
  53. WebBrowser1.Navigate ("https://www.tenpay.com/app/v1.0/cftaccount.cgi")
  54. Exit For
  55. End If
  56. Next
  57. 'If UCase(vDocFrame.All(i).id) = "CAP_INPUT" Then
  58. 'MsgBox vDocFrame.All(0).id
  59. 'End If
  60. End If
  61. 'vDoc.All(75).Click
  62. Next
  63. End Sub
  64. '取出iframe对象
  65. 'WB为要处理的webbrowser
  66. Private Function getFrames(ByVal WB As WebBrowser) As Object
  67. Dim pContainer As olelib.IOleContainer
  68. Dim pEnumerator As olelib.IEnumUnknown
  69. Dim pUnk As olelib.IUnknown
  70. Dim pBrowser As SHDocVwCtl.WebBrowser_V1
  71.  
  72. Set pContainer = WB.Object.Document
  73. If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = Then
  74. Set pContainer = Nothing
  75. Do While pEnumerator.Next(, pUnk) =
  76. Set pBrowser = pUnk
  77. If Err.Number = Then
  78. Print "Frame: " & pBrowser.LocationURL
  79.  
  80. If InStr(, pBrowser.LocationURL, "https://ssl.captcha.qq.com/cap_union_show") Then '可以在这里加条件判断得到指定的frame,基本可以根据url或者innerHTML中的某个关键字符
  81. Set getFrames = pBrowser
  82. Exit Function
  83. End If
  84. End If
  85.  
  86. Loop
  87. Set pEnumerator = Nothing
  88. End If
  89. End Function

财付通登录

VB webbrowser 控件的应用(跨域 内嵌网页元素的访问)的更多相关文章

  1. Webbrowser控件判断网页加载完毕的简单方法 (转)

    摘自:http://blog.csdn.net/cometnet/article/details/5261192 一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,W ...

  2. WebBrowser控件使用技巧分享

    原文:WebBrowser控件使用技巧分享 在发布“淘宝登货员”时发现不少朋友对WebBrowser控件比较感兴趣,故在此分享一下使用心得. 首先分享一个WebBrowser的扩展类(此类所需的dll ...

  3. WinForm webbrowser控件的使用

    webbrowser是一个比较实用的工具,主要用于在winform窗体中嵌入浏览器,达到winform与webform互操作的目的. 先上一个demo,看一下能实现什么效果. private void ...

  4. VB.NET让webbrowser控件中JS脚本错误最新方法(2013-09-16)

    最近也是在项目中遇到了webbrowser控件中想关闭JS脚本错误窗口的问题,所以经过多次测试,终于用一段高效实用的代码完美解决webbrowser控件中JS脚本错误窗口关闭的问题. 通过创建一个子线 ...

  5. Webbrowser控件史上最强技巧全集

    原文:Webbrowser控件史上最强技巧全集 Webbrowser控件史上最强技巧全集 VB调用webbrowser技巧集 1.获得浏览器信息: Private Sub Command1_Click ...

  6. WebBrowser控件使用详解

    原文:WebBrowser控件使用详解 方法 说明 GoBack 相当于IE的“后退”按钮,使你在当前历史列表中后退一项 GoForward 相当于IE的“前进”按钮,使你在当前历史列表中前进一项 G ...

  7. 关于webbrowser控件自动登陆的问题

    原文:关于webbrowser控件自动登陆的问题 楼主dtb(陈少)2004-03-04 22:16:55 在 VB / 网络编程 提问 请问怎么用webbrowser自动登陆www.jp168.co ...

  8. C# Winform WebBrowser控件

    C# WinForm WebBrowser 1.主要用途:使用户可以在窗体中导航网页. 2.注意:WebBrowser 控件会占用大量资源.使用完该控件后一定要调用 Dispose 方法,以便确保及时 ...

  9. BCB:WebBrowser 控件说明

      控件文件:system32\shdocvw.oca  shdocvw.dll 注册:regsvr32 shdocvw.dll WebBrowser 是 IE 内核做的 VB 控件, WebBrow ...

随机推荐

  1. 常用JavaScript字符串方法简述

    网址来源:http://www.html-js.com/article/JS-rookie-in-the-rookie-to-start-learning-to-fly-the-commonly-us ...

  2. linux文件系统拓展属性

    在研究GlusterFS中,发现GlusterFS使用了文件系统的Extended Attributes,中文可以称之为文件系统扩展属性.由于资料比较少,中文资料更少,因此把记录几点Extended ...

  3. jquery 下拉框 收藏

    jquery 下拉框  Query获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code. ...

  4. QQ头像一键添加校徽

    简书链接地址:http://www.jianshu.com/p/dcb2cbd07e4d 项目展示链接地址:www.zhaozhengyu.cn/SchoolImage/index.html

  5. json解析的函数eval_r() 和 JSON.parse()

              eval_r()解析的字符串格式是'({"data":"hello","num":"5"})'   ...

  6. use include to read a file

    #include<iostream> #include<fstream> using namespace std; void process(string filename) ...

  7. 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 ...

  8. chapter 13_0 元方法

    通常,Lua中的每个值都有一套预定义的操作集合. 例如:可以将数字相加.可以连接字符串.可以在table中插入一对key-value等. 但是无法将两个table相加,无法对函数作比较,或无法调用一个 ...

  9. offset()值不准问题

    本来应该只需获取含图片的div的offset(),然后将标签div的坐标设置好即可,但是不知为何越靠后的div的offset().top越不正常,跟标准值偏离的越来越大. 即使你在$(document ...

  10. js 技巧

    用于浮窗跳转至父窗口 parent.document.location.href='/xxx/xxx.htm'; 取父窗口的元素 window.parent.$('#xxx'); 正常跳转 windo ...