如何在Spring Boot应用中接入cpd4j 6.1.0 API并配置Docker Chrome
解决方案:用cpd4j连接Docker中运行的远程Chrome
核心误区纠正
browserExecutablePath()方法是用来指定本地Chrome可执行文件路径的,不是用来配置远程调试地址的。要连接Docker中已启动并开启远程调试的Chrome,需要使用cpd4j的远程连接API,而非指定可执行文件路径。
一、在cpd4j 3.0.15中连接远程Chrome
- 确认Docker Chrome的启动参数
启动Chrome容器时必须添加远程调试参数,示例命令:docker run -p 9222:9222 --rm chromium/chromium --no-sandbox --remote-debugging-port=9222 - Spring Boot中实现连接代码
通过cpd4j的API获取远程调试目标并创建会话:import io.webfolder.cdp.Launcher; import io.webfolder.cdp.session.Session; import io.webfolder.cdp.session.SessionFactory; @Service public class RemoteChromeService { public void runRemoteChromeTask() { Launcher launcher = new Launcher(); try { // 获取远程Chrome的调试目标WebSocket地址 String wsDebugUrl = launcher.getTargets("http://localhost:9222").get(0).getWebSocketDebuggerUrl(); // 创建会话并执行操作 try (SessionFactory factory = launcher.createSessionFactory(); Session session = factory.create(wsDebugUrl)) { session.navigate("https://example.com"); session.waitDocumentReady(); // 这里添加你的业务逻辑,比如抓取页面内容、执行JS等 } } catch (Exception e) { e.printStackTrace(); } finally { launcher.close(); } } }
二、cpd4j 6.1.0的Jar包获取与配置
- Maven依赖配置
6.1.0版本已同步到Maven Central,直接在pom.xml中添加:<dependency> <groupId>io.webfolder</groupId> <artifactId>cdp4j</artifactId> <version>6.1.0</version> </dependency> - 6.x版本连接远程Chrome的代码
API逻辑和3.x版本基本一致,仅部分细节调整:
6.x版本中import io.webfolder.cdp.Launcher; import io.webfolder.cdp.session.Session; import io.webfolder.cdp.session.SessionFactory; public class ChromeRemoteDemo { public static void main(String[] args) { Launcher launcher = new Launcher(); try { String wsUrl = launcher.getTargets("http://localhost:9222").get(0).getWebSocketDebuggerUrl(); try (SessionFactory factory = launcher.createSessionFactory(); Session session = factory.create(wsUrl)) { session.navigate("https://example.com"); session.waitDocumentReady(); // 业务逻辑实现 } } catch (Exception e) { e.printStackTrace(); } finally { launcher.close(); } } }browserExecutablePath()仅用于启动本地Chrome,示例:Options options = Options.builder() .browserExecutablePath("/usr/bin/google-chrome") .build(); Launcher launcher = new Launcher(options);
三、常见问题排查
- 若无法获取远程目标,先在浏览器访问
http://localhost:9222,能看到调试目标列表则说明Docker端口映射和Chrome启动参数正常。 - 若Maven拉取不到6.1.0版本,检查本地Maven镜像源是否同步Maven Central,或手动从官方仓库下载Jar包导入项目。
内容的提问来源于stack exchange,提问作者user982455
相关产品推荐
相关产品推荐

