excel - 如何在使用 iframe 的网页上使用 selenium 和 vba 查找表格?

标签 excel vba selenium iframe web-scraping

下面的代码直到几天前才运行到 url,找到表并将表的内容导入 Excel。然后我做了一些其他的格式化来让表格进入适当的行和列。但是现在这段代码找不到表。我不完全理解“Set a = .FindElementsByTag("iframe")(2)”和“.SwitchToFrame 1”。但我的一般理解是,这部分代码切换到不同的框架,然后提取内部 url,然后用于从表中获取数据。

我需要帮助确定要更改的内容以获得预期的“url2”,即“https://docs.google.com/spreadsheets/d/e/2PACX-1vT__QigQ9cJV03ohUkeK5dgQjfAbJqxrc68bXh9Is1WFST8wjxMxDy7hYUCFHynqRvInsANUI22GdIM/pubhtml?gid=817544912&single=true&chrome=false&widget=false&headers=false”url。 *注意:我不使用这个 docs.google 网址,因为我不知道这个网址是否会定期更改。我知道 rosterresource.com/mlb-roster-grid 网址将保持一致。

我尝试更改“Set a = .FindElementsByTag("iframe")(2)”和“.SwitchToFrame 1”的一些整数,但我这样做是盲目的,因为我不熟悉这种代码艺术。

Sub GetRRgrid()
    '"Selenium type library" is a reference used
    Dim d As WebDriver, a As Object
    Set d = New ChromeDriver
    Const url = "https://www.rosterresource.com/mlb-roster-grid/"

    With d
        .Start "Chrome"
        .Get url

        Set a = .FindElementsByTag("iframe")(2)

        .SwitchToFrame 1

        url2 = .FindElementByCss("iframe").Attribute("src")
        .Get url2
        ele = .FindElementByTag("tbody").Attribute("innerText")
        d.Close
    End With
    ' other processes t format the data after it is imported
end sub
````

最佳答案

获取 iframe 并切换到它:

您需要将 iframe 元素(标识符参数)传递给 SwitchToFrame ,然后您就在该文档中并且可以与其内容进行交互。无需.get与 Selenium 有关。您必须切换到 .SwitchToDefaultContent返回父文档。

您可以通过多种方式识别有问题的 iframe。现代浏览器针对 css 选择器进行了优化,所以我通常使用这些选择器。 css 等价于

.FindElementByTag("iframe")


.FindElementByCss("iframe")

您的 iframe 是第一个(也是唯一一个),因此我不会费心收集一组 webElement 并对其进行索引。此外,您想尽可能地尝试使用单个元素的短选择器以提高效率。

VBA:
Option Explicit
Public Sub Example()
    Dim d As WebDriver
    Const URL As String = "https://www.rosterresource.com/mlb-roster-grid/"
    Set d = New ChromeDriver

    With d
        .Start "Chrome"
        .get URL

        .SwitchToFrame .FindElementByCss("iframe")

        Stop

        .Quit
    End With
End Sub

写入 Excel (.AsTable.ToExcel) :

我刚刚发现,还没有在任何地方看到记录,并且对此感到兴奋的是,有一种方法可以将表格直接写入 Excel:
Option Explicit
Public Sub Example()
    Dim d As WebDriver
    Const URL As String = "https://www.rosterresource.com/mlb-roster-grid/"
    Set d = New ChromeDriver

    With d
        .Start "Chrome"
        .get URL

        .SwitchToFrame .FindElementByTag("iframe")
        .FindElementByCss(".waffle").AsTable.ToExcel ThisWorkbook.Worksheets("Sheet1").Range("A1")
        Stop

        .Quit
    End With
End Sub

关于excel - 如何在使用 iframe 的网页上使用 selenium 和 vba 查找表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55654144/

相关文章:

VBA - 下标超出范围

excel - 如何在 For Each 循环语句中跳过范围中的第一个元素?

java - 即使程序在 excel 中将 resukt FALSE 放入数据中,数据仍然匹配 - Selenium Web 驱动程序

javascript - 从 cucumber 步骤调用 javascript

java - 如何使用网络驱动程序关闭网页上的模式对话框 - Java

vba - 在VBA宏中使用日期变量?

vba - Excel 中的随机数数组

excel - 将工作表移动到新窗口

r - 导入具有多个工作表的 excel 工作簿

python - 如何以编程方式将 csv 导入 Excel 并使用 Excel 格式?