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

Chrome Selenium如何使用多窗口切换标签并提取临时邮箱OTP验证码

解决方法

1. 保留临时邮箱页面不被覆盖

你之前在同一个标签页调用driver.get()访问Twitter,自然会覆盖临时邮箱页面,改用多标签页+窗口句柄管理的方案即可,核心逻辑是:

  • 打开临时邮箱页面后,先保存该标签页的窗口句柄
  • 通过执行JS打开新标签页访问Twitter,所有Twitter操作都在新标签页完成
  • 需要收验证码时,切换回之前保存的临时邮箱句柄即可,不会生成新邮箱

2. 提取OTP纯数字内容

拿到OTP文本后,用正则匹配提取所有连续数字即可,直接过滤掉所有非数字字符。

修改后的完整代码

import org.openqa.selenium.*;
import org.openqa.selenium.support.ui.*;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.concurrent.TimeUnit;

// 自行补全ChromeDriver初始化逻辑
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(300, TimeUnit.SECONDS);
WebDriverWait wait = new WebDriverWait(driver, 30);

// 打开临时邮箱,保存当前窗口句柄
driver.get("https://tempail.com/en/");
String tempMailHandle = driver.getWindowHandle();

// 提取邮箱地址
WebElement copyButton = driver.findElement(By.xpath("//input[@id='eposta_adres']"));
String email = copyButton.getAttribute("value");
System.out.println("生成的临时邮箱:" + email);

// 打开新标签页访问Twitter
((JavascriptExecutor) driver).executeScript("window.open('https://mobile.twitter.com/','_blank');");
// 切换到新打开的Twitter标签页
Set<String> allHandles = driver.getWindowHandles();
for (String handle : allHandles) {
    if (!handle.equals(tempMailHandle)) {
        driver.switchTo().window(handle);
        break;
    }
}

// 原有Twitter注册逻辑
driver.findElement(By.xpath("//div[@dir='auto']//*[contains(text(),'Sign up with phone or email')]")).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("name"))).sendKeys("abc5643754");
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='Use email instead']"))).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("email"))).sendKeys(email);
Select month = new Select(wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("SELECTOR_1"))));
Select day = new Select(wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("SELECTOR_2"))));
Select year = new Select(wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("SELECTOR_3"))));
month.selectByValue("10");
day.selectByValue("14");
year.selectByValue("1992");
for(int i=0; i<2; i++) {
    Thread.sleep(1000);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@dir='auto']//*[contains(text(),'Next')]"))).click();
}
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@dir='auto']//*[contains(text(),'Sign up')]"))).click();

// 提交注册后切回临时邮箱标签页收验证码
driver.switchTo().window(tempMailHandle);
// 等待Twitter邮件加载,最多等待60秒,可自行调整时长
wait.withTimeout(60, TimeUnit.SECONDS).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(text(),'Twitter') or contains(text(),'X')]"))).click();
// 定位OTP元素,可根据临时邮箱实际渲染结构调整XPath
WebElement otpElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(@class,'mail-content')]")));
String otpText = otpElement.getText();
// 提取纯数字OTP
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(otpText);
String otpCode = "";
if (matcher.find()) {
    otpCode = matcher.group();
}
System.out.println("提取到的纯数字OTP:" + otpCode);

// 后续可再次切换回Twitter标签页输入验证码完成注册

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:39:03