即具有相同ID的getelementsbyID

时间:2018-10-10 09:12:15

标签: excel vba excel-vba internet-explorer

我有一个可以处理Internet爆炸问题的脚本(例如),我需要循环选择字段,因为4个元素具有相同的ID(在同一页面上),它本身不是问题。

我如何让它遍历4个字段? 我可以让它们更具体吗?

我使用的代码如下:

ie.document.getElementByID("DownloadImage").Click

ie代码如下: 字段1

<a id="DownloadButton" href="javascript:__doPostBack('ctl00$ctl00$MainContent$MainContent$ctl00$declaratiebestandView$RetourInformatieGrid$ctl03$DownloadButton','')">CZ_Specificatie_150005697.pdf</a>

字段2

<a id="DownloadButton" href="javascript:__doPostBack('ctl00$ctl00$MainContent$MainContent$ctl00$declaratiebestandView$RetourInformatieGrid$ctl03$DownloadButton','')">CZ_Specificatie_150005697.pdf</a><input name="ctl00$ctl00$MainContent$MainContent$ctl00$declaratiebestandView$RetourInformatieGrid$ctl03$DownloadImage" class="inlineButton" id="DownloadImage" type="image" src="../images/download.png" text="CZ_Specificatie_150005697.pdf">

然后打开下载屏幕,然后我的代码继续运行(并有效:))

2 个答案:

答案 0 :(得分:2)

HTLM中的id必须是唯一的。如果不是唯一的,则它不是有效的HTML,应予以修复。

HTML4:

http://www.w3.org/TR/html4/struct/global.html

第7.5.2节:

  

id =名称[CS]       此属性为元素分配名称。此名称在文档中必须是唯一的。

HTML5:

http://www.w3.org/TR/html5/dom.html#the-id-attribute

  

id属性指定其元素的唯一标识符(ID)。的   值必须在元素的主子树中的所有ID中唯一   并且必须至少包含一个字符。该值不能包含   任何空格字符。

答案 1 :(得分:2)

您可以使用querySelectorAll来收集它们的所有元素,这些元素具有id属性,其值与您所追求的相符。您可以通过索引来区分它们。即使ID重复,此方法也允许您收集它们。但是,您共享的HTML会下载同一文档,因此似乎不需要循环。

Dim nodeList As Object, i As Long
Set nodeList = ie.document.querySelectorAll("[id=DownloadButton]")
For i = 0 to nodeList.Length-1
    nodeList.item(i).Click
Next

这会循环所有匹配的元素并单击

根据索引将是特定的,但是如果您熟悉CSS选择器,则可以使用很多方法来指定元素。