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

动态预约时段表格抓取问题:Selenium无法定位已预订元素

解决Padelbox预订时段抓取的元素未找到问题

常见问题原因及修正方案

1. Cookie弹窗定位与等待逻辑错误

原代码直接使用find_element定位Cookie按钮,未等待元素加载完成,且XPATH中的class属性包含多余空格,易导致定位失败。建议改用显式等待+CSS选择器,稳定性更强。

2. 时段元素等待条件不合理

presence_of_element_located仅确保元素存在于DOM中,但可能尚未渲染可见,改用visibility_of_all_elements_located能保证元素已加载完成并可交互。

3. Selenium驱动初始化方式过时

旧版的webdriver.Chrome(path)已被弃用,使用Service类初始化驱动可避免版本兼容问题。


修改后的完整代码

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 selenium.webdriver.chrome.service import Service

website = 'https://padelbox.de/koeln-weiden/padelplatz-buchen'
path = '/Users/joeplamers/Downloads/chromedriver_mac_arm64/chromedriver'

# 初始化驱动(新版兼容方式)
service = Service(path)
driver = webdriver.Chrome(service=service)
driver.get(website)
driver.maximize_window()

wait = WebDriverWait(driver, 60)

# 处理Cookie弹窗:等待按钮可点击后执行点击
try:
    cookie_accept_btn = wait.until(ec.element_to_be_clickable(
        (By.CSS_SELECTOR, 'a._brlbs-btn._brlbs-btn-accept-all._brlbs-cursor')
    ))
    cookie_accept_btn.click()
except Exception as e:
    print("Cookie弹窗未出现或点击失败:", e)

# 等待所有时段元素加载可见
wait.until(ec.visibility_of_all_elements_located(
    (By.CSS_SELECTOR, '[data-state="booked"], [data-state="available"]')
))

# 抓取已预订和可用时段元素
booked_elements = driver.find_elements(By.CSS_SELECTOR, '[data-state="booked"]')
available_elements = driver.find_elements(By.CSS_SELECTOR, '[data-state="available"]')

# 输出结果示例
print(f"已预订时段数量: {len(booked_elements)}")
for elem in booked_elements:
    print(f"已预订时段: {elem.text}")

print(f"\n可用时段数量: {len(available_elements)}")
for elem in available_elements:
    print(f"可用时段: {elem.text}")

driver.quit()

额外排查点

  • 若仍无法定位元素,检查页面是否存在iframe:打开浏览器开发者工具,查看时段元素是否嵌套在iframe中,若是需先切换iframe:
    iframe = wait.until(ec.presence_of_element_located((By.TAG_NAME, 'iframe')))
    driver.switch_to.frame(iframe)
    
  • 确认data-state属性的实际取值,可通过浏览器开发者工具查看元素真实属性值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:30:22