【问题标题】:VBA : access an HTML elements without Id or NameVBA:访问没有 ID 或名称的 HTML 元素
【发布时间】:2016-10-03 16:38:34
【问题描述】:

在 VBA 中,我想知道是否可以在没有 Id 和 Name 属性的情况下单击此 HTML 按钮:

<ul aria-hidden="false" role="menu">
   <li>
        <button ..></button>
   </li>
   <li>
        <button ..></button>
   </li>
   <li> <!-- THE THIRD li, I would like to access this button -->
        <button title="exporter" role="menuitem" data-ng-disabled="myfunction()">my text</button>
  </li>
</ul>

对于带有 Id 或 Name 的其他元素,我是这样做的:

Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "site.com"
IE.document.getElementById("submitBtn").Click
// IE.document.getElementByName("submitBtn").Click

但在我之前的示例中,没有可用的“Id”或“Name”,只有按钮的 Title 属性,是否有可能访问此按钮?

有什么想法吗?


我尝试过的另一种方法,但也不起作用:

目标是点击按钮,所以我尝试直接执行“myfunction()”,像这样:

IE.document.parentWindow.execScript "myfunction()", "Javascript"

btu 我得到一个执行错误(错误 80020101).. 有什么想法吗?

【问题讨论】:

  • 是的,您可以将其指定为具有 id 或名称的元素的第 n 个子元素 (childNodes[])。
  • 如果 HTML 是有效的 XML,您还可以使用 XPath 根据属性、位置或兄弟选择节点/属性。
  • 或 GetElementsByTagname 并遍历返回的集合,直到找到具有正确标题属性的集合。
  • 谢谢,例如是否可以访问“myfunction()”所在的按钮,我的意思是,“myfunction”只在那里调用,所以有没有办法获取节点直接从那里?
  • 只是提个醒(期待下一个问题)。该站点正在使用 AngularJS,因此如果 myfunction()TRUE,则该按钮将被禁用且无法点击。我从未尝试通过 IE 自动化以编程方式更改 AngularJS 属性,所以我不能 100% 确定您是否可以设置 data-ng-disabled=FALSE 或者您是否必须强制对 myfction() 进行错误评估。

标签: javascript html vba excel automation


【解决方案1】:

您是否尝试过遍历元素并找到一种可能的方法来检索它是如何被检测到的?

For Each element In IE.Document.all
If element.className = "exporter" Then
Set LookedElement = element 
Exit For
End If
Next

设置元素的其他有用功能

Set elems = IE.Document.getelementsbytagname("exporter")
Set elems = IE.Document.getElementsByName("exporter")

添加参考(参考->Microsoft Internet Controls)可能更有用,这样您就可以看到所有可用于 IE 的命令,而不是后期绑定。

【讨论】:

  • 是的,对于那些像我之前没有看到这个参考的人来说,shdocvw.dll 根本就不见了,从你的 system32 文件中导入它
猜你喜欢
  • 2010-09-19
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
相关资源
最近更新 更多