无法使用 selenium python 获取多个跨度类文本
Posted
技术标签:
【中文标题】无法使用 selenium python 获取多个跨度类文本【英文标题】:Can't get multiple span class text with selenium python 【发布时间】:2022-01-15 02:38:43 【问题描述】:我在尝试抓取 flashscore 比赛摘要时遇到错误。例子: flashscore
我想获得例如这些页面中的所有结果,但是执行 driver.find_element_by_class("h2h__result") 它只需要第一个结果。 (放在 obv 中) 如果我尝试做 driver.find_elements_by_class 我会出错,我不明白为什么。 代码示例:
driver.get("https://www.flashscore.com/match/Qs85KCdA/#h2h/overall")
time.sleep(2)
h2h = driver.find_elements_by_class_name("rows")
for x in h2h:
p = driver.find_element_by_css_selector("span.h2h__regularTimeResult")
print(p.text)
有人可以帮助我了解我在哪里做错了吗?非常感谢你们。
【问题讨论】:
【参考方案1】:类名rows
的元素突出显示整个表格。使用类名h2h__row
以便所有行都聚焦并能够从该特定行中提取详细信息。
在xpaths
下方尝试获取元素。
from selenium.webdriver.common.by import By
driver.get("https://www.flashscore.com/match/Qs85KCdA/#h2h/overall")
rows = driver.find_elements(By.XPATH,"//div[@class='h2h__row']")
for row in rows:
results = row.find_element(By.XPATH,".//span[@class='h2h__regularTimeResult']") # Use a dot in the xpath to find elements with in an element
print(results.text)
也可以使用下面的CSS_SELECTOR
直接获取元素。
regularTimeResult = driver.find_elements(By.CSS_SELECTOR,"div.h2h__row span.h2h__regularTimeResult")
for item in regularTimeResult:
print(item.text)
更新:
rows = driver.find_elements(By.XPATH,"//div[@class='h2h__row']")
for row in rows:
results = row.find_element(By.XPATH,".//span[@class='h2h__regularTimeResult']") # Use a dot in the xpath to find elements with in an element
if "0 : 0" not in results.text:
print(results.text)
【讨论】:
感谢您提供完美的解决方案。如果我要从跨度文本中删除 0:0 分数怎么办?我已经尝试了一切,甚至 translate() 或 replace() 但没有任何效果。 @MartinCvetanoski - 已更新答案。只需添加if loop
即可过滤掉0 - 0
。如果答案有帮助,请接受。单击可用于答案的正确标记选项。
非常感谢你,伙计。我会做的当然是你的最低限度。当我尝试做 print(len(results.text)) 时的最后一件事,它只给了我 5 个元素,而不是它应该做的 11 个。我应该在 for 循环中添加一个 append() 还是出了什么问题?很抱歉,我知道我用这些问题打扰了你。再次抱歉。
Length of results.text
表示 0 : 0
的长度是 5。我认为你应该在 for 循环之外做 rows
的长度。以上是关于无法使用 selenium python 获取多个跨度类文本的主要内容,如果未能解决你的问题,请参考以下文章
Selenium 在使用 Python 时无法单击“获取数据”按钮