Selenium通过Xpath抓取球员薪资数据时返回空值的原因咨询
问题原因与解决思路
空值产生的核心原因
- 异步渲染延迟:Selenium执行
find_elements时,页面初始DOM已加载,但Hoopshype的球员数据是异步加载的——开头的<td class="name">下的<a>标签先被创建,对应文本还没填充完成,所以p.text返回空字符串。 - 隐藏的空元素:页面中存在一些不可见的(比如CSS设置
display:none)<td class="name">元素,内部的<a>标签没有文本内容。浏览器开发者工具默认不会显示隐藏元素,所以你在Chromium里检查XPath看不到这些空元素,但Selenium会抓取所有匹配XPath的元素,无论是否可见。
针对性解决办法
1. 等待元素完全渲染后抓取
使用WebDriverWait等待目标元素可见,确保文本已经加载完成:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 替换原代码中players的抓取逻辑 wait = WebDriverWait(driver, 10) # 只抓取有非空文本的<a>标签 players = wait.until(EC.visibility_of_all_elements_located((By.XPATH, '//td[@class="name"]/a[text()!=""]')))
2. 过滤空文本元素
如果不想修改等待逻辑,可以直接在生成列表时过滤掉空值:
players_list = [p.text.strip() for p in players if p.text.strip()]
内容的提问来源于stack exchange,提问作者hypnoticbanana
相关产品推荐
相关产品推荐

