使用VBA自动化IE – 单击带有跨度的锚点button

我目前正在做自动化上传文件在销售队伍。

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> 

点击锚点用户需要下去,然后按“附加文件”button。

我曾尝试过两种不同的做法

1.通过锚类获取元素=“cxcontentcommentaction”:

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

2.通过span class =“cxcontentcommentactiontext”编码获取元素:

 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 

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

getElementsByClassName方法返回具有此类名称的元素的集合。 这是因为HTML DOM可以包含具有相同类名的多个元素。 这就是为什么复数formsgetElement。 所以你需要知道你需要的元素集合中的哪个元素。 如果是第一个,那么:

 ... Set oElementCollection = mydoc.getElementsByClassName("cxcontentcommentaction") oElementCollection(0).Click ... 

如果第一个不对,那就试试

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

find合适的人

编辑:

在问题中添加之后:

 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 

Alex Richter的答案是正确的,我也有类似的问题。 所以,如果它不能解决你的问题,让我们知道,我也会检查我的解决scheme。

虽然会build议在该行之后直接放置断点,并观察结果是否select了正确的一个。

此外,它也被允许在停止的时候编辑你的代码,所以你可以添加另外一行来testing。 或者你也可以设置下一条指令在哪里继续。

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

另一种方法是如何实现这个function,就是使用控制台内置的浏览器:点击F12并select控制台选项卡。

=>文件
<= HTMLDocument => https://stackoverflow.com/ ……
=> document.getElementsByClassName('current-site')
<= HTMLCollection []