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

Selenium无法定位子元素 如何获取foodpanda页无限滚动的餐厅列表

解决方案

你原有代码的核心问题出在XPath选择逻辑和无限滚动的终止判断上,按下面的方案调整即可实现全量餐厅数据提取:

  1. 优化XPath选择器
    不需要通过序号递增逐个匹配li元素,直接匹配ul.vendor-list下所有li子元素即可,和li元素的类名是否统一无关,正确写法是:
    //ul[@class="vendor-list"]/li

  2. 优化无限滚动逻辑
    不需要设置全局变量计数序号,只要每次滚动后对比当前加载的餐厅元素总数,总数不再变化就说明已经到达页面底部,即可终止滚动。

修正后可直接运行的代码:

import time

def get_all_restaurants():
    # 记录上一次加载完成的餐厅数量,用于判断是否停止滚动
    last_restaurant_count = 0
    while True:
        # 滚动到当前页面底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        # 等待新的餐厅数据加载完成,网速慢可以把3改成4或5
        time.sleep(3)
        # 抓取当前所有餐厅元素
        restaurant_list = driver.find_elements_by_xpath('//ul[@class="vendor-list"]/li')
        current_count = len(restaurant_list)
        # 两次加载的数量一致,说明已经没有更多数据
        if current_count == last_restaurant_count:
            break
        last_restaurant_count = current_count
    return restaurant_list

额外注意事项:

  • 如果页面有反爬机制触发了人机验证,需要额外加验证处理逻辑
  • 拿到所有li元素后,再逐个提取每个餐厅的名称、评分、配送费等信息即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 11:06:07