直到几天前,下面的代码都可以工作到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
````
答案 0 :(得分:0)
获取iframe并切换到它:
您需要将iframe元素( identifier 参数)传递给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
答案 1 :(得分:0)
这就是我最后为这个问题所做的事情。感谢QHarr的指导。
Public Sub GetRRrostergrid()
Dim d As WebDriver
Const URL As String = "https://www.rosterresource.com/mlb-roster-grid/"
Dim URL2 As String
Set d = New ChromeDriver
Sheet20.Activate
With d
.Start "Chrome"
.Get URL
URL2 = .FindElementByClass("post_content").FindElementByTag("iframe").Attribute("src")
.Get URL2
.FindElementByCss(".waffle").AsTable.ToExcel ThisWorkbook.Worksheets("RRchart").Range("b1")
.Quit
End With
End Sub