@xbrowser/cli 1.4.5 → 1.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/{browser-V3VHXQQF.js → browser-2OK26HBS.js} +2 -2
- package/dist/{browser-5CM4GUZU.js → browser-SOML2EWR.js} +1 -1
- package/dist/{browser-2OALOLR2.js → browser-ZTTS2SVT.js} +2 -2
- package/dist/{cdp-driver-ACRHJMS3.js → cdp-driver-67B5EI4C.js} +8 -14
- package/dist/{cdp-driver-VRXHK6P6.js → cdp-driver-UGO45HXR.js} +1 -1
- package/dist/{chunk-IDJ5NILK.js → chunk-2RHJEYWU.js} +8 -14
- package/dist/{chunk-Z6GGTJL5.js → chunk-LYVU6SD3.js} +1 -1
- package/dist/{chunk-SMRIC22G.js → chunk-NQSFETTQ.js} +1 -1
- package/dist/{chunk-NW3WE5JK.js → chunk-RGS6ECTH.js} +8 -14
- package/dist/cli.js +28 -8
- package/dist/daemon-main.js +7 -7
- package/dist/index.js +29 -9
- package/dist/{session-replayer-F4ORJMCL.js → session-replayer-YIGRIIDD.js} +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
## 特性
|
|
11
11
|
|
|
12
|
-
- **
|
|
12
|
+
- **51 浏览器命令** — 导航、交互、查询、存储、截图,覆盖常见自动化场景
|
|
13
13
|
- **命令链** — 用 `&&`、`,`、`+`、`->`、`;` 串联多个命令,一行搞定复杂流程
|
|
14
14
|
- **管道 & Heredoc** — 支持 stdin 管道和 heredoc 批量执行
|
|
15
15
|
- **录制 / 回放** — 录制浏览器操作为 YAML,随时回放,可转换为 JS/Python/Bash 脚本
|
|
@@ -854,7 +854,7 @@ npm run validate
|
|
|
854
854
|
```
|
|
855
855
|
xbrowser/
|
|
856
856
|
├── src/
|
|
857
|
-
│ ├── commands/ #
|
|
857
|
+
│ ├── commands/ # 51 个浏览器命令定义
|
|
858
858
|
│ ├── builtins/ # CLI 内置命令(config, plugin, session, create)
|
|
859
859
|
│ ├── recorder/ # 录制引擎(录制器 + 回放器)
|
|
860
860
|
│ ├── session/ # 会话管理
|
|
@@ -883,7 +883,7 @@ xbrowser/
|
|
|
883
883
|
| **Setup** | `npm i -g` — 0 config | Install + browser download | Install + browser download | Install + WebDriver + drivers |
|
|
884
884
|
| **Web Scraping** | Built-in (`scrape`, `crawl`, `map`) | Write custom scripts | Write custom scripts | Write custom scripts |
|
|
885
885
|
| **Search** | Built-in multi-engine (`search`) | No | No | No |
|
|
886
|
-
| **Plugin Ecosystem** |
|
|
886
|
+
| **Plugin Ecosystem** | 70+ plugins | Limited | Limited | No |
|
|
887
887
|
| **No Code Required** | ✅ CLI commands | ❌ Must write JS/TS | ❌ Must write JS/TS | ❌ Must write code |
|
|
888
888
|
| **Headless Mode** | ✅ Default | ✅ | ✅ | ✅ |
|
|
889
889
|
| **Record/Replay** | ✅ Built-in (`record`/`replay`) | ✅ Codegen | ❌ | ❌ |
|
|
@@ -20,8 +20,8 @@ import {
|
|
|
20
20
|
saveSessionDiskMeta,
|
|
21
21
|
setActivePage,
|
|
22
22
|
touchSession
|
|
23
|
-
} from "./chunk-
|
|
24
|
-
import "./chunk-
|
|
23
|
+
} from "./chunk-NQSFETTQ.js";
|
|
24
|
+
import "./chunk-2RHJEYWU.js";
|
|
25
25
|
import "./chunk-TNEN6VQ2.js";
|
|
26
26
|
import "./chunk-GDKLH7ZY.js";
|
|
27
27
|
import "./chunk-KFQGP6VL.js";
|
|
@@ -20,8 +20,8 @@ import {
|
|
|
20
20
|
saveSessionDiskMeta,
|
|
21
21
|
setActivePage,
|
|
22
22
|
touchSession
|
|
23
|
-
} from "./chunk-
|
|
24
|
-
import "./chunk-
|
|
23
|
+
} from "./chunk-LYVU6SD3.js";
|
|
24
|
+
import "./chunk-2RHJEYWU.js";
|
|
25
25
|
import "./chunk-TNEN6VQ2.js";
|
|
26
26
|
import "./chunk-GDKLH7ZY.js";
|
|
27
27
|
import "./chunk-ABXMBNQ6.js";
|
|
@@ -1165,23 +1165,17 @@ var XBPageImpl = class _XBPageImpl {
|
|
|
1165
1165
|
headers: () => headers
|
|
1166
1166
|
};
|
|
1167
1167
|
}
|
|
1168
|
-
async goBack(
|
|
1168
|
+
async goBack(_opts = {}) {
|
|
1169
|
+
const prevUrl = await this.evaluate("location.href").catch(() => "");
|
|
1169
1170
|
await this.evaluate("() => history.back()");
|
|
1170
|
-
await this.
|
|
1171
|
-
|
|
1172
|
-
try {
|
|
1173
|
-
this._url = await this.evaluate("location.href");
|
|
1174
|
-
} catch {
|
|
1175
|
-
}
|
|
1171
|
+
await this.waitForTimeout(2e3);
|
|
1172
|
+
this._url = await this.evaluate("location.href").catch(() => prevUrl);
|
|
1176
1173
|
}
|
|
1177
|
-
async goForward(
|
|
1174
|
+
async goForward(_opts = {}) {
|
|
1175
|
+
const prevUrl = await this.evaluate("location.href").catch(() => "");
|
|
1178
1176
|
await this.evaluate("() => history.forward()");
|
|
1179
|
-
await this.
|
|
1180
|
-
|
|
1181
|
-
try {
|
|
1182
|
-
this._url = await this.evaluate("location.href");
|
|
1183
|
-
} catch {
|
|
1184
|
-
}
|
|
1177
|
+
await this.waitForTimeout(2e3);
|
|
1178
|
+
this._url = await this.evaluate("location.href").catch(() => prevUrl);
|
|
1185
1179
|
}
|
|
1186
1180
|
async reload(opts = {}) {
|
|
1187
1181
|
this._loadState = { loadFired: false, domContentFired: false, networkIdle: false };
|
|
@@ -1164,23 +1164,17 @@ var XBPageImpl = class _XBPageImpl {
|
|
|
1164
1164
|
headers: () => headers
|
|
1165
1165
|
};
|
|
1166
1166
|
}
|
|
1167
|
-
async goBack(
|
|
1167
|
+
async goBack(_opts = {}) {
|
|
1168
|
+
const prevUrl = await this.evaluate("location.href").catch(() => "");
|
|
1168
1169
|
await this.evaluate("() => history.back()");
|
|
1169
|
-
await this.
|
|
1170
|
-
|
|
1171
|
-
try {
|
|
1172
|
-
this._url = await this.evaluate("location.href");
|
|
1173
|
-
} catch {
|
|
1174
|
-
}
|
|
1170
|
+
await this.waitForTimeout(2e3);
|
|
1171
|
+
this._url = await this.evaluate("location.href").catch(() => prevUrl);
|
|
1175
1172
|
}
|
|
1176
|
-
async goForward(
|
|
1173
|
+
async goForward(_opts = {}) {
|
|
1174
|
+
const prevUrl = await this.evaluate("location.href").catch(() => "");
|
|
1177
1175
|
await this.evaluate("() => history.forward()");
|
|
1178
|
-
await this.
|
|
1179
|
-
|
|
1180
|
-
try {
|
|
1181
|
-
this._url = await this.evaluate("location.href");
|
|
1182
|
-
} catch {
|
|
1183
|
-
}
|
|
1176
|
+
await this.waitForTimeout(2e3);
|
|
1177
|
+
this._url = await this.evaluate("location.href").catch(() => prevUrl);
|
|
1184
1178
|
}
|
|
1185
1179
|
async reload(opts = {}) {
|
|
1186
1180
|
this._loadState = { loadFired: false, domContentFired: false, networkIdle: false };
|
|
@@ -1170,23 +1170,17 @@ var XBPageImpl = class _XBPageImpl {
|
|
|
1170
1170
|
headers: () => headers
|
|
1171
1171
|
};
|
|
1172
1172
|
}
|
|
1173
|
-
async goBack(
|
|
1173
|
+
async goBack(_opts = {}) {
|
|
1174
|
+
const prevUrl = await this.evaluate("location.href").catch(() => "");
|
|
1174
1175
|
await this.evaluate("() => history.back()");
|
|
1175
|
-
await this.
|
|
1176
|
-
|
|
1177
|
-
try {
|
|
1178
|
-
this._url = await this.evaluate("location.href");
|
|
1179
|
-
} catch {
|
|
1180
|
-
}
|
|
1176
|
+
await this.waitForTimeout(2e3);
|
|
1177
|
+
this._url = await this.evaluate("location.href").catch(() => prevUrl);
|
|
1181
1178
|
}
|
|
1182
|
-
async goForward(
|
|
1179
|
+
async goForward(_opts = {}) {
|
|
1180
|
+
const prevUrl = await this.evaluate("location.href").catch(() => "");
|
|
1183
1181
|
await this.evaluate("() => history.forward()");
|
|
1184
|
-
await this.
|
|
1185
|
-
|
|
1186
|
-
try {
|
|
1187
|
-
this._url = await this.evaluate("location.href");
|
|
1188
|
-
} catch {
|
|
1189
|
-
}
|
|
1182
|
+
await this.waitForTimeout(2e3);
|
|
1183
|
+
this._url = await this.evaluate("location.href").catch(() => prevUrl);
|
|
1190
1184
|
}
|
|
1191
1185
|
async reload(opts = {}) {
|
|
1192
1186
|
this._loadState = { loadFired: false, domContentFired: false, networkIdle: false };
|
package/dist/cli.js
CHANGED
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
resolveLaunchOpts,
|
|
26
26
|
saveSessionDiskMeta,
|
|
27
27
|
setActivePage
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-RGS6ECTH.js";
|
|
29
29
|
import "./chunk-TNEN6VQ2.js";
|
|
30
30
|
import {
|
|
31
31
|
forwardCommandLog,
|
|
@@ -5466,12 +5466,12 @@ registerCommandDefinition("health", []);
|
|
|
5466
5466
|
registerCommandDefinition("scrape", ["url"]);
|
|
5467
5467
|
registerCommandDefinition("structure", []);
|
|
5468
5468
|
registerCommandDefinition("get-cookies", []);
|
|
5469
|
-
registerCommandDefinition("set-cookie", []);
|
|
5469
|
+
registerCommandDefinition("set-cookie", ["name", "value"]);
|
|
5470
5470
|
registerCommandDefinition("clear-cookies", []);
|
|
5471
5471
|
registerCommandDefinition("get-local-storage", []);
|
|
5472
|
-
registerCommandDefinition("set-local-storage", []);
|
|
5472
|
+
registerCommandDefinition("set-local-storage", ["key", "value"]);
|
|
5473
5473
|
registerCommandDefinition("clear-local-storage", []);
|
|
5474
|
-
registerCommandDefinition("set-viewport", []);
|
|
5474
|
+
registerCommandDefinition("set-viewport", ["width", "height"]);
|
|
5475
5475
|
registerCommandDefinition("frames", []);
|
|
5476
5476
|
registerCommandDefinition("frame", ["selector"]);
|
|
5477
5477
|
registerCommandDefinition("actions", ["url"]);
|
|
@@ -7083,7 +7083,7 @@ async function executeCommand(commandName, params, sessionName = "default", extr
|
|
|
7083
7083
|
}
|
|
7084
7084
|
let targetPageOverride = null;
|
|
7085
7085
|
if (_target && extraOpts?.cdpEndpoint) {
|
|
7086
|
-
const { findTargetPage } = await import("./browser-
|
|
7086
|
+
const { findTargetPage } = await import("./browser-SOML2EWR.js");
|
|
7087
7087
|
targetPageOverride = await findTargetPage(extraOpts.cdpEndpoint, _target);
|
|
7088
7088
|
if (!targetPageOverride) {
|
|
7089
7089
|
return errorResult(`Target "${_target}" not found. Use 'xbrowser targets --cdp ${extraOpts.cdpEndpoint}' to list available pages.`);
|
|
@@ -10040,6 +10040,24 @@ async function handleBrowserCommand(command, args, options, sessionName, mode, c
|
|
|
10040
10040
|
timeout: args[0] ? Number(args[0]) : options.timeout ? Number(options.timeout) : 1e3
|
|
10041
10041
|
};
|
|
10042
10042
|
break;
|
|
10043
|
+
case "set-cookie":
|
|
10044
|
+
cmdName = "set-cookie";
|
|
10045
|
+
params = {
|
|
10046
|
+
name: options.name || args[0],
|
|
10047
|
+
value: (options.value || options.v) ?? args[1],
|
|
10048
|
+
domain: options.domain,
|
|
10049
|
+
path: options.path,
|
|
10050
|
+
httpOnly: options.httpOnly ? Boolean(options.httpOnly) : void 0,
|
|
10051
|
+
secure: options.secure ? Boolean(options.secure) : void 0
|
|
10052
|
+
};
|
|
10053
|
+
break;
|
|
10054
|
+
case "set-local-storage":
|
|
10055
|
+
cmdName = "set-local-storage";
|
|
10056
|
+
params = {
|
|
10057
|
+
key: options.key || args[0],
|
|
10058
|
+
value: (options.value || options.v) ?? args[1]
|
|
10059
|
+
};
|
|
10060
|
+
break;
|
|
10043
10061
|
default:
|
|
10044
10062
|
cmdName = command;
|
|
10045
10063
|
params = { ...options };
|
|
@@ -11841,7 +11859,8 @@ function printChainResult(chainResult) {
|
|
|
11841
11859
|
}
|
|
11842
11860
|
if (step.tips?.length) {
|
|
11843
11861
|
for (const tip of step.tips) {
|
|
11844
|
-
|
|
11862
|
+
const text = typeof tip === "string" ? tip : tip.message;
|
|
11863
|
+
if (text) console.log(` \u{1F4A1} ${text}`);
|
|
11845
11864
|
}
|
|
11846
11865
|
}
|
|
11847
11866
|
} else {
|
|
@@ -12637,7 +12656,8 @@ async function routeCommand(argvIn, stdinCommands) {
|
|
|
12637
12656
|
}
|
|
12638
12657
|
if (step.tips?.length) {
|
|
12639
12658
|
for (const tip of step.tips) {
|
|
12640
|
-
|
|
12659
|
+
const text = typeof tip === "string" ? tip : tip.message;
|
|
12660
|
+
if (text) console.log(` \u{1F4A1} ${text}`);
|
|
12641
12661
|
}
|
|
12642
12662
|
}
|
|
12643
12663
|
} else {
|
|
@@ -13039,7 +13059,7 @@ async function main() {
|
|
|
13039
13059
|
const command = process.argv[2];
|
|
13040
13060
|
const isLongRunning = command === "preview" || command === "serve";
|
|
13041
13061
|
if (!isLongRunning) {
|
|
13042
|
-
const { ensureProcessCanExit } = await import("./browser-
|
|
13062
|
+
const { ensureProcessCanExit } = await import("./browser-SOML2EWR.js");
|
|
13043
13063
|
await ensureProcessCanExit().catch(() => {
|
|
13044
13064
|
});
|
|
13045
13065
|
process.exit(exitCode);
|
package/dist/daemon-main.js
CHANGED
|
@@ -21,8 +21,8 @@ import {
|
|
|
21
21
|
resolveLaunchOpts,
|
|
22
22
|
saveSessionDiskMeta,
|
|
23
23
|
setActivePage
|
|
24
|
-
} from "./chunk-
|
|
25
|
-
import "./chunk-
|
|
24
|
+
} from "./chunk-NQSFETTQ.js";
|
|
25
|
+
import "./chunk-2RHJEYWU.js";
|
|
26
26
|
import "./chunk-TNEN6VQ2.js";
|
|
27
27
|
import {
|
|
28
28
|
getPluginLoader
|
|
@@ -5427,12 +5427,12 @@ registerCommandDefinition("health", []);
|
|
|
5427
5427
|
registerCommandDefinition("scrape", ["url"]);
|
|
5428
5428
|
registerCommandDefinition("structure", []);
|
|
5429
5429
|
registerCommandDefinition("get-cookies", []);
|
|
5430
|
-
registerCommandDefinition("set-cookie", []);
|
|
5430
|
+
registerCommandDefinition("set-cookie", ["name", "value"]);
|
|
5431
5431
|
registerCommandDefinition("clear-cookies", []);
|
|
5432
5432
|
registerCommandDefinition("get-local-storage", []);
|
|
5433
|
-
registerCommandDefinition("set-local-storage", []);
|
|
5433
|
+
registerCommandDefinition("set-local-storage", ["key", "value"]);
|
|
5434
5434
|
registerCommandDefinition("clear-local-storage", []);
|
|
5435
|
-
registerCommandDefinition("set-viewport", []);
|
|
5435
|
+
registerCommandDefinition("set-viewport", ["width", "height"]);
|
|
5436
5436
|
registerCommandDefinition("frames", []);
|
|
5437
5437
|
registerCommandDefinition("frame", ["selector"]);
|
|
5438
5438
|
registerCommandDefinition("actions", ["url"]);
|
|
@@ -6614,7 +6614,7 @@ async function executeCommand(commandName, params, sessionName = "default", extr
|
|
|
6614
6614
|
}
|
|
6615
6615
|
let targetPageOverride = null;
|
|
6616
6616
|
if (_target && extraOpts?.cdpEndpoint) {
|
|
6617
|
-
const { findTargetPage } = await import("./browser-
|
|
6617
|
+
const { findTargetPage } = await import("./browser-2OK26HBS.js");
|
|
6618
6618
|
targetPageOverride = await findTargetPage(extraOpts.cdpEndpoint, _target);
|
|
6619
6619
|
if (!targetPageOverride) {
|
|
6620
6620
|
return errorResult(`Target "${_target}" not found. Use 'xbrowser targets --cdp ${extraOpts.cdpEndpoint}' to list available pages.`);
|
|
@@ -8330,7 +8330,7 @@ function createRPCHandler() {
|
|
|
8330
8330
|
const isNewFormat = Array.isArray(parsed.actions);
|
|
8331
8331
|
if (isNewFormat) {
|
|
8332
8332
|
try {
|
|
8333
|
-
const { SessionReplayer } = await import("./session-replayer-
|
|
8333
|
+
const { SessionReplayer } = await import("./session-replayer-YIGRIIDD.js");
|
|
8334
8334
|
const replayer = new SessionReplayer({
|
|
8335
8335
|
page: session.page,
|
|
8336
8336
|
stepDelay: slowMo * 500,
|
package/dist/index.js
CHANGED
|
@@ -81,8 +81,8 @@ import {
|
|
|
81
81
|
resolveLaunchOpts,
|
|
82
82
|
saveSessionDiskMeta,
|
|
83
83
|
setActivePage
|
|
84
|
-
} from "./chunk-
|
|
85
|
-
import "./chunk-
|
|
84
|
+
} from "./chunk-LYVU6SD3.js";
|
|
85
|
+
import "./chunk-2RHJEYWU.js";
|
|
86
86
|
import "./chunk-TNEN6VQ2.js";
|
|
87
87
|
import {
|
|
88
88
|
errMsg
|
|
@@ -5783,12 +5783,12 @@ registerCommandDefinition("health", []);
|
|
|
5783
5783
|
registerCommandDefinition("scrape", ["url"]);
|
|
5784
5784
|
registerCommandDefinition("structure", []);
|
|
5785
5785
|
registerCommandDefinition("get-cookies", []);
|
|
5786
|
-
registerCommandDefinition("set-cookie", []);
|
|
5786
|
+
registerCommandDefinition("set-cookie", ["name", "value"]);
|
|
5787
5787
|
registerCommandDefinition("clear-cookies", []);
|
|
5788
5788
|
registerCommandDefinition("get-local-storage", []);
|
|
5789
|
-
registerCommandDefinition("set-local-storage", []);
|
|
5789
|
+
registerCommandDefinition("set-local-storage", ["key", "value"]);
|
|
5790
5790
|
registerCommandDefinition("clear-local-storage", []);
|
|
5791
|
-
registerCommandDefinition("set-viewport", []);
|
|
5791
|
+
registerCommandDefinition("set-viewport", ["width", "height"]);
|
|
5792
5792
|
registerCommandDefinition("frames", []);
|
|
5793
5793
|
registerCommandDefinition("frame", ["selector"]);
|
|
5794
5794
|
registerCommandDefinition("actions", ["url"]);
|
|
@@ -7403,7 +7403,7 @@ async function executeCommand(commandName, params, sessionName = "default", extr
|
|
|
7403
7403
|
}
|
|
7404
7404
|
let targetPageOverride = null;
|
|
7405
7405
|
if (_target && extraOpts?.cdpEndpoint) {
|
|
7406
|
-
const { findTargetPage } = await import("./browser-
|
|
7406
|
+
const { findTargetPage } = await import("./browser-ZTTS2SVT.js");
|
|
7407
7407
|
targetPageOverride = await findTargetPage(extraOpts.cdpEndpoint, _target);
|
|
7408
7408
|
if (!targetPageOverride) {
|
|
7409
7409
|
return errorResult(`Target "${_target}" not found. Use 'xbrowser targets --cdp ${extraOpts.cdpEndpoint}' to list available pages.`);
|
|
@@ -10380,6 +10380,24 @@ async function handleBrowserCommand(command, args, options, sessionName, mode, c
|
|
|
10380
10380
|
timeout: args[0] ? Number(args[0]) : options.timeout ? Number(options.timeout) : 1e3
|
|
10381
10381
|
};
|
|
10382
10382
|
break;
|
|
10383
|
+
case "set-cookie":
|
|
10384
|
+
cmdName = "set-cookie";
|
|
10385
|
+
params = {
|
|
10386
|
+
name: options.name || args[0],
|
|
10387
|
+
value: (options.value || options.v) ?? args[1],
|
|
10388
|
+
domain: options.domain,
|
|
10389
|
+
path: options.path,
|
|
10390
|
+
httpOnly: options.httpOnly ? Boolean(options.httpOnly) : void 0,
|
|
10391
|
+
secure: options.secure ? Boolean(options.secure) : void 0
|
|
10392
|
+
};
|
|
10393
|
+
break;
|
|
10394
|
+
case "set-local-storage":
|
|
10395
|
+
cmdName = "set-local-storage";
|
|
10396
|
+
params = {
|
|
10397
|
+
key: options.key || args[0],
|
|
10398
|
+
value: (options.value || options.v) ?? args[1]
|
|
10399
|
+
};
|
|
10400
|
+
break;
|
|
10383
10401
|
default:
|
|
10384
10402
|
cmdName = command;
|
|
10385
10403
|
params = { ...options };
|
|
@@ -12181,7 +12199,8 @@ function printChainResult(chainResult) {
|
|
|
12181
12199
|
}
|
|
12182
12200
|
if (step.tips?.length) {
|
|
12183
12201
|
for (const tip of step.tips) {
|
|
12184
|
-
|
|
12202
|
+
const text = typeof tip === "string" ? tip : tip.message;
|
|
12203
|
+
if (text) console.log(` \u{1F4A1} ${text}`);
|
|
12185
12204
|
}
|
|
12186
12205
|
}
|
|
12187
12206
|
} else {
|
|
@@ -12977,7 +12996,8 @@ async function routeCommand(argvIn, stdinCommands) {
|
|
|
12977
12996
|
}
|
|
12978
12997
|
if (step.tips?.length) {
|
|
12979
12998
|
for (const tip of step.tips) {
|
|
12980
|
-
|
|
12999
|
+
const text = typeof tip === "string" ? tip : tip.message;
|
|
13000
|
+
if (text) console.log(` \u{1F4A1} ${text}`);
|
|
12981
13001
|
}
|
|
12982
13002
|
}
|
|
12983
13003
|
} else {
|
|
@@ -16166,7 +16186,7 @@ var DataCollector = class {
|
|
|
16166
16186
|
return results;
|
|
16167
16187
|
}
|
|
16168
16188
|
async createBrowserContext() {
|
|
16169
|
-
const { launch } = await import("./cdp-driver-
|
|
16189
|
+
const { launch } = await import("./cdp-driver-UGO45HXR.js");
|
|
16170
16190
|
const { browser } = await launch({
|
|
16171
16191
|
headless: true,
|
|
16172
16192
|
args: ["--no-sandbox", "--disable-setuid-sandbox"]
|
|
@@ -31,7 +31,7 @@ var SessionReplayer = class {
|
|
|
31
31
|
if (this.opts.page) {
|
|
32
32
|
this.page = this.opts.page;
|
|
33
33
|
} else if (this.opts.cdpUrl) {
|
|
34
|
-
const { launch } = await import("./cdp-driver-
|
|
34
|
+
const { launch } = await import("./cdp-driver-UGO45HXR.js");
|
|
35
35
|
const { browser } = await launch({ cdpEndpoint: this.opts.cdpUrl });
|
|
36
36
|
let contexts = browser.contexts();
|
|
37
37
|
for (let i = 0; i < 10 && contexts.length === 0; i++) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xbrowser/cli",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.7",
|
|
4
4
|
"description": "Browser automation CLI for web scraping, headless browsing, SEO analysis, and AI agent workflows. A command-line alternative to Playwright, Puppeteer, and Selenium.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|