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

Python+Selenium爬TripAdvisor时driver.find_elements()返回空列表求助

解决TripAdvisor爬虫Selenium定位元素返回空列表的问题

你在爬取TripAdvisor酒店评论页面时,使用Selenium的By.CLASS_NAME定位元素返回空列表,更换XPath、CSS选择器或父级类名也无效,核心问题出在CLASS_NAME的使用逻辑错误,以及缺少动态元素的等待机制。

问题根源

  • By.CLASS_NAME仅支持传入单个类名,你写的'teHYY _R Me S4 H3'是多个类名的组合,Selenium会将其当作一个完整的类名去匹配,而页面中不存在该类,因此返回空列表。
  • 评论内容属于动态加载元素,若执行查找操作时元素尚未渲染完成,也会导致定位失败。

解决方案

1. 改用CSS_SELECTOR定位多类名元素

用CSS选择器处理多类名元素,多个类名之间用.连接,并添加显式等待确保元素加载完成:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待评论入住日期元素加载
dateRows = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.teHYY._R.Me.S4.H3'))
)
for dates in dateRows:
    print(dates.text)

# 等待评论评分元素加载
ratingRows = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.Hlmiy.F1'))
)
for ratings in ratingRows:
    # 评分元素为图标,需获取aria-label属性值
    print(ratings.get_attribute('aria-label'))

2. 处理动态评分元素的内容获取

TripAdvisor的评分以图标形式展示,直接调用text无法获取内容,需通过get_attribute('aria-label')提取属性中的评分信息(格式如"5.0 of 5 bubbles")。

3. 触发滚动加载更多评论

若页面仅加载了部分评论,需滚动页面触发动态加载:

# 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 等待新评论加载完成
WebDriverWait(driver, 5).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.teHYY._R.Me.S4.H3'))
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:05:17