【问题标题】:VBA: not able to pull value within <input> tag using getelementsbyTagname().ValueVBA:无法使用 getelementsbyTagname().Value 在 <input> 标记中提取值
【发布时间】:2014-11-09 19:39:13
【问题描述】:

这是我在 stackflow 上的第一篇文章 :) 我已经用谷歌搜索 VBA 知识并编写了一些 VBA 大约一个月。

我的电脑信息:

1.window 8.1

2.excel 2013

3.ie 11

我的 Excel 参考资料

微软对象库:是的

Microsoft Internet Controls:是的

Microsoft Form 2.0 对象库:是

Microsoft Script Control 1.0:是的

问题:

我试图使用 VBA 自动从 Internet Explorer 检索数据。 我想从名为“u_0_1”的 id 中检索输入标签中的值,该 id 位于名为“facebook”的 id 下。我期待在单元格 c2 上检索值“AQFFmT0qn1TW”。但是,在我运行 VBA“运行时错误'91':对象变量或未设置块变量后,它弹出了这个消息。 我已经使用不同的方法尝试了几个星期,例如,

1.getelementsbyClassname

2.getelementbyid

3.getelementsbyTagname

但它不起作用。

网址:

http://coursesweb.net/javascript/getelementsbytagname

下面是我的 VBA 代码。请大家帮帮我好吗?

Private Sub CommandButton1_Click()
Dim ie As Object
Dim Doc As HTMLDocument
Dim getThis As String



Set ie = CreateObject("InternetExplorer.Application")

    ie.Visible = 0


    ie.navigate "http://coursesweb.net/javascript/getelementsbytagname"
    Do
    DoEvents
    Loop Until ie.readyState = 4



    Set Doc = ie.document


    getThis = Trim(Doc.getElementById("u_0_1")(0).getElementsByTagName("input")(0).Value)
    Range("c2").Value = getThis
End Sub            

【问题讨论】:

  • getElementById("u_0_1") 返回单个元素而不是集合,因此您不需要在其后添加(0)
  • 嗨蒂姆,谢谢你的提示。所以只有 getelementbyId 返回一个元素,其他的 getelementsby method() 返回一个集合对吗?
  • 在任何 HTML 文档中,Id 属性都应该是唯一的,因此该方法只返回它找到的第一个。类和标签显然可以多次出现:所以这些方法返回集合。线索在方法名称中 - 如果它是 getElementsbyXXXX,那么它会返回一个集合。
  • 谢谢!这是一个非常有用的信息。

标签: vba getelementbyid getelementsbytagname


【解决方案1】:

感谢您的帮助。我不知道 JS 和 VBA 在 getelementsby () 方法方面存在差异。并使用循环方法找到我发现它非常有用的id。

我在从表单或输入类型中检索值时仍有一些问题。希望您能帮助我或给我一些建议。

预期结果:

检索值“AQFFmT0qn1TW”并自动将其复制到单元格(“c2”)上。

实际结果:

没有任何东西返回到单元格(“C2”)

下面是 HTML 元素。

<form rel="async" ajaxify="/plugins/like/connect" method="post" action="/plugins/like/connect" onsubmit="return window.Event &amp;&amp; Event.__inlineSubmit &amp;&amp; Event.__inlineSubmit(this,event)" id="u_0_1">
<input type="hidden" name="fb_dtsg" value="AQFFmT0qn1TW" autocomplete="off">         

以下是基于您的代码的 VBA 代码。

Private Sub CommandButton1_Click()
Dim ie As Object
Dim Doc As HTMLDocument
Dim Elements As IHTMLElementCollection
Dim Element As IHTMLElement

Set ie = CreateObject("InternetExplorer.Application")

ie.Visible = 0

ie.navigate "http://coursesweb.net/javascript/getelementsbytagname"
Do
DoEvents
Loop Until ie.readyState = 4

Set Doc = ie.document

Set Elements = Doc.getElementsByTagName("input")

For Each Element In Elements
    If Element.name = "fb_dtsg" Then
        Range("c2").Value = Element.innerText
    End If
Next Element

Set Elements = Nothing

End Sub

干杯。

【讨论】:

    【解决方案2】:

    首先,我在您搜索的网站标签的来源中找不到。无论如何,我认为您不能像在 JS 中那样链接 getElementById.getElementsByTag 。您必须遍历文档元素的集合。

    Private Sub CommandButton1_Click()
    Dim ie As Object
    Dim Doc As HTMLDocument
    Dim Elements As IHTMLElementCollection
    Dim Element As IHTMLElement
    
        Set ie = CreateObject("InternetExplorer.Application")
    
        ie.Visible = 0
    
        ie.navigate "http://coursesweb.net/javascript/getelementsbytagname"
        Do
        DoEvents
        Loop Until ie.readyState = 4
    
        Set Doc = ie.document
    
        Set Elements = Doc.getElementsByTagName("ul")
    
        For Each Element In Elements
            If Element.ID = "ex4" Then
                Sheets(1).Cells(1, 1).Value = Element.innerText
            End If
        Next Element
    
        Set Elements = Nothing
    
    End Sub
    

    首先我得到标签“ul”的集合,然后遍历它们以获取 id“ex4”。在您的情况下,您将获得“输入”的集合,然后为您想要的 id 循环。找到后面跟着不同 id 的 id 应该不难,只是一些 if...thens。

    如果您需要进一步的助手,请回复网址,我可以在其中准确找到您要查找的内容。

    干杯

    【讨论】:

    • 嗨 Rafal,你能帮我解决下面的问题吗?
    • @pexpex223, Element.getAttribute("value") 是您要查找的内容,因为您的值位于标签属性中而不是内部文本中。和Element.getAttribute("name")="fb_dtsg" 为您的If...Then 条件。但是我担心这可能对您不起作用,正如我之前所说的,我在网站源代码中找不到任何带有 name="fb_dtsg" 的输入标签。
    • @rafal 抱歉回复晚了。感谢您的帮助并感谢您的时间。当我找到答案时,我会告诉你的。
    猜你喜欢
    • 2018-08-17
    • 2019-04-10
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 2021-10-10
    • 2017-01-07
    相关资源
    最近更新 更多