要实现在调用 driver.get() 后立即阻止页面自动跳转到 Azure 登录页,可通过以下几种方法实现:
方法一:立即停止页面加载(核心方案)
// 设置极短的页面加载超时(1毫秒)
driver.manage().timeouts().pageLoadTimeout(1, TimeUnit.MILLISECONDS);
try {
driver.get("https://your-target-url.com"); // 触发导航
} catch (TimeoutException ignore) {
// 忽略超时异常,此时页面加载已被中断
((JavascriptExecutor) driver).executeScript("window.stop();"); // 强制停止加载
}
方法二:拦截网络请求(Chrome DevTools)
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v85.network.Network;
DevTools devTools = ((ChromeDriver) driver).getDevTools();
devTools.createSession();
// 启用网络拦截
devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
// 添加请求拦截器
devTools.addListener(Network.requestWillBeSent(), request -> {
// 检测到跳转到Azure登录页时立即阻止
if (request.getRequest().getUrl().contains("login.microsoftonline.com")) {
devTools.send(Network.disable()); // 立即禁用网络
}
});
driver.get("https://your-target-url.com"); // 触发导航
方法三:修改浏览器配置(禁止重定向)
ChromeOptions options = new ChromeOptions();
// 方案A: 阻止所有重定向
options.setExperimentalOption("prefs", Map.of(
"profile.managed_default_content_settings.javascript", 2 // 禁用JS执行
));
// 方案B: 安装拦截扩展 (需提前准备crx文件)
.addExtensions(new File("/path/to/redirect-blocker.crx"));
WebDriver driver = new ChromeDriver(options);
driver.get("https://your-target-url.com");
方法五:JavaScript 注入阻止跳转
((JavascriptExecutor)driver).executeScript(
"window.onbeforeunload = function() { return 'Stop navigation?'; };" +
"window.addEventListener('beforeunload', (e) => e.preventDefault());"
);
driver.get("https://your-target-url.com");
// 后续移除拦截器
((JavascriptExecutor)driver).executeScript(
"window.onbeforeunload = null;" +
"window.removeEventListener('beforeunload');"
);