我写了一些代码来从网页中提取一些统计数据。几乎所有的信息都能通过,但玩家的名字是唯一没有返回的信息。我已经尝试了不同版本的名称(完整的,短的,第一个,最后一个),但似乎没有工作,但。该代码与返回的所有其他信息完全相同。我一直在使用搜索引擎来获取文本,因为我发现网站不时地更改班级名称。这是我的代码:
Set ch = New Selenium.ChromeDriver
ch.AddArgument "--headless"
ch.Get "https://www.euroleaguebasketball.net/eurocup/game-center/2023-24/cedevita-olimpija-ljubljana-joventut-badalona/U2023/12/#boxscore"
Set sht = Sheets("Sheet1")
Rw = 1
Base = "//*[@id='main']/div/div/div[2]/div/div[3]/div/div[2]/div/div[1]/div/div[1]/"
For Rw = 1 To 20
Exists = ch.FindElementsByXPath(Base & "div[1]/div[" & Rw & "]/span").Count
If Exists > 0 Then
sht.Cells(Rw, 1) = ch.FindElementByXPath(Base & "div[1]/div[" & Rw & "]/span").Text
sht.Cells(Rw, 2) = ch.FindElementByXPath(Base & "div[1]/div[" & Rw & "]/a/div[1]").Text
sht.Cells(Rw, 3) = ch.FindElementByXPath(Base & "div[2]/div[1]/div[" & Rw & "]/div/div[1]").Text
sht.Cells(Rw, 4) = ch.FindElementByXPath(Base & "div[2]/div[1]/div[" & Rw & "]/div/div[2]").Text
sht.Cells(Rw, 5) = ch.FindElementByXPath(Base & "div[2]/div[2]/div[" & Rw & "]/div/div[1]").Text
sht.Cells(Rw, 6) = ch.FindElementByXPath(Base & "div[2]/div[2]/div[" & Rw & "]/div/div[2]").Text
sht.Cells(Rw, 7) = ch.FindElementByXPath(Base & "div[2]/div[3]/div[" & Rw & "]/div/div[1]").Text
sht.Cells(Rw, 8) = ch.FindElementByXPath(Base & "div[2]/div[3]/div[" & Rw & "]/div/div[2]").Text
sht.Cells(Rw, 9) = ch.FindElementByXPath(Base & "div[2]/div[4]/div[" & Rw & "]/div/div[1]").Text
sht.Cells(Rw, 10) = ch.FindElementByXPath(Base & "div[2]/div[4]/div[" & Rw & "]/div/div[2]").Text
sht.Cells(Rw, 11) = ch.FindElementByXPath(Base & "div[2]/div[5]/div[" & Rw & "]/div/div[1]").Text
sht.Cells(Rw, 12) = ch.FindElementByXPath(Base & "div[2]/div[5]/div[" & Rw & "]/div/div[2]").Text
sht.Cells(Rw, 13) = ch.FindElementByXPath(Base & "div[2]/div[5]/div[" & Rw & "]/div/div[3]").Text
sht.Cells(Rw, 14) = ch.FindElementByXPath(Base & "div[2]/div[6]/div[" & Rw & "]/div/div[1]").Text
sht.Cells(Rw, 15) = ch.FindElementByXPath(Base & "div[2]/div[6]/div[" & Rw & "]/div/div[2]").Text
sht.Cells(Rw, 16) = ch.FindElementByXPath(Base & "div[2]/div[6]/div[" & Rw & "]/div/div[3]").Text
sht.Cells(Rw, 17) = ch.FindElementByXPath(Base & "div[2]/div[7]/div[" & Rw & "]/div/div[1]").Text
sht.Cells(Rw, 18) = ch.FindElementByXPath(Base & "div[2]/div[7]/div[" & Rw & "]/div/div[2]").Text
sht.Cells(Rw, 19) = ch.FindElementByXPath(Base & "div[2]/div[8]/div[" & Rw & "]/div/div[1]").Text
sht.Cells(Rw, 20) = ch.FindElementByXPath(Base & "div[2]/div[8]/div[" & Rw & "]/div/div[2]").Text
sht.Cells(Rw, 21) = ch.FindElementByXPath(Base & "div[2]/div[9]/div[" & Rw & "]/div/div[1]").Text
sht.Cells(Rw, 22) = ch.FindElementByXPath(Base & "div[2]/div[9]/div[" & Rw & "]/div/div[2]").Text
End If
Next Rw
我得到了这个:
所以数字是拉在(我可以修复格式),但名称只是空白。
1条答案
按热度按时间b09cbbtk1#
首先,不要使用绝对
XPATH
,它不可能读取你的代码,而且绝对路径很难支持。在XPATH
树中改变DOM
中的一个元素会破坏定位器。而不是它,使用缩短的'相对'声明。
Reference
例如,
Base
变量的唯一定位器为//div[contains(@class, 'is-active')]//*[contains(@class, 'game-box-scores-table-grouped-tab_tableGrouped_')]
很容易找到它-你去你的基本元素,看看它的属性。你会发现它的品位似乎是独一无二的。搜索类
game-box-scores-table-grouped-tab_tableGrouped_'
,得到2个元素。你只需要1。你查看它的父类,你会发现,你的表的父类之一有类is-active
,它指向可见表。我们得到了短而清晰的
Base
。然后我们寻找球员的名字。检查元素,我们看到它有唯一的类部分playerFullName
,它只属于name。它的XPath定位器是
//*[contains(@class, 'playerFullName’)]
所以我们只需要得到元素数组,使用这个选择器,并通过索引(在您的情况下为
Rw
)获得所需的行