使用VBA自动化IE - 单击带有范围的锚点按钮

时间:2016-01-10 13:25:35

标签: excel vba excel-vba internet-explorer automation

我目前正在为在saleforce上传文件做自动化。

HTML文字是:

 <div>
<a href="javascript:void(0);" onblur="chatter.getFeed().contentCommentActionBlur(this);" onfocus="chatter.getFeed().contentCommentActionFocus(this);" onclick="chatter.getFeed().createContentComment(this,'0D52700002cc67d', false, true);" onmousedown="chatter.getFeed().contentCommentActionMouseDown(this);" class="cxcontentcommentaction">
<img class="cxcontentcommentactionimg" src="/s.gif">
<span class="cxcontentcommentactiontext">Attach File</span>
</a>
</div>

单击锚点用户需要按下并按“附加文件”按钮。

我尝试了两种不同的做法

1.通过anchor class =“cxcontentcommentaction”编译get元素:

Set htmldoc = mydoc.getElementsByClassName("cxcontentcommentaction")
    htmldoc.Click

2.使用span class =“cxcontentcommentactiontext”编译get元素:

Set htmldoc = mydoc.getElementsByClassName("cxcontentcommentactiontext")
    htmldoc.Click

对于这两个我收到错误“对象不支持此属性

发表评论后,我试过这样的事,

Set oElementCollection = mydoc.getElementsByClassName("cxcontentcommentactiontext")

    For Each link In oElementCollection
    If link.innerHTML = "Attach File" Then
        link.Click
        Exit For
    End If
Next link

我试过以下HTML

<a href="javascript:window.invokeOnClickJS_00bG0000000ikPK%28this%29" class="menuButtonMenuLink">
Send an Email</a>

以下代码适用于上面的html

Set oElementCollection = mydoc.getElementsByClassName("menuButtonMenuLink")


    For Each link In oElementCollection
    If link.innerHTML = "Send an Email" Then
        link.Click
        Exit For
    End If
Next link

但是在这个问题中提到的“附加文件”按钮只有问题。

2 个答案:

答案 0 :(得分:4)

方法HTML返回具有此类名的元素集合。这是因为DOM s可以包含具有相同类名的多个元素。这就是复数形式getElement ... Set oElementCollection = mydoc.getElementsByClassName("cxcontentcommentaction") oElementCollection(0).Click ... 的原因。所以你需要知道你需要的元素集合中的哪个元素。如果是第一个,那么:

For i = 0 To oElementCollection.Length - 1
 MsgBox oElementCollection(i).innerHTML
Next

如果第一个不正确,请尝试

Set oElementCollection = mydoc.getElementsByClassName("cxcontentcommentactiontext") 
找到合适的人。

修改

在问题中添加后:

span

您可能收集了span个对象而非链接。但是那些Set oElementCollection = mydoc.getElementsByClassName("cxcontentcommentactiontext") For Each span In oElementCollection If span.innerHTML = "Attach File" Then span.parentNode.Click Exit For End If Next span 元素应该在链接中。所以链接是他们的父母。

所以

D

答案 1 :(得分:0)

Alex Richter的回答是正确的,我也有类似的问题。因此,如果它没有解决您的问题,请告诉我们,我也会检查我的解决方案。

虽然建议在该行之后直接放置断点并观察结果是否选择了正确的断点。

此外,它还允许在代码停止时编辑代码,因此您可以添加另一行进行测试。或者您也可以设置下一条指令继续。

这样的技巧可以节省你很多时间来完善正确的实现。

如何尝试解决此问题的另一种方法是使用内置在控制台中的浏览器:只需点击F12并选择控制台选项卡。

  

=&GT;文件
  &lt; = HTMLDocument =&gt; https://stackoverflow.com/ ......
  =&GT; document.getElementsByClassName( '当前站点')
  &lt; = HTMLCollection []