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

Python Selenium操作Google Flights时send_keys方法失效问题求助

解决Google Flights输入框send_keys失效的问题

我之前爬Google Flights的时候也踩过这个坑,它的页面元素动态性极强,依赖动态生成的ID(比如你用的i6)定位肯定会时不时失效,给你几个经过验证的解决方案:

1. 改用基于语义属性的稳定定位方式

Google Flights的输入框有固定的aria-label属性,比如出发地输入框的标签通常是**"Departure airport"**(中文环境下对应“出发地”),用这个定位比动态ID靠谱太多。示例代码:

from selenium.webdriver.common.by import By

# 英文界面出发地输入框定位
fly_from = driver.find_element(By.CSS_SELECTOR, "[aria-label='Departure airport'] input")
# 中文界面可替换为:[aria-label='出发地'] input

2. 用显式等待替代time.sleep

time.sleep()是“盲等”,完全依赖固定时长,而WebDriverWait的显式等待可以精准等待元素达到可点击/可交互状态,这才是应对动态页面的正确姿势。完整示例:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 等待10秒,直到出发地输入框可点击
wait = WebDriverWait(driver, 10)
fly_from = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[aria-label='Departure airport'] input")))

# 先激活输入框,清空原有内容,再输入
fly_from.click()
fly_from.clear()
fly_from.send_keys("lax")

3. 处理页面加载状态与动态遮挡

有时候页面会有加载动画或者临时弹窗遮挡输入框,导致操作失败。可以先等待加载元素消失:

# 等待页面加载动画消失(选择器可通过浏览器开发者工具查看实际元素)
wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, ".Fxmcue")))

4. 用ActionChains模拟真实输入行为

如果直接send_keys还是不稳定,试试用ActionChains模拟人工点击+输入的流程:

from selenium.webdriver.common.action_chains import ActionChains

actions = ActionChains(driver)
actions.click(fly_from).send_keys("lax").perform()

另外提醒一句:Google Flights有反爬机制,频繁操作可能会触发验证或者限制请求,建议操作间隔不要太密集,必要时可以配置合理的User-Agent头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:47:29