如何在打开新网页后继续VBA代码

如何在打开新网页后继续VBA代码,vba,excel,internet-explorer,dom,web-scraping,Vba,Excel,Internet Explorer,Dom,Web Scraping,我刚开始创建VBA代码,我正在慢慢地对它有一个基本的了解,但是如果没有帮助,我无法通过我项目的这一点。我有下面的代码,运行良好,直到我需要继续与新的页面打开的代码。我不知道如何能够继续代码,计划是能够点击赔率比较选项卡并从该页面提取数据。任何帮助都将不胜感激 Sub odd_comparison() Dim objIE As InternetExplorer Dim ele As Object Dim y As Integer Set objIE = New

我刚开始创建VBA代码,我正在慢慢地对它有一个基本的了解,但是如果没有帮助,我无法通过我项目的这一点。我有下面的代码,运行良好,直到我需要继续与新的页面打开的代码。我不知道如何能够继续代码,计划是能够点击赔率比较选项卡并从该页面提取数据。任何帮助都将不胜感激

Sub odd_comparison()


    Dim objIE As InternetExplorer
    Dim ele As Object
    Dim y As Integer

    Set objIE = New InternetExplorer

    objIE.Visible = True


    objIE.navigate "http://www.flashscore.com/basketball/"

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

  objIE.document.getElementById("fs").Children(0) _
      .Children(2).Children(2).Children(0).Children(2).Click

End Sub
Sub-odd_比较()
Dim objIE作为InternetExplorer
作为对象的Dim ele
Dim y作为整数
Set objIE=新的InternetExplorer
objIE.Visible=True
objIE.navigate“http://www.flashscore.com/basketball/"
Do While objIE.Busy=True或objIE.readyState 4:DoEvents:Loop
objIE.document.getElementById(“fs”).Children(0)_
.Children(2).Children(2).Children(0).Children(2).单击
端接头

尝试进行循环,直到网页按照和回答中所述准备就绪(您知道,对于VBA,将
WScript.Sleep
替换为
DoEvents

使用开发工具(使用上下文菜单或按F12键)检查网页上的目标元素。HTML内容如下:


如您所见,有
onclick
属性,实际上您可以尝试从中执行jscript代码,而不是调用
click
方法:

objIE.document.parentWindow.execScript“设置导航类别(4);生成(真、0、假、假、2);e_t.track_单击('iframe-bookmark-click'、'赔率');,“javascript”
进一步,您可以找到以下微调器元素,在单击选项卡后加载数据时,该元素会短暂出现:

正在加载。。。
因此,您可以通过检查可见性状态来检测数据加载何时完成:

直到objIE.document.getElementById(“预加载”).style.display=“无”
多芬特
环
下一步是提取所需的数据。您可以从中心块中获取所有表:
.document.getElementById(“fs”).getElementsByTagName(“表”)
,遍历表并获取所有行
oTable.getElementsByTagName(“tr”)
,最后获取所有单元格
。getElementsByTagName(“td”)
innerText

以下示例显示如何将网页“赔率比较”选项卡中的所有表格数据提取到Excel工作表:

选项显式
子测试\u获取\u数据\u www\u flashscore\u com()
Dim aData()
“干净的床单
工作表(1).单元格.删除
'从网站检索内容,放入二维数组
aData=GetData()
'将数组输出到工作表
输出表(1)。单元格(1,1),aData
MsgBox“已完成”
端接头
函数GetData()
作为对象的Dim oIE
作为对象的模糊cTables
作为对象可旋转
乌鸦
作为对象的模糊或模糊
Dim aItems()
Dim aRows()
作为对象的Dim cCells
我想我会坚持多久
Dim j尽可能长
Set oIE=CreateObject(“InternetExplorer.Application”)
与爱
'导航到目标网页
.Visible=True
.导航“http://www.flashscore.com/basketball/"
'等待网页准备就绪
执行While.Busy或Not.readyState=4:DoEvents:Loop
Do Until.document.readyState=“complete”:DoEvents:循环
Do While TypeName(.document.getElementById(“fscon”)=“Null”:DoEvents:Loop
'切换到赔率标签
.document.parentWindow.execScript_
“setNavigationCategory(4);pgenerate(真、0、假、假、2);e_t.track_-click('iframe-bookmark-click'、'赔率');”和“javascript”
Do Until.document.getElementById(“预加载”).Style.display=“无”:DoEvents:Loop
'获取所有表节点
Set cTables=.document.getElementById(“fs”).getElementsByTagName(“表格”)
'将所有行放入字典以计算总行数
使用CreateObject(“Scripting.Dictionary”)
'处理所有表
对于CTABLE中的每个oTable
'获取表中的所有行节点
Set cRows=oTable.getElementsByTagName(“tr”)
'处理所有行
每一只乌鸦
“把每一行都放到字典里
Set.Item(.Count)=oRow
下一个
下一个
'从字典中检索数组
aItems=.Items()
以
'redim第一维度等于总行数
无线电广播(1对UBound(aItems)+1,1对1)
'处理所有行
对于i=1到UBound(aItems)+1
设置oRow=aItems(i-1)
'获取行中的所有单元格节点
Set cCells=aItems(i-1).getElementsByTagName(“td”)
'处理所有单元格
对于j=1至C长度
'如有必要,放大第二个尺寸
如果UBound(aRows,2)
我的网页赔率比较选项卡内容如下:

它给出了输出:


非常感谢您的时间和努力。非常感谢您。不过,现在我比以前更困惑了,只是想花点时间再解决一下。非常感谢。另一个很好的解决方案