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

使用Selenium时,如何设置Safari浏览器拦截指定URL的网络请求?

Safari浏览器Java版Selenium拦截指定URL的方案

和Chrome通过启动参数修改域名映射的方式不同,Safari需要借助Selenium DevTools API实现请求拦截,具体步骤如下:

实现步骤与代码示例

import org.openqa.selenium.safari.SafariDriver;
import org.openqa.selenium.safari.SafariOptions;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v128.network.Network;
import java.util.Optional;

public class SafariUrlBlocker {
    public static void main(String[] args) {
        // 初始化Safari配置与驱动
        SafariOptions options = new SafariOptions();
        SafariDriver driver = new SafariDriver(options);

        // 启用DevTools会话
        DevTools devTools = driver.getDevTools();
        devTools.createSession();

        // 开启网络监听能力
        devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));

        // 设置拦截规则:匹配目标URL后取消请求
        devTools.addListener(Network.requestWillBeSent(), request -> {
            String requestUrl = request.getRequest().getUrl();
            // 匹配需要拦截的域名/URL
            if (requestUrl.contains("www.googletagmanager.com")) {
                devTools.send(Network.cancelLoading(request.getRequestId()));
            }
        });

        // 执行测试逻辑示例
        driver.get("https://example.com");

        // 关闭资源
        driver.quit();
    }
}

关键注意事项

  • 必须使用Selenium 4.x及以上版本,低版本不支持Safari的DevTools API
  • 除了直接取消请求,也可根据需求调用Network.redirectRequest()将请求重定向到本地地址(比如127.0.0.1)
  • 如需拦截多个URL,可扩展判断逻辑,例如用集合存储目标域名/URL,再批量匹配

另外,也可以通过修改系统hosts文件全局映射域名,但该方式是全局生效,无法仅针对单个测试会话隔离,适合不需要会话隔离的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:29:53