使用Selenium爬取网页表格数据返回空列表该如何解决
问题原因
- 页面未完成加载就执行元素查找:你调用
driver.get()后直接查找<tbody>下的<tr>元素,但目标页面的表格是动态渲染的,资源请求和DOM渲染需要一定时间,代码执行时表格还没插入到页面中,所以返回空列表。 - 已废弃的API调用:
find_elements_by_xpath是Selenium 3的旧API,在Selenium 4中已经被移除,如果你使用的是Selenium 4版本,该方法本身就无法正常返回结果。 - 路径转义问题:Windows路径中的反斜杠
\属于转义字符,直接写会导致路径解析错误,建议使用原始字符串或者正斜杠。
修复方案
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium import webdriver # 路径加r标记为原始字符串,避免转义问题 driver = webdriver.Chrome(r'C:\Program Files (x86)\chromedriver.exe') driver.get("https://www.fami-qs.org/certified-companies-6-0.html") # 显式等待最多10秒,直到tbody下的tr元素加载完成 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, "//tbody/tr")) ) # 使用Selenium 4兼容的元素查找写法 tabledata = driver.find_elements(By.XPATH, "//tbody/tr") print(f"共获取到{len(tabledata)}行表格数据") # 可以进一步打印每行内容验证 for tr in tabledata: print(tr.text) # 用完关闭驱动 driver.quit()
额外说明
- 如果等待后仍然获取不到,可以先确认你使用的ChromeDriver版本和本地安装的Chrome浏览器主版本完全匹配,版本不兼容会导致页面渲染监听异常。
- 如果表格存在于iframe中,需要先调用
driver.switch_to.frame()切入对应iframe后再查找元素,当前目标页面的表格不存在iframe嵌套,所以不需要这步操作。
内容的提问来源于stack exchange,提问作者Amen Aziz
相关产品推荐
相关产品推荐

