下面的代码直到几天前才运行到 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/