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

如何在Java版Selenium ChromeDriver中拦截网络请求?

可以通过Selenium ChromeDriver实现网页请求拦截功能

完全可以实现,核心是借助Chrome DevTools Protocol (CDP)——这也是Chrome DevTools背后的技术,Selenium ChromeDriver原生支持调用CDP的API来拦截网络请求,正好满足你提升页面加载速度的需求。

实现步骤及Java代码示例

以下是基于你现有代码改造的完整实现:

import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.devtools.DevTools;
import org.openqa.selenium.devtools.v125.network.Network;
import org.openqa.selenium.devtools.v125.network.model.RequestPattern;
import java.util.Arrays;
import java.util.List;

public class RequestBlockingExample {
    public static void main(String[] args) {
        // 初始化ChromeOptions
        ChromeOptions options = new ChromeOptions();
        // 可选:禁用自动化检测,避免部分网站限制
        options.addArguments("--disable-blink-features=AutomationControlled");

        // 初始化ChromeDriver
        ChromeDriver driver = new ChromeDriver(options);

        // 获取DevTools实例并创建会话
        DevTools devTools = driver.getDevTools();
        devTools.createSession();

        // 启用Network域
        devTools.send(Network.enable(null, null, null));

        // 定义需要拦截的请求规则:比如拦截图片、广告、视频等无关资源
        List<RequestPattern> blockPatterns = Arrays.asList(
            RequestPattern.builder()
                .urlPattern("*.jpg")
                .resourceType(Network.ResourceType.IMAGE)
                .interceptionStage(Network.InterceptionStage.RECEIVED)
                .build(),
            RequestPattern.builder()
                .urlPattern("*.png")
                .resourceType(Network.ResourceType.IMAGE)
                .interceptionStage(Network.InterceptionStage.RECEIVED)
                .build(),
            RequestPattern.builder()
                .urlPattern("*ad*") // 拦截包含ad关键词的广告请求
                .interceptionStage(Network.InterceptionStage.RECEIVED)
                .build()
        );

        // 设置请求拦截规则
        devTools.send(Network.setRequestInterception(blockPatterns));

        // 监听请求拦截事件,对匹配的请求执行阻止操作
        devTools.addListener(Network.requestIntercepted(), interceptedRequest -> {
            // 发送阻止请求的指令
            devTools.send(Network.continueInterceptedRequest(
                interceptedRequest.getInterceptionId(),
                null, null, null, null, true // true表示阻止该请求
            ));
        });

        // 访问目标页面
        driver.get("你的目标URL");

        // 后续操作...

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

关键说明

  • CDP版本适配:注意代码中v125是ChromeDriver对应的CDP版本,需要和你使用的Chrome浏览器版本匹配,若版本不一致,需调整导入的包路径(比如v124、v126)。
  • 自定义拦截规则:你可以根据需求修改urlPattern和resourceType,比如拦截特定域名(*.example.com)、CSS文件、JS文件等,精准过滤无关请求。
  • 拦截时机:interceptionStage设置为RECEIVED表示在收到请求后立即拦截,也可以根据需求选择REQUEST阶段(请求发送前)。

通过这种方式,就能像Chrome DevTools的"Network request blocking"一样拦截指定请求,减少页面加载的资源量,从而提升加载速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:40:33