经过一些非常友好的帮助,我现在有一个小片代码导航到一个网站,使用Excel中的VBA模块。它在A2单元格中选取了一匹马的名字,我的马是虎卷.这就是代码。
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
问题是,我已经检查了页面,并找到了链接,但对于我的生活,我只是不能写正确的代码,以激活链接,以钻进马的统计.Can任何人都可以帮助,也许解释的方式来做到这一点? 非常感谢你这么多的前期。
使用结果的类名来瞄准锚点点击
objIE.document.querySelector(".link-row").click
如果您的搜索只有一个结果,则链接到马匹详情页的内容为 href
属性的唯一项目的 "tr link-row"
类.如果你的搜索有更多的结果,那么你的每一个搜索结果都会有一个项目,你可以用同样的方式对它们做你想做的事情(你可以保留第一个或循环通过它们等)。
只需记住,这些元素在第一时间并不是文档的一部分,因为文档会和它的HTML代码一起加载,其中包含了加载其他元素的脚本,所以VBA必须等待Internet Explorer来运行这些脚本。
在你的代码之后,要进入结果页中的onlyfirst马的详情页。
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
图书馆。HTMLDocument
属于 Microsoft HTML Object Library
,所以在VBA中把它添加到引用中。