You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium爬取咖啡因数据库网站遇元素定位问题求助

爬取Caffeine Informer数据库时Selenium定位失败的问题排查

问题描述

尝试用Python Selenium爬取https://www.caffeineinformer.com/the-caffeine-database的数据,已编写代码如下,但无法定位品牌名称及表格列数据,目标数据默认在激活的'All'标签页下:

from selenium import webdriver

url = "https://www.caffeineinformer.com/the-caffeine-database"

cService = webdriver.ChromeService(executable_path = 'C:/Users/Username/Downloads/chromedriver-win32/chromedriver-win32/chromedriver.exe')
driver = webdriver.Chrome(service = cService)
driver.get(url)
driver.maximize_window()
brand = driver.find_element("xpath",'//div[@class="dataTable-table"]//tbody/tr/td[2]')

排查原因及解决方案

1. 页面元素未完全加载

Selenium执行find_element时,表格可能还没通过JavaScript渲染完成,导致元素不存在。解决方法是使用显式等待,等待目标元素出现后再进行定位:

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

url = "https://www.caffeineinformer.com/the-caffeine-database"

cService = webdriver.ChromeService(executable_path='C:/Users/Username/Downloads/chromedriver-win32/chromedriver-win32/chromedriver.exe')
driver = webdriver.Chrome(service=cService)
driver.get(url)
driver.maximize_window()

# 最多等待10秒,直到目标元素出现
wait = WebDriverWait(driver, 10)
brand = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@class="dataTable-table"]//tbody/tr/td[2]')))
print(brand.text)

driver.quit()

2. 元素定位路径错误

按F12打开开发者工具检查页面实际DOM结构:

  • 确认dataTable-table类名是否正确,是否存在嵌套层级变化
  • 验证td的索引是否对应品牌列:该网站表格的品牌列实际是第2个td(XPATH索引从1开始),但如果DOM存在隐藏列,索引可能偏移,需手动确认

3. 动态数据加载机制

该网站表格数据通过JavaScript动态加载,直接同步定位会失败。显式等待能解决大部分动态加载问题,如果仍无效,可额外等待页面完全加载:

# 等待页面加载完成
while driver.execute_script("return document.readyState") != "complete":
    pass

内容的提问来源于stack exchange,提问作者KVemuri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:45:28