mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-16 12:27:53 +08:00
fix(browser): add Windows and Docker Chromium launch args
This commit is contained in:
parent
91cd03c0da
commit
6756577428
@ -17,6 +17,7 @@ import java.nio.file.Paths;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,6 +34,9 @@ public class BrowserUseTool {
|
|||||||
private static final int CDP_SCAN_PORT_MIN = 9000;
|
private static final int CDP_SCAN_PORT_MIN = 9000;
|
||||||
private static final int CDP_SCAN_PORT_MAX = 10000;
|
private static final int CDP_SCAN_PORT_MAX = 10000;
|
||||||
|
|
||||||
|
private static final boolean IS_WINDOWS = System.getProperty("os.name", "")
|
||||||
|
.toLowerCase(Locale.ROOT).contains("win");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 共享 Playwright 实例(Node.js 进程)。
|
* 共享 Playwright 实例(Node.js 进程)。
|
||||||
* Playwright.create() 启动一个 Node.js 子进程,耗时 1-2 秒。
|
* Playwright.create() 启动一个 Node.js 子进程,耗时 1-2 秒。
|
||||||
@ -151,6 +155,13 @@ public class BrowserUseTool {
|
|||||||
BrowserType.LaunchOptions launchOptions = new BrowserType.LaunchOptions()
|
BrowserType.LaunchOptions launchOptions = new BrowserType.LaunchOptions()
|
||||||
.setHeadless(!headed);
|
.setHeadless(!headed);
|
||||||
|
|
||||||
|
// 平台特定启动参数
|
||||||
|
List<String> extraArgs = chromiumLaunchArgs();
|
||||||
|
if (!extraArgs.isEmpty()) {
|
||||||
|
launchOptions.setArgs(extraArgs);
|
||||||
|
log.debug("[BrowserUse] Chromium extra args: {}", extraArgs);
|
||||||
|
}
|
||||||
|
|
||||||
Browser browser = pw.chromium().launch(launchOptions);
|
Browser browser = pw.chromium().launch(launchOptions);
|
||||||
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
|
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
|
||||||
.setViewportSize(1280, 800)
|
.setViewportSize(1280, 800)
|
||||||
@ -523,6 +534,49 @@ public class BrowserUseTool {
|
|||||||
return JSONUtil.toJsonPrettyStr(result);
|
return JSONUtil.toJsonPrettyStr(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ==================== Platform Helpers ====================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回 Chromium 在当前平台下需要的额外启动参数。
|
||||||
|
* <p>
|
||||||
|
* Windows: --no-sandbox(沙箱兼容性)+ --disable-gpu(GPU 硬件加速问题)
|
||||||
|
* 容器环境: --no-sandbox + --disable-dev-shm-usage(共享内存不足)
|
||||||
|
*/
|
||||||
|
private static List<String> chromiumLaunchArgs() {
|
||||||
|
List<String> args = new ArrayList<>();
|
||||||
|
boolean inContainer = isRunningInContainer();
|
||||||
|
|
||||||
|
if (IS_WINDOWS || inContainer) {
|
||||||
|
args.add("--no-sandbox");
|
||||||
|
}
|
||||||
|
if (inContainer) {
|
||||||
|
args.add("--disable-dev-shm-usage");
|
||||||
|
}
|
||||||
|
if (IS_WINDOWS) {
|
||||||
|
args.add("--disable-gpu");
|
||||||
|
}
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检测是否运行在 Docker/容器环境中。
|
||||||
|
*/
|
||||||
|
private static boolean isRunningInContainer() {
|
||||||
|
try {
|
||||||
|
// Docker 容器中通常存在 /.dockerenv 文件
|
||||||
|
if (java.nio.file.Files.exists(java.nio.file.Path.of("/.dockerenv"))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// 或者 /proc/1/cgroup 包含 docker/kubepods
|
||||||
|
java.nio.file.Path cgroup = java.nio.file.Path.of("/proc/1/cgroup");
|
||||||
|
if (java.nio.file.Files.exists(cgroup)) {
|
||||||
|
String content = java.nio.file.Files.readString(cgroup);
|
||||||
|
return content.contains("docker") || content.contains("kubepods") || content.contains("containerd");
|
||||||
|
}
|
||||||
|
} catch (Exception ignored) {}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// ==================== CDP Helpers ====================
|
// ==================== CDP Helpers ====================
|
||||||
|
|
||||||
private boolean isPortOpen(int port) {
|
private boolean isPortOpen(int port) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user