我试图从1930年以来的足球世界杯中获得分数,在这个链接中列出了比赛的内容,并点击球队中的一个新窗口弹出我正在寻找的总结。我的问题是,在HTML源代码中,我没有像通常那样看到带有href的<a>标记,而是尝试用以下VBA代码模拟单击事件:
链接:http://www.flashscore.com/soccer/world/world-cup-1990/results/
Vba代码:
Sub Test()
Dim URL As String
Dim IE As InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim TDelements As IHTMLElementCollection
Dim TDelement As HTMLTableCell
Dim i As Integer
URL = "http://www.flashscore.com/soccer/world/world-cup-1990/results/"
Set IE = New InternetExplorer
With IE
.Navigate URL
.Visible = True
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
Set HTMLdoc = .Document
End With
Set TDelements = HTMLdoc.getElementsByTagName("td")
For Each TDelement In TDelements
If TDelement.Title = "Click for match detail!" Then
TDelement.Click
End If
Next
IE.Quit
End Sub发布于 2014-03-10 21:52:41
我会以不同的方式来做这件事,因为你想要达到的目标需要一个巨大的开销,并且可能会让你对链接、动作、循环以及诸如此类的东西大惊小怪。与其模拟这些操作,不如更好地模拟这些操作的结果。
以德国-阿根廷比赛为例.当您单击它时,它会打开以下弹出:

这里特别要注意的是弹出的URL。直观地说,URL有一些奇怪的组合,可能是唯一的标识符。我们首先检查的是刚才单击的表中该行的标记。

检查突出显示的部分:它类似于我们弹出的地址,尽管在开头有四个额外的字符。通过折叠行并与其他行进行交叉检查,我们得出结论,这些行使用类似的格式:

将g_1_从tr标记的id属性中移除将为每个匹配提供唯一标识符。我将采取消毒id从意大利-英格兰比赛,我将输入到一般的网址。当弹出的地址栏被锁定时,我们将在另一个选项卡中这样做:

瞧。该页在另一个选项卡中打开,从那里您可以从匹配摘要中获得所需的内容。您甚至可以通过将#match-summary更改为#h2h;overall来检查头对头。

这有什么关系?
因为这样更安全。由于您使用的是Excel,所以在您的控件中有工作表。最安全的方法是将所有这些id属性从每一行记录到一列中。然后在该列上循环,适当地连接它以生成目标URL。
然后遍历URL,从您正在寻找的精确页面中获得所需的内容。此时不再需要原始链接/表,因为几乎所有的细节都在“摘要”页面中。
希望这会有帮助,祝你好运。
后续编辑
由于我觉得没有发布任何代码有点内疚,下面是我尝试为世界杯部分生成id值的尝试。请注意,我对代码有些随意,所以修改它以更好地适应您的方法。我将只提供获取id值的方法。其他一切都取决于你。
Sub Test()
Dim URL As String
Dim IE As New InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim dictObj As Object: Set dictObj = CreateObject("Scripting.Dictionary")
Dim tRowID As String
URL = "http://www.flashscore.com/soccer/world/world-cup-1990/results/"
With IE
.Navigate URL
.Visible = True
Do Until .ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
Set HTMLdoc = .Document
End With
With HTMLdoc
'Target the set of tables.
Set tblSet = .getElementById("fs-results")
'Index starts at 0. World Cup Playoffs is (0), World Cup is (1),
'Qualifiers is (2), etc... Targeting tbody right away, as there is
'only one (1) tbody tag per row anyway.
Set mTbl = tblSet.getElementsByTagName("tbody")(1)
Set tRows = mTbl.getElementsByTagName("tr")
With dictObj
'If if value is not yet in dictionary, store it.
For Each tRow In tRows
'Remove the first four (4) characters.
tRowID = Mid(tRow.getAttribute("id"), 5)
If Not .Exists(tRowID) Then
.Add tRowID, Empty
End If
Next tRow
End With
End With
'Print out each of the ID values.
For Each Key In dictObj
Debug.Print Key
Next Key
Set IE = Nothing
End Sub它返回世界杯表(而不是季后赛!)的下列id值:
04LfR6G7
6RNojjg8
nww8zBgL
t0xCZU8R
dKY0Pgu3
jsY4ODf9
K4YcDdti
2qM7lD3j
bXvdGk2k
tdU0F9He
65hR8YfM
lUsW7hAS
jBqaxXO8
YZY3yivF
n1HjSn11
hvInTSoe
rHUdQZPd
xfS51jmd
ncyhHVnq
4b34kglp
O0kz7LJH
lpQE9EuG
UHlQLBvS
fNQAAfQ9
CKpewD92
EmJrU8Wl
KnT4ETW1
nRnnVlHr
b3T12WXk
jwUc3CIq
n9RDMiPL
pAjW714B
GznS8sk5
GWR6BzB3
UXW8NX9F
beX1CGec希望这能帮到你更多。请务必阅读评论。祝好运!
https://stackoverflow.com/questions/22311579
复制相似问题