From b059e4b626c05312ceee7a08247a5ee4a0e2c18e Mon Sep 17 00:00:00 2001 From: fanyong920 <1023079644@qq.com> Date: Thu, 6 Feb 2025 10:08:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:BrowserLauncher.getBrowserPid()=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E6=B7=BB=E5=8A=A0cdp=E5=8D=8F=E8=AE=AE=E8=8E=B7?= =?UTF-8?q?=E5=8F=96pid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jvppeteer/launch/BrowserLauncher.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/ruiyun/jvppeteer/launch/BrowserLauncher.java b/src/main/java/com/ruiyun/jvppeteer/launch/BrowserLauncher.java index a1c3016..ec71bc2 100644 --- a/src/main/java/com/ruiyun/jvppeteer/launch/BrowserLauncher.java +++ b/src/main/java/com/ruiyun/jvppeteer/launch/BrowserLauncher.java @@ -44,6 +44,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Iterator; import java.util.List; import java.util.Objects; import java.util.regex.Matcher; @@ -264,7 +265,7 @@ private CdpBrowser createCdpBrowser(LaunchOptions options, List defaultA } } }); - runner.setPid(getBrowserPid(runner.getProcess())); + runner.setPid(getBrowserPid(connection,runner.getProcess())); return cdpBrowser; } @@ -275,12 +276,27 @@ private Browser createBiDiBrowser(BidiConnection connection, Runnable closeCallb /** * 通过cdp的SystemInfo.getProcessInfo获取浏览器pid,如果通过cdp没获取pid,并且是mac或者linux平台,那么尝试通过反射获取pid */ - private String getBrowserPid(Process process) { + private String getBrowserPid(Connection connection,Process process) { long pid = -1; try { - pid = Helper.getPidForLinuxOrMac(process); + JsonNode response = connection.send("SystemInfo.getProcessInfo"); + Iterator processInfos = response.get("processInfo").elements(); + while (processInfos.hasNext()) { + JsonNode processInfo = processInfos.next(); + if (processInfo.get(Constant.TYPE).asText().equals("browser")) { + pid = processInfo.get(Constant.ID).asLong(); + break; + } + } + } catch (Exception e) { + LOGGER.error("get browser pid error by cdp: ", e); + } + try { + if (pid == -1) { + pid = Helper.getPidForLinuxOrMac(process); + } } catch (Exception e) { - LOGGER.error("get browser pid error: ", e); + LOGGER.error("get browser pid error by reflection: ", e); } return String.valueOf(pid); }