You need to enable JavaScript to run this app. 使用Selenium爬取酒店房型与价格时选择器/XPath错误导致无输出的咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium爬取酒店房型与价格时选择器/XPath错误导致无输出的咨询

代码无输出的核心原因排查
  • 定位类名完全错误:目标页面不存在room-type-block类名,find_elements返回空列表,循环逻辑根本不会执行,自然没有任何打印结果
  • 元素取值逻辑错误:Selenium的find_elements_*方法返回WebElement对象列表,不存在.string属性,获取元素文本必须调用元素对象的.text方法
  • 硬等待可靠性不足:房型数据为异步加载,固定time.sleep(5)无法保证元素完全加载,网络波动时会直接定位失败
  • Xpath规则过于脆弱:原XPath全靠多层DOM层级推导,只要页面任意父节点结构微调,规则就会完全失效
正确定位选择器的操作方法
  • 打开目标页面按F12调出开发者工具,用左上角元素选择器点选要爬取的房型名称、价格元素
  • 不要直接复制控制台生成的全路径XPath,优先提取元素自身的稳定特征:比如固定语义类名、data-*自定义属性、唯一文本内容
  • 验证规则有效性:在Elements面板按Ctrl+F输入编写好的CSS选择器/XPath,能精准高亮匹配目标元素、无多余冗余匹配的规则,才可以放到代码中使用
  • 替换硬等待为显式等待,避免等待时间不足或过长的问题
修正后的可运行代码
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

seleniumurl = 'https://www.bestwestern.co.uk/hotels/best-western-mornington-hotel-london-hyde-park-83187/in-2021-06-03/out-2021-06-05/adults-1/children-0/rooms-1'

# 替换为本地chromedriver实际路径
driver = webdriver.Chrome(executable_path='C:\\Users\\Conor\\Desktop\\diss\\chromedriver.exe')
driver.get(seleniumurl)

# 显式等待最多15秒,直到所有房型容器加载完成
wait = WebDriverWait(driver, 15)
# 用稳定的data-testid属性定位所有房型块,替代错误的类名
room_blocks = wait.until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, '[data-testid="room-rate-card"]'))
)

for block in room_blocks:
    # 定位单个房型名称,用text属性取实际文本
    room_name = block.find_element(By.CSS_SELECTOR, '.room-name').text
    # 定位房型对应的价格
    room_price = block.find_element(By.CSS_SELECTOR, '[data-testid="price-value"]').text
    print(f"房型:{room_name},价格:{room_price}")

driver.quit()

注意:旧版Selenium的find_elements_by_*语法已在4.x版本废弃,统一使用find_element(By.定位方式, "规则内容")的语法兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 05:27:03