如何在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
相关产品推荐
相关产品推荐

