【问题标题】:How do I activate a click on this hyperlink in VBA?如何在 VBA 中激活单击此超链接?
【发布时间】:2020-08-17 04:14:06
【问题描述】:

经过一些非常友好的帮助,我现在有了一小段代码,可以使用 Excel 中的 VBA 模块导航到网站。它在单元格 A2 中挑选出一匹马的名字,我有马 Tiger Roll。这是代码:

 Dim objIE As InternetExplorer
    Set objIE = New InternetExplorer
    'make web page visible
    objIE.Visible = True

    'navigate objIE to this web page
    objIE.navigate "https://www.britishhorseracing.com/racing/horses/racehorse-search-results?pagenum=1&q=" & Sheets("Sheet1").Range("A2").Value & "&rated=false"

    'wait here a few seconds while the browser is busy
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

问题是我已经检查了页面并找到了链接,但是对于我的一生,我就是无法编写正确的代码来激活链接以深入了解马的统计信息。 任何人都可以提供帮助,也许可以解释一下这样做的方法吗? 非常感谢您,

【问题讨论】:

  • "经过一些非常友好的帮助" - 请问你能接受这种情况下的答案吗?或许还可以解决之前的问题并做同样的事情。

标签: html vba web-scraping hyperlink click


【解决方案1】:

使用结果的类名来定位锚点点击

objIE.document.querySelector(".link-row").click

【讨论】:

  • 问题是元素是动态加载的,所以首先你必须等待,然后你可以点击它。
  • 我无法测试但有道理@Igor。您需要暂停循环以避免潜在的无限循环。
【解决方案2】:

如果您的搜索只有一个结果,那么到马详细信息页面的链接是具有"tr link-row" 类的唯一项目的href 属性的内容。 如果您的搜索有更多结果,则每个搜索结果都会有一个项目,并且您可以以相同的方式对它们做您想做的事情(您可以保留第一个或循环遍历它们等)。

请记住,这些元素一开始并不是文档的一部分,因为文档将加载其 HTML 代码,其中包含将加载其他元素的脚本,因此 VBA 必须等待 Internet Explorer 运行这些脚本.

在您的代码之后转到结果页面中唯一/第一匹马的详细信息页面:

Dim htmlPage As HTMLDocument
Set htmlPage = objIE.Document

'Page is dynamically populated from script. You have to wait when the horse link gets loaded
Do While htmlPage.getElementsByClassName("tr link-row").Length < 1
    DoEvents
Loop

'Get link (href attribute) and navigate to it
objIE.navigate htmlPage.getElementsByClassName("tr link-row").Item(0).href

Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

请注意,虽然InternetExplorer 对象是Microsoft Internet Controls 库的一部分,但HTMLDocumentMicrosoft HTML Object Library 的一部分,因此请将其添加到VBA 中的引用中。

【讨论】:

  • 伙计们.....非常感谢您的意见!这个论坛很棒,经验丰富的程序员给我们新手的真正帮助让人们对他们充满信心。再次感谢你!
  • 请记住,您可以选择一个答案以标记为“它适用于我的问题”或投票给每个有用的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多