使用Python Selenium无法获取币安期货页面tbody下tr标签数据的问题
解决Selenium无法获取币安期货页面tbody下tr数据的问题
问题原因
- 币安该页面采用动态渲染,直接调用
find_elements时,目标元素可能还没加载完成,导致返回空结果。 - 你的代码定位的是
tbody标签本身,而非其下的tr元素,自然拿不到你需要的行数据。
可行解决方案
下面是完整的代码示例,包含等待元素加载、提取数据和统计tr数量的逻辑:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化浏览器驱动 driver = webdriver.Chrome() driver.get("https://www.binance.com/en/futures-activity/leaderboard/user/um?encryptedUid=14507FCBFF9FBE584EDDEC628C4593B8") try: # 显式等待tbody加载完成,最长等待10秒(可根据网络情况调整) tbody = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.TAG_NAME, "tbody")) ) # 获取tbody下所有的tr元素 tr_elements = tbody.find_elements(By.TAG_NAME, "tr") # 输出tr标签数量 print(f"页面中共有 {len(tr_elements)} 个tr标签") # 提取每个tr中的数据到列表 result_list = [] for tr in tr_elements: # 获取当前tr下所有td的文本,过滤掉空内容 row_data = [td.text.strip() for td in tr.find_elements(By.TAG_NAME, "td") if td.text.strip()] result_list.append(row_data) # 打印提取到的数据 print("提取到的行数据:") for row in result_list: print(row) finally: # 关闭浏览器 driver.quit()
关键细节说明
- 显式等待:这是处理动态加载页面的核心,
WebDriverWait会等待目标元素出现在DOM中再执行后续操作,避免因元素未加载导致的空结果。 - 局部定位:先定位到tbody再查找内部的tr,能避免全局查找时匹配到页面其他无关的tr元素。
- 数据过滤:提取td文本时去掉空白字符并过滤空内容,保证最终数据的整洁性。
内容的提问来源于stack exchange,提问作者sefatheking
相关产品推荐
相关产品推荐

