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

Ruby新手使用Selenium实现值机自动化遇send_keys失效及400错误

解决Ruby Selenium WebDriver send_keys 400 Server Error问题

你遇到的这个400 Server Error通常是Selenium、Firefox浏览器和geckodriver版本不兼容,或者页面元素未完全就绪就执行输入操作导致的,下面是具体的排查和解决步骤:

1. 优先检查版本兼容性(最常见原因)

Selenium 3.x系列依赖独立的geckodriver来驱动Firefox,三者的版本必须严格匹配:

  • 你使用的Selenium 3.11.0,建议搭配Firefox 57~61版本,以及geckodriver 0.21.0版本(不同Selenium版本对应不同的geckodriver和Firefox版本,一定要确保三者匹配)
  • 确保已经下载了对应版本的geckodriver,并且:
    • 把它放到系统PATH能识别的目录,或者
    • 在初始化driver时明确指定geckodriver路径:
      require "selenium-webdriver"
      Selenium::WebDriver::Firefox::Binary.path='C:\Program Files (x86)\Firefox Developer Edition\firefox.exe'
      # 替换成你的geckodriver实际路径
      driver = Selenium::WebDriver.for :firefox, driver_path: 'C:\tools\geckodriver.exe'
      

2. 用显式等待替代固定sleep

固定的sleep(1)完全依赖主观判断的时间,很可能元素看起来显示了,但实际DOM还没准备好接收输入。改用Selenium的显式等待,确保元素真正可交互:

require "selenium-webdriver"
Selenium::WebDriver::Firefox::Binary.path='C:\Program Files (x86)\Firefox Developer Edition\firefox.exe'
driver = Selenium::WebDriver.for :firefox, driver_path: 'C:\tools\geckodriver.exe'
# 设置10秒超时,可根据实际调整
wait = Selenium::WebDriver::Wait.new(timeout: 10)

driver.navigate.to "https://checkin.westjet.com/"

# 等待firstName输入框可用,直接输入
first_name = wait.until { driver.find_element(id: 'firstName').enabled? }
first_name.send_keys('Test')

# 同理处理姓氏和预订号
last_name = wait.until { driver.find_element(id: 'lastName').enabled? }
last_name.send_keys('Test')

pnr = wait.until { driver.find_element(id: 'recordLocator').enabled? }
pnr.send_keys('ABC123')

3. 尝试移除多余的click操作

有些页面的输入框不需要手动点击就能获取焦点,强制click可能触发页面的JS事件干扰输入逻辑。可以直接去掉first_name.click这类代码,直接调用send_keys。

4. 检查元素是否在iframe内

如果输入框被嵌套在iframe中,必须先切换到对应的iframe才能定位元素:

# 用浏览器开发者工具确认iframe的id或其他定位符
frame = wait.until { driver.find_element(id: 'checkin-iframe') }
driver.switch_to.frame(frame)
# 之后再执行元素定位和输入操作

按照这个顺序排查,先解决版本兼容问题,再调整等待逻辑,应该就能解决send_keys失败的400错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:48:57