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

2023-12-11

我是创建 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

尝试进行循环,直到网页准备好,如中所述this and this答案(你知道,替换WScript.Sleep with DoEvents对于 VBA)。

Inspect the target element on the webpage with Developer Tools (using context menu or pressing F12). HTML content is as follows:

<a href="#" onclick="setNavigationCategory(4);pgenerate(true, 0,false,false,2); e_t.track_click('iframe-bookmark-click', 'odds');  return false;">bwin.fr Odds</a>

正如你所看到的onclick属性,实际上你可以尝试从中执行 jscript 代码而不是调用click method:

objIE.document.parentWindow.execScript "setNavigationCategory(4);pgenerate(true, 0,false,false,2); e_t.track_click('iframe-bookmark-click', 'odds');", "javascript"

更进一步,您可以找到以下微调器元素,该元素在单击选项卡后加载数据时会短暂出现:

<div id="preload" class="preload pvisit" style="display: none;"><span>Loading ...</span></div>

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

Do Until objIE.document.getElementById("preload").style.display = "none"
    DoEvents
Loop

下一步是提取您需要的数据。您可以从中央块获取所有表:.document.getElementById("fs").getElementsByTagName("table"),循环遍历表并获取所有行oTable.getElementsByTagName("tr"),最后得到所有单元格.getElementsByTagName("td") and innerText.

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

Option Explicit

Sub Test_Get_Data_www_flashscore_com()

    Dim aData()

    ' clear sheet
    Sheets(1).Cells.Delete
    ' retrieve content from web site, put into 2d array
     aData = GetData()
    ' output array to sheet
    Output Sheets(1).Cells(1, 1), aData
    MsgBox "Completed"

End Sub

Function GetData()

    Dim oIE As Object
    Dim cTables As Object
    Dim oTable As Object
    Dim cRows As Object
    Dim oRow As Object
    Dim aItems()
    Dim aRows()
    Dim cCells As Object
    Dim i As Long
    Dim j As Long

    Set oIE = CreateObject("InternetExplorer.Application")
    With oIE
        ' navigate to target webpage
        .Visible = True
        .navigate "http://www.flashscore.com/basketball/"
        ' wait until webpage ready
        Do While .Busy Or Not .readyState = 4: DoEvents: Loop
        Do Until .document.readyState = "complete": DoEvents: Loop
        Do While TypeName(.document.getElementById("fscon")) = "Null": DoEvents: Loop
        ' switch to odds tab
        .document.parentWindow.execScript _
            "setNavigationCategory(4);pgenerate(true, 0,false,false,2); e_t.track_click('iframe-bookmark-click', 'odds');", "javascript"
        Do Until .document.getElementById("preload").Style.display = "none": DoEvents: Loop
        ' get all table nodes
        Set cTables = .document.getElementById("fs").getElementsByTagName("table")
        ' put all rows into dictionary to compute total rows count
        With CreateObject("Scripting.Dictionary")
            ' process all tables
            For Each oTable In cTables
                ' get all row nodes within table
                Set cRows = oTable.getElementsByTagName("tr")
                ' process all rows
                For Each oRow In cRows
                    ' put each row into dictionary
                    Set .Item(.Count) = oRow
                Next
            Next
            ' retrieve array from dictionary
            aItems = .Items()
        End With
        ' redim 1st dimension equal total rows count
        ReDim aRows(1 To UBound(aItems) + 1, 1 To 1)
        ' process all rows
        For i = 1 To UBound(aItems) + 1
            Set oRow = aItems(i - 1)
            ' get all cell nodes within row
            Set cCells = aItems(i - 1).getElementsByTagName("td")
            ' process all cells
            For j = 1 To cCells.Length
                ' enlarge 2nd dimension if necessary
                If UBound(aRows, 2) < j Then ReDim Preserve aRows(1 To UBound(aItems) + 1, 1 To j)
                ' put cell innertext into array
                aRows(i, j) = Trim(cCells(j - 1).innerText)
                DoEvents
            Next
        Next
        .Quit
    End With
    ' return populated array
    GetData = aRows

End Function

Sub Output(objDstRng As Range, arrCells As Variant)

    With objDstRng
        .Parent.Select
        With .Resize( _
                UBound(arrCells, 1) - LBound(arrCells, 1) + 1, _
                UBound(arrCells, 2) - LBound(arrCells, 2) + 1)
            .NumberFormat = "@"
            .Value = arrCells
            .Columns.AutoFit
        End With
    End With

End Sub

我的网页赔率比较选项卡内容如下:

webpage content

它给出输出:

output

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在打开新网页后继续VBA代码 的相关文章

  • 在 Excel 中自动复制和粘贴特定范围的最佳方法是什么?

    我对 VBA 非常陌生 我想自动化一项任务 但不知道从哪里开始 我有一个如下所示的数据集 样本数据 https i stack imgur com jxqFI png 我想做的是循环遍历 A 列 如果其中有内容 始终是电子邮件 请选择所有行
  • 使用“Openxml writer”合并 Excel 中的单元格

    我想合并单元格是excel 通过使用 DOM 方法 我可以轻松做到这一点 但由于我的 Excel 文件太大 当我尝试获取工作表时 它会抛出内存不足异常 所以我必须使用SAX方法来读取excel文件 但我不知道如何用这种方法合并单元格 查了很
  • IE Facebook 应用程序 iFrame 上的会话丢失

    当用户使用 Internet Explorer 时 我的 Facebook 应用程序出现问题 我的应用程序作为 Canvas 页面加载到 iFrame 中 回发后 Cookie 和 Session 将丢失 Firefox 根本不会发生这种情
  • 在Excel VBA中将图像(jpg)转换为base64?

    我需要在 Excel 中转换图像 或通过VBA 转为base64 最后我将进行XML输出 我怎样才能做到这一点 我需要引用 DOM 吗 我一直在读书这个问题 https stackoverflow com questions 169907
  • 比较 EXCEL 中的列本身以检查其是否有重复值

    假设我有一个名为项目代码的列 如下所示 row code 1 A123 2 B123 n A123 代码列中的值可能出现多次 如何使用Excel公式或Excel中的任何方法检查列中的重复记录 Thanks 根据您使用的 Excel 版本 您
  • 如何在不知道id的情况下从内页获取父iframe元素?

    让我们想象一下我有这样的东西 div div test html 是空页面 自定义hash属性始终具有不同的值 出于安全原因两个页面位于同一域 iframe 元素的数量和顺序是随机的 我的问
  • Excel 接受一些字符,而 OpenXml 有错误

    我有一个字符串 我想使用 C 中的 openxml 组件将其导出到 Excel 文件 我的文本有 u001f 字符 而 openxml 对此字符有错误 错误文本 十六进制值 0x1f 是无效字符 我将该测试直接复制到 Excel 中 没有问
  • Excel 2007 从 C# get_Value 始终返回 -2146826265

    我有一个引用 Microsoft Excel 12 0 对象库的小型 C 应用程序 除此之外 它还从 Excel 单元格读取值 它从一些较旧的 Excel xls 文件和一些 2007 文件 xlsx 中读取此值 所有 xls 文件的值都会
  • 等待网页完全加载,然后再使用 python 请求进行抓取

    我目前正在尝试从 LinkedIn 上的特定页面抓取数据 我有一个能够登录 LinkedIn 的脚本 但当我尝试访问包含数据的页面时遇到了障碍 当我打电话时requests get data url 我最终得到了 LinkedIn 加载屏幕
  • 从 HTML div 中删除所有文本内容,但保留 HTML 标签和结构

    I have div Here a href is a p Text that I want to p be removed div I want div a href a p p div 删除所有文本但保留 HTML 结构的最简单方法是什
  • 使用 Scala 进行网页抓取 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 jQuery / .data() 避免内存泄漏

    我正在使用 jQuery 动态创建 HTML 元素 现在需要针对它们存储 JavaScript 数据 但是 我现在担心内存泄漏 因为我实际上从未在对象上调用 删除 我 append 和 detach 它们 但从不 remove jQuery
  • 有没有办法监控页面上运行的 JavaScript 函数?

    有没有办法查看页面上正在执行哪些功能 如果我在页面上加载外部脚本 是否可以动态更改函数的功能或阻止其运行 HTML5 http www w3 org TR html5 scripting 1 html establish script bl
  • Python在没有pandas的情况下解码excel表

    我正在尝试在 python 中读取 excel 文件而不使用pandas or xlrd 我一直在尝试将结果转换为bytes to utf 8没有任何成功 xls 文件中的数据 colA colB colC spc 1D0 20190705
  • 从Excel单元格中提取固定长度的数字

    一些类似名称的线程 但仍然无法解决我的问题 我需要从 Excel 字符串中提取固定长度的 NUMBER 值 在我的场景中为 8 位数字 为此目的提供了以下 Excel 公式 MID A1 FIND SUBSTITUTE SUBSTITUTE
  • div 在显示内的定位:IE 10 中的表格单元格

    试图理解为什么 IE9 10 会因为 IE7 8 FF WK 都按预期渲染的内容而感到窒息 有什么技巧可以让 IE 9 10 正确尊重 表格单元格 的固有高度 重要提示 由于多种原因 我无法在 单元格 div 上使用 height 100
  • 从 X、Y、Z 数据、Excel 或其他工具进行 3D 绘图

    我的数据看起来像这样 1000 13 75 2 1000 21 79 21 1000 29 80 02 5000 29 87 9 5000 37 88 54 5000 45 88 56 10000 29 90 11 10000 37 90
  • 主干视图 DOM 元素已删除

    我一直在阅读有关 Backbone js 僵尸 或内存泄漏 问题的信息 基本上 当您不再需要该元素时 您必须从 DOM 中解除绑定并删除该元素 以确保所有事件也被删除 现在 我有一个包含几个容器的单页应用程序 div div div div
  • 如何根据单元格的值更改单元格的格式和文本。 (条件格式)

    您好 我想根据单元格的值更改单元格的填充颜色和文本 假设我有以下价值观 我想让它像这样 对我来说 填充颜色很简单 因为我只需执行条件格式即可 然而 文字却让事情变得困难 如何将单元格值更改为文本 如上面的示例 谢谢 为颜色创建条件格式规则
  • 行编号选择自动填充直到最后[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含数千行的表 我想通过在第一行旁边添加 1 2 3 来对行进行编号 然后选择这些行并拖动到最后以使用递增的数字进行填充 如何自动

随机推荐