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

使用Selenium爬取Tripadvisor时无法点击下一页按钮如何解决

问题核心原因

  • 你使用的绝对路径XPath稳定性极差,Tripadvisor页面DOM结构只要有轻微调整(比如插入运营位、调整模块顺序),路径就会完全失效
  • 没有配置元素等待逻辑,headless模式下页面加载速度波动大,经常出现元素还没渲染完成就执行定位操作的情况,直接返回找不到元素的报错
  • find_elements_by_class_name方法仅支持传入纯类名参数,你写的div._2Q7zqOgW带了标签前缀,会直接匹配失败
  • 你用到的_2Q7zqOgW这类带下划线前缀的类名是Tripadvisor前端打包自动生成的动态哈希类名,平台会定期更新后缀,完全不适合作为定位依据

修复后的可用代码

!pip install selenium
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
import sys
sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')
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
from tqdm import tqdm_notebook as tqdm
import pandas
import json
import pprint

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
# 加UA伪装,避免被反爬识别为headless浏览器
chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36')

wd = webdriver.Chrome('chromedriver',options=chrome_options)
wd.get("https://www.tripadvisor.com/Restaurants-g187849-Milan_Lombardy.html")
wait = WebDriverWait(wd, 15)

# 用更稳定的aria-label属性定位下一页按钮,不受结构调整影响
next_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//a[contains(@aria-label, "Next page")]')))
next_btn.click()

# 用测试专属属性定位餐厅列表,不会随前端打包变更
list_restaurants = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div[data-test-target="restaurants-list-item"]')))
print(len(list_restaurants))

全量爬取补充说明

如果需要爬取所有分页的餐厅,只需要加循环判断即可:每次翻页后判断下一页按钮是否还存在/可点击,直到按钮处于禁用状态时终止循环即可。

内容的提问来源于stack exchange,提问作者Gloria Dalla Costa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:09:01