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

如何用Selenium抓取Google Flights弹窗内的日期价格表格数据

解决Google Flights日期网格弹窗的数据抓取问题

Google Flights的日期网格弹窗属于当前页面内的模态组件,不需要切换窗口,直接定位弹窗内的元素即可抓取数据。以下是具体实现步骤和修改后的代码:

关键操作步骤

  • 等待弹窗加载:弹窗打开后,先等待其核心容器元素可见,确保后续元素定位有效
  • 定位日期与价格元素:通过分析弹窗DOM结构,定位每个日期项的日期文本和对应价格
  • 批量提取数据:遍历所有日期项,整理成结构化数据

修改后的完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.google.com/travel/flights')

wait = WebDriverWait(driver, 10)

# 填写出发地和目的地
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[aria-placeholder='Where from?'] input"))).click()
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[aria-label='Enter your origin'] input"))).send_keys("Sydney" + Keys.ARROW_DOWN + Keys.ENTER)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[aria-placeholder='Where to?'] input"))).click()
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[aria-label='Enter your destination'] input"))).send_keys("Auckland" + Keys.ARROW_DOWN + Keys.ENTER)
wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Search']"))).click()

# 打开日期网格弹窗
wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Date grid']"))).click()

# 等待日期网格弹窗加载完成
date_grid_container = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div[aria-label='Date grid']")))

# 抓取所有日期项
date_items = date_grid_container.find_elements(By.CSS_SELECTOR, "div[role='gridcell']")

# 提取日期和价格数据
flight_prices = []
for item in date_items:
    # 提取日期文本(如"10月5日")
    date_text = item.get_attribute("aria-label")
    # 提取价格文本,部分日期可能无价格,做容错处理
    try:
        price_text = item.find_element(By.CSS_SELECTOR, "span[class*='U3gSDe']").text
    except:
        price_text = "无价格"
    if date_text:
        flight_prices.append({"日期": date_text, "价格": price_text})

# 打印抓取结果
for entry in flight_prices:
    print(f"{entry['日期']}: {entry['价格']}")

driver.quit()

注意事项

  • Google Flights的DOM结构可能会随时更新,如果CSS选择器失效,需要重新通过浏览器开发者工具(F12)查看最新的元素属性
  • 部分日期可能没有航班价格,代码中加入了异常处理避免报错
  • 建议根据网络情况适当调整等待时间,避免因加载慢导致元素定位失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:07:38