Selenium自动化选August 23却跳至September的问题求助
问题排查与修复方案
核心问题分析
- 额外点击导致月份跳过头:循环内连续执行了两次
click()操作(一次是显式等待后的点击,一次是重新定位元素后的点击),每次循环会切换两次月份,最终导致跳过目标月份。 - 循环条件错误导致日志无输出:你要定位的是August,但循环判断条件是检查月份是否包含"April"——如果当前月份在April之后(比如页面默认显示当前月),循环根本不会进入,所以
System.out.println没有执行机会。 - 日期选择逻辑与目标不符:代码里选的是"19",但你需要的是"23"。
修正后的代码
WebDriver driver = new ChromeDriver(); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.manage().window().maximize(); driver.get("https://www.path2usa.com/travel-companions"); JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("window.scrollBy(0,800)"); // 用显式等待替代Thread.sleep,更可靠 wait.until(ExpectedConditions.elementToBeClickable(By.id("form-field-travel_comp_date"))).click(); // 修正循环条件:目标月份改为August while (!driver.findElement(By.xpath("//span[@class='cur-month']")).getText().contains("August")) { String currentMonth = driver.findElement(By.xpath("//span[@class='cur-month']")).getText(); System.out.println("Current month: " + currentMonth); // 只点击一次下一月按钮,避免跳过头 WebElement nextMonthBtn = wait.until(ExpectedConditions.elementToBeClickable( By.xpath("//span[@class='flatpickr-next-month']//*[local-name()='svg']") )); nextMonthBtn.click(); // 等待月份切换完成后再进行下一次判断 wait.until(ExpectedConditions.not(ExpectedConditions.textToBe( By.xpath("//span[@class='cur-month']"), currentMonth ))); } // 选择23号日期,过滤掉前后月份的日期元素 List<WebElement> dates = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy( By.xpath("//span[contains(@class, 'flatpickr-day') and not(contains(@class, 'prev-month') or contains(@class, 'next-month'))]") )); for (WebElement date : dates) { String text = date.getText(); if (text.equalsIgnoreCase("23")) { date.click(); break; } } // 记得关闭驱动 driver.quit();
关键修改说明
- 移除重复点击:删除多余的
driver.findElement(...).click(),确保每次循环只切换一次月份。 - 修正循环条件:将判断目标从"April"改为"August",让循环逻辑匹配你的需求。
- 增加月份切换等待:在点击下一月后,等待月份文本变化,避免循环判断时页面还未完成切换。
- 优化日期定位:过滤掉前后月份的日期元素,只定位当前显示月份的日期,避免误点非目标月日期。
- 替换Thread.sleep:用显式等待替代固定休眠,提升代码稳定性和执行效率。
- 修正日期选择值:将"19"改为"23",匹配你的目标日期。
内容的提问来源于stack exchange,提问作者Messiah
相关产品推荐
相关产品推荐

