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

无法点击MakeMyTrip网站Book按钮:Selenium自动化执行异常

问题分析与解决方案

核心问题:动态ID导致定位失效

你代码中使用的Book按钮ID是动态生成的(包含随机字符串RKEY:501c58c8-7838-4305-9a7f-68744ae5903d:25_0),这类ID会在每次页面加载、会话刷新时改变,这就是之前代码能运行、现在突然失效的根本原因。

具体修复步骤

1. 替换动态ID为稳定定位器

改用基于按钮文本、通用类名的相对XPath或CSS选择器,避免依赖动态变化的属性:

  • 按按钮文本定位://button[contains(text(), 'Book Now')]
  • 按通用类名定位://button[contains(@class, 'bookBtn')](需根据页面实际class调整,比如MMT的Book按钮可能带有book-button这类通用标识)

示例替换代码:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement bookBtn = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[contains(text(), 'Book Now')]")));
bookBtn.click(); // 补充点击操作,原代码仅获取元素未执行点击

2. 修正错误的窗口切换逻辑

你代码中执行了driver.switchTo().newWindow(WindowType.TAB),这会打开空白新标签页,但Book按钮在原搜索结果页面内,这一步操作完全错误,会导致后续代码在空白页执行,必然找不到元素,直接删除该行即可。

3. 用显式等待替换Thread.sleep

Thread.sleep是固定时长等待,易受网络、页面加载速度影响,建议全部替换为WebDriverWait的显式等待,比如:

// 等待出发城市输入框可交互
wait.until(ExpectedConditions.elementToBeClickable(By.id("fromCity"))).sendKeys("IXC");

4. 排查iframe与元素遮挡问题

如果上述方法仍无效:

  • 检查Book按钮是否嵌套在iframe中,若存在需先切换到iframe再定位:
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("target-iframe-id")));
WebElement bookBtn = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[contains(text(), 'Book Now')]")));
driver.switchTo().defaultContent(); // 操作完成后切回主文档
  • 确认是否有弹窗、广告遮挡Book按钮,先关闭遮挡元素再执行点击操作。

优化后的关键代码片段

// 选择航班后,等待Book按钮并点击
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15));
WebElement bookBtn = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[contains(text(), 'Book Now')]")));
bookBtn.click();

// 填写乘客信息(确保在正确页面执行)
wait.until(ExpectedConditions.elementToBeClickable(By.className("addTravellerBtn"))).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("tvlrInput"))).sendKeys("person");
// 后续乘客信息填写逻辑...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:23:36