【问题标题】:Internet scraping issue when using vba on secure site在安全站点上使用 vba 时出现 Internet 抓取问题
【发布时间】:2021-02-07 23:33:52
【问题描述】:

我正在尝试使 IE 自动化以从安全站点中提取数据,但每次我都会收到相同的错误消息:“需要对象”

调试器指向-HTMLinput.Value = "test"这一行

之前的一切正常。我不知道有什么问题。我已经验证了我的身份证以确保没有错误。

Sub Brows()

    Dim IE As New SHDocVw.InternetExplorerMedium
    Dim Policy As Object
    Dim certificate As Object
    Dim HTMLDoc As MSHTML.HTMLDocument
    Dim HTMLinput As MSHTML.IHTMLElement

    IE.Visible = True
    IE.navigate "secure website address"
    Application.Wait Now + TimeValue("00:00:02")

    Do While IE.ReadyState <> READYSTATE_COMPLETE
    Loop

    Set HTMLDoc = IE.Document
    Set HTMLinput = HTMLDoc.getElementById("input ID")
    HTMLinput.Value = "test"
End Sub

【问题讨论】:

  • 因为上一行没有执行成功。 Set HTMLinput = HTMLDoc.getElementById("input ID") 未设置,可能是因为未找到元素“输入 ID”。

标签: vba object required


【解决方案1】:

如何使用 Excel 和 VBA 登录网站。

Dim HTMLDoc As HTMLDocument
Dim oBrowser As InternetExplorer
Sub Login_2_Website()

Dim oHTML_Element As IHTMLElement
Dim sURL As String

On Error GoTo Err_Clear
sURL = "https://www.google.com/accounts/Login"
Set oBrowser = New InternetExplorer
oBrowser.Silent = True
oBrowser.timeout = 60
oBrowser.navigate sURL
oBrowser.Visible = True

Do
' Wait till the Browser is loaded
Loop Until oBrowser.readyState = READYSTATE_COMPLETE

Set HTMLDoc = oBrowser.Document

HTMLDoc.all.Email.Value = "sample@vbadud.com"
HTMLDoc.all.passwd.Value = "*****"

For Each oHTML_Element In HTMLDoc.getElementsByTagName("input")
If oHTML_Element.Type = "submit" Then oHTML_Element.Click: Exit For
Next

' oBrowser.Refresh ' Refresh If Needed
Err_Clear:
If Err <> 0 Then
Debug.Assert Err = 0
Err.Clear
Resume Next
End If
End Sub

该程序需要参考以下内容:

1 Microsoft Internet Controls

2. Microsoft HTML Object Library

http://vbadud.blogspot.com/2009/08/how-to-login-to-website-using-vba.html

【讨论】:

  • 感谢您的帮助。那仍然对我不起作用。我尝试打印所有输入标签以确认它们的属性,但调试器上没有出现任何内容。我也尝试计算输入,但调试器返回 0。我不明白发生了什么。我想知道是不是因为它是一个我无法与 DOM 交互的安全站点。
  • 我正在使用你提到的库。
  • 你能分享这个网址,还是在防火墙后面?
  • 不幸的是它在防火墙后面。
  • 我想通了。嗯...在您的代码中一遍又一遍地按 F8 按钮...这将让您逐行逐行执行每一行代码。查看错误在哪里;它将以黄色突出显示。尝试解释错误。将错误消息复制/粘贴到 Google;进行搜索并尝试弄清楚。您可以在此处发布错误消息,我会尽力为您提供更多帮助。当我无法访问防火墙后面的任何内容时,我不知道还能做多少。
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2014-04-05
  • 2021-12-05
  • 2020-10-23
相关资源
最近更新 更多