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

Python Selenium无法提交Google Travel表单问题求助

解决Google Travel表单无法提交的问题

Google Travel这类现代单页应用没有使用传统的<form>标签,所以submit()方法必然失效。而Keys.RETURN没生效,大概率是元素定位不准确或者没有触发页面的JS交互逻辑,下面是具体的解决步骤和代码:

核心问题分析

  • 现代前端框架构建的页面,搜索提交逻辑由JS事件驱动,而非传统表单提交,因此submit()方法完全不适用。
  • 你之前用的//input[@type='text']可能定位到了页面上其他隐藏或非目标输入框,导致输入和回车操作没有作用在正确的搜索框上。

解决方案

1. 精确定位目标搜索框

Google Travel的搜索框通常带有明确的aria-label属性,用更精确的定位表达式确保选中正确元素:

# 用aria-label定位搜索框,避免误选其他输入框
search_box = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//input[@aria-label='搜索']"))
)

2. 确保元素获得焦点并触发回车

如果直接send_keys(Keys.RETURN)无效,可以用Selenium的ActionChains模拟完整的输入+回车流程,或者执行JS触发搜索事件:

方法一:使用ActionChains

from selenium.webdriver.common.action_chains import ActionChains

# 模拟点击输入框、输入内容、回车的完整流程
ActionChains(driver).move_to_element(search_box).click().send_keys('Andalousie').send_keys(Keys.RETURN).perform()

方法二:执行JS触发搜索事件

如果页面有绑定的搜索触发函数,可直接调用相关事件:

search_box.send_keys('Andalousie')
# 触发input和change事件,让页面感知输入内容变化
driver.execute_script("arguments[0].dispatchEvent(new Event('input')); arguments[0].dispatchEvent(new Event('change'));", search_box)
# 再模拟回车键事件
driver.execute_script("arguments[0].focus(); var e = new KeyboardEvent('keydown', {key: 'Enter'}); arguments[0].dispatchEvent(e);", search_box)

3. 加入显式等待

页面加载时可能存在延迟,用显式等待确保元素可交互后再操作,避免因元素未加载完成导致的失败:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 最长等待10秒,直到搜索框可点击
search_box = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//input[@aria-label='搜索']"))
)

完整修改后的代码

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

options = Options()
options.binary_location = r'C:\Program Files\Mozilla Firefox\firefox.exe'
driver = webdriver.Firefox(executable_path=r'C:\FLET\geckodriver.exe', options=options)

url = 'https://www.google.com/travel/'
driver.get(url)

try:
    # 显式等待搜索框加载完成
    search_box = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//input[@aria-label='搜索']"))
    )
    search_box.clear()
    search_box.send_keys('Andalousie')
    # 确保元素获得焦点后按回车
    search_box.click()
    search_box.send_keys(Keys.RETURN)
finally:
    # 操作完成后可选择关闭浏览器
    # driver.quit()
    pass

内容的提问来源于stack exchange,提问作者Michel Laliberté

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:00:33