Vba 点击图片或其背后的链接

Vba 点击图片或其背后的链接,vba,internet-explorer,getelementbyid,getelementsbytagname,Vba,Internet Explorer,Getelementbyid,Getelementsbytagname,嗨,我有一个宏,应该点击网页上的按钮。问题是这个代码后面并没有ID。它的内联网网页 我的代码的开始 Set IE = New InternetExplorerMedium IE.Navigate = "some website" While IE.ReadyState <> READYSTATE_COMPLETE DoEvents Wend IE.Visible = True IE.document.

嗨,我有一个宏,应该点击网页上的按钮。问题是这个代码后面并没有ID。它的内联网网页

我的代码的开始

    Set IE = New InternetExplorerMedium

    IE.Navigate = "some website"

        While IE.ReadyState <> READYSTATE_COMPLETE
          DoEvents
        Wend

IE.Visible = True

    IE.document.getElementById("CategoryCombo").Value = "78"
    IE.document.getElementById("CategoryCombo").FireEvent ("onchange")

'~~> wait until element is present on web page
    Do

        Set ieobj = Nothing

    On Error Resume Next

        Set ieobj = IE.document.getElementById("text1265")

        DoEvents

    Loop Until Not ieobj Is Nothing

'~~> search box
   IE.document.getElementById("text1265").Value = "some value"

'~~> button click example
   IE.document.getElementById("subBtn").Click
我也试过了

   IE.document.getElementByTagName("a").FireEvent ("onclick")
多谢各位

我也试过了

IE.document.getElementByTagName(“a”).FireEvent(“onclick”)

这应该对你有用,但是你错过了一些东西。您需要指定要查找的
标记,因此
.getElementsByTagName(“a”)
将变成
.getElementsByTagName(“a”)(i)
,其中
i
是要查找的标记的索引(从0开始,按顺序计算HTML中的每个
标记,以获得索引)

之所以需要索引,是因为
.getElementsByTagName(“标记名”)
返回一个数组,而不是单个值

我也试过了

IE.document.getElementByTagName(“a”).FireEvent(“onclick”)

这应该对你有用,但是你错过了一些东西。您需要指定要查找的
标记,因此
.getElementsByTagName(“a”)
将变成
.getElementsByTagName(“a”)(i)
,其中
i
是要查找的标记的索引(从0开始,按顺序计算HTML中的每个
标记,以获得索引)


之所以需要索引,是因为
.getElementsByTagName(“标记名”)
返回一个数组,而不是单个值。

最后我想到了这个。谢谢你的帮助尼古拉斯·坎普,你的回答让我找到了正确的方向

Set elements = IE.document.getElementsByTagName("a")

For Each element In elements
    If Left(element, 33) = "javascript:FSResults_fsopenWindow" Then

    Debug.Print element
    IE.Navigate element

    End If

 Next

最后我想到了这个。谢谢你的帮助尼古拉斯·坎普,你的回答让我找到了正确的方向

Set elements = IE.document.getElementsByTagName("a")

For Each element In elements
    If Left(element, 33) = "javascript:FSResults_fsopenWindow" Then

    Debug.Print element
    IE.Navigate element

    End If

 Next

你可以使用CSS选择器

例如,属性选择器

ie.document.querySelector("[title='View document']").Click
或者通过其值将相同的内容设置为target href

ie.document.querySelector("[href*=fsopenWindow]").Click
最后一个查找包含
'fsopenWindow'


这两种方法都避免了元素集合的循环,并使用CSS,因此速度更快。

您可以使用CSS选择器

例如,属性选择器

ie.document.querySelector("[title='View document']").Click
或者通过其值将相同的内容设置为target href

ie.document.querySelector("[href*=fsopenWindow]").Click
最后一个查找包含
'fsopenWindow'


这两种方法都避免了在元素集合上循环,并使用CSS,因此速度更快。

Hi,所以我会循环直到元素被href?或者类似的方法?您还可以对该数组中的每个循环使用
,可能直到找到给定的
.Title
属性或href,或者,您可以开始计算所有
标记,以找到所需标记的索引。@FilipOndo在
IE.document
中的每个超链接都有一个
标记-通过
getElementsByTagName
返回的数组包含其中的每一个标记。您需要查看页面,看看是什么使该链接成为您要单击的链接。@NicholasKemp
For Each
应用于迭代集合。使用
For
循环迭代数组的效果最好。请参阅。@MathieuGuindon感谢您提供的信息,学习新东西总是很好的。您好,所以我会循环直到元素为href?或者类似的方法?您还可以对该数组中的每个
循环使用
,可能直到找到给定的
.Title
属性或href,或者,您可以开始计算所有
标记,以找到所需标记的索引。@FilipOndo在
IE.document
中的每个超链接都有一个
标记-通过
getElementsByTagName
返回的数组包含其中的每一个标记。您需要查看页面,看看是什么使该链接成为您要单击的链接。@NicholasKemp
For Each
应用于迭代集合。使用
For
循环迭代数组的效果最好。看。@MathieuGuindon谢谢你的信息,学习新东西总是好的。