@letsscrapedata/controller 0.0.65 → 0.0.66
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/dist/index.cjs +257 -204
- package/dist/index.d.cts +37 -2
- package/dist/index.d.ts +37 -2
- package/dist/index.js +253 -204
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -32,6 +32,10 @@ var src_exports = {};
|
|
|
32
32
|
__export(src_exports, {
|
|
33
33
|
CheerioElement: () => CheerioElement,
|
|
34
34
|
CheerioPage: () => CheerioPage,
|
|
35
|
+
ControllerEvent: () => ControllerEvent,
|
|
36
|
+
LsdBrowserContextEvent: () => LsdBrowserContextEvent,
|
|
37
|
+
LsdBrowserEvent: () => LsdBrowserEvent,
|
|
38
|
+
LsdPageEvent: () => LsdPageEvent,
|
|
35
39
|
PlaywrightBrowser: () => PlaywrightBrowser,
|
|
36
40
|
PlaywrightBrowserContext: () => PlaywrightBrowserContext,
|
|
37
41
|
PlaywrightElement: () => PlaywrightElement,
|
|
@@ -45,6 +49,32 @@ __export(src_exports, {
|
|
|
45
49
|
});
|
|
46
50
|
module.exports = __toCommonJS(src_exports);
|
|
47
51
|
|
|
52
|
+
// src/types/types.ts
|
|
53
|
+
var ControllerEvent = /* @__PURE__ */ ((ControllerEvent2) => {
|
|
54
|
+
ControllerEvent2["BROWSERCONTEXT_CLOSE"] = "close";
|
|
55
|
+
ControllerEvent2["BROWSERCONTEXT_PAGE"] = "page";
|
|
56
|
+
ControllerEvent2["BROWSERCONTEXT_TARGETCREATED"] = "targetcreated";
|
|
57
|
+
ControllerEvent2["BROWSER_DISCONNECTED"] = "disconnected";
|
|
58
|
+
ControllerEvent2["PAGE_CLOSE"] = "close";
|
|
59
|
+
ControllerEvent2["PAGE_POUP"] = "popup";
|
|
60
|
+
ControllerEvent2["PAGE_REQUEST"] = "request";
|
|
61
|
+
ControllerEvent2["PAGE_RESPONSE"] = "response";
|
|
62
|
+
return ControllerEvent2;
|
|
63
|
+
})(ControllerEvent || {});
|
|
64
|
+
var LsdPageEvent = /* @__PURE__ */ ((LsdPageEvent2) => {
|
|
65
|
+
LsdPageEvent2["PAGE_CLOSE"] = "pageClose";
|
|
66
|
+
LsdPageEvent2["PAGE_POPUP"] = "pagePopup";
|
|
67
|
+
return LsdPageEvent2;
|
|
68
|
+
})(LsdPageEvent || {});
|
|
69
|
+
var LsdBrowserContextEvent = /* @__PURE__ */ ((LsdBrowserContextEvent2) => {
|
|
70
|
+
LsdBrowserContextEvent2["PAGE_CLOSE"] = "pageClose";
|
|
71
|
+
return LsdBrowserContextEvent2;
|
|
72
|
+
})(LsdBrowserContextEvent || {});
|
|
73
|
+
var LsdBrowserEvent = /* @__PURE__ */ ((LsdBrowserEvent2) => {
|
|
74
|
+
LsdBrowserEvent2["BROWSER_CONTEXT_CLOSE"] = "browserContextClose";
|
|
75
|
+
return LsdBrowserEvent2;
|
|
76
|
+
})(LsdBrowserEvent || {});
|
|
77
|
+
|
|
48
78
|
// src/utils/log.ts
|
|
49
79
|
var import_utils = require("@letsscrapedata/utils");
|
|
50
80
|
var pkgLog = import_utils.log;
|
|
@@ -56,6 +86,9 @@ function setControllerLogFun(logFun) {
|
|
|
56
86
|
return false;
|
|
57
87
|
}
|
|
58
88
|
}
|
|
89
|
+
async function logdbg(...args) {
|
|
90
|
+
await pkgLog(import_utils.LogLevel.DBG, ...args);
|
|
91
|
+
}
|
|
59
92
|
async function loginfo(...args) {
|
|
60
93
|
await pkgLog(import_utils.LogLevel.INF, ...args);
|
|
61
94
|
}
|
|
@@ -419,7 +452,7 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
419
452
|
const cookieItems = await this.#getCookies(page);
|
|
420
453
|
const domainSet = new Set(cookieItems.map((c) => c.domain));
|
|
421
454
|
if (domainSet.size !== 1) {
|
|
422
|
-
logwarn(
|
|
455
|
+
logwarn(`##browser LsdPage domains in clearCookies: ${Array.from(domainSet.values())}`);
|
|
423
456
|
}
|
|
424
457
|
for (const domain of domainSet.values()) {
|
|
425
458
|
await browserContext.clearCookies({ domain });
|
|
@@ -625,15 +658,15 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
625
658
|
}
|
|
626
659
|
const page = this.#page;
|
|
627
660
|
const pageId = this.#pageId;
|
|
628
|
-
page.on("close"
|
|
629
|
-
loginfo(`##browser
|
|
661
|
+
page.on("close" /* PAGE_CLOSE */, async () => {
|
|
662
|
+
loginfo(`##browser page ${pageId} closed @LsdPage`);
|
|
630
663
|
if (!page.pageInfo) {
|
|
631
|
-
logerr(
|
|
664
|
+
logerr(`##browser LsdPage logic error in page.on("close")`);
|
|
632
665
|
}
|
|
633
|
-
this.emit("pageClose");
|
|
634
|
-
this.#lsdBrowserContext.emit("pageClose"
|
|
666
|
+
this.emit("pageClose" /* PAGE_CLOSE */);
|
|
667
|
+
this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
|
|
635
668
|
});
|
|
636
|
-
page.on("popup"
|
|
669
|
+
page.on("popup" /* PAGE_POUP */, (p) => {
|
|
637
670
|
if (p) {
|
|
638
671
|
let evtData = null;
|
|
639
672
|
const pageInfo = p.pageInfo;
|
|
@@ -647,12 +680,12 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
647
680
|
pageInfo.relatedId = page.pageInfo.taskId;
|
|
648
681
|
}
|
|
649
682
|
} else {
|
|
650
|
-
logerr(`##browser
|
|
683
|
+
logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
|
|
651
684
|
}
|
|
652
|
-
loginfo(`##browser
|
|
653
|
-
this.emit("pagePopup"
|
|
685
|
+
loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
|
|
686
|
+
this.emit("pagePopup" /* PAGE_POPUP */, evtData);
|
|
654
687
|
} else {
|
|
655
|
-
logerr(`##browser ${pageId} has popup page with null page`);
|
|
688
|
+
logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
|
|
656
689
|
}
|
|
657
690
|
});
|
|
658
691
|
}
|
|
@@ -667,13 +700,14 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
667
700
|
const currentTime = (0, import_utils3.getCurrentUnixTime)();
|
|
668
701
|
const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
|
|
669
702
|
this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
|
|
670
|
-
this.#pageId = `
|
|
703
|
+
this.#pageId = `PlaywrightPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
671
704
|
this.#closeWhenFree = false;
|
|
672
705
|
this.#resquestInterceptionOptions = [];
|
|
673
706
|
this.#responseInterceptionOptions = [];
|
|
674
707
|
this.#client = null;
|
|
675
708
|
this.#responseCb = null;
|
|
676
709
|
this.#isDebugTask = false;
|
|
710
|
+
loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
|
|
677
711
|
this.#addPageOn();
|
|
678
712
|
}
|
|
679
713
|
async addPreloadScript(scriptOrFunc, arg) {
|
|
@@ -754,7 +788,7 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
754
788
|
}
|
|
755
789
|
async close() {
|
|
756
790
|
if (this.#status === "closed") {
|
|
757
|
-
logwarn(
|
|
791
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
|
|
758
792
|
return true;
|
|
759
793
|
} else if (this.#status === "busy") {
|
|
760
794
|
throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
|
|
@@ -765,6 +799,7 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
765
799
|
await this.#page.close();
|
|
766
800
|
this.#page = null;
|
|
767
801
|
this.#status = "closed";
|
|
802
|
+
loginfo(`##browser LsdPage ${this.#pageId} is closed`);
|
|
768
803
|
return true;
|
|
769
804
|
}
|
|
770
805
|
closeWhenFree() {
|
|
@@ -849,10 +884,11 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
849
884
|
return [];
|
|
850
885
|
}
|
|
851
886
|
async free() {
|
|
852
|
-
if (this.#status === "free") {
|
|
853
|
-
logwarn(
|
|
887
|
+
if (this.#status === "free" && this.pageInfo().openType !== "popup") {
|
|
888
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
|
|
854
889
|
}
|
|
855
890
|
this.#status = "free";
|
|
891
|
+
logdbg(`##browser LsdPage ${this.#pageId} is freed`);
|
|
856
892
|
await this.clearRequestInterceptions();
|
|
857
893
|
await this.clearResponseInterceptions();
|
|
858
894
|
return true;
|
|
@@ -1134,7 +1170,7 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
1134
1170
|
}
|
|
1135
1171
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
1136
1172
|
if (actOptions.length <= 0) {
|
|
1137
|
-
logwarn("
|
|
1173
|
+
logwarn("##browser LsdPage invalid paras in setRequestInterception");
|
|
1138
1174
|
return false;
|
|
1139
1175
|
}
|
|
1140
1176
|
const firstRequestInterception = this.#resquestInterceptionOptions.length <= 0;
|
|
@@ -1157,9 +1193,9 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
1157
1193
|
const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
|
|
1158
1194
|
if (this.#isDebugTask) {
|
|
1159
1195
|
if (matchedFlag) {
|
|
1160
|
-
|
|
1196
|
+
loginfo(`##browser matched request ${request.method()} ${request.url()}`);
|
|
1161
1197
|
} else {
|
|
1162
|
-
|
|
1198
|
+
logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
|
|
1163
1199
|
}
|
|
1164
1200
|
}
|
|
1165
1201
|
if (matchedFlag) {
|
|
@@ -1215,9 +1251,9 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
1215
1251
|
}
|
|
1216
1252
|
if (this.#isDebugTask) {
|
|
1217
1253
|
if (matchedFlag) {
|
|
1218
|
-
|
|
1254
|
+
loginfo(`##browser matched response ${request.method()} ${request.url()}`);
|
|
1219
1255
|
} else {
|
|
1220
|
-
|
|
1256
|
+
logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
|
|
1221
1257
|
}
|
|
1222
1258
|
}
|
|
1223
1259
|
if (!matchedFlag) {
|
|
@@ -1255,7 +1291,7 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
1255
1291
|
}
|
|
1256
1292
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
1257
1293
|
if (actOptions.length <= 0) {
|
|
1258
|
-
logwarn("
|
|
1294
|
+
logwarn("##browser LsdPage invalid paras in setResponseInterception");
|
|
1259
1295
|
return false;
|
|
1260
1296
|
}
|
|
1261
1297
|
const firstResponseInterception = this.#responseInterceptionOptions.length <= 0;
|
|
@@ -1268,7 +1304,7 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
1268
1304
|
}
|
|
1269
1305
|
if (firstResponseInterception && this.#responseInterceptionOptions.length > 0) {
|
|
1270
1306
|
this.#responseCb = this.#responseListener.bind(this);
|
|
1271
|
-
this.#page.on("response"
|
|
1307
|
+
this.#page.on("response" /* PAGE_RESPONSE */, this.#responseCb);
|
|
1272
1308
|
}
|
|
1273
1309
|
return true;
|
|
1274
1310
|
}
|
|
@@ -1316,6 +1352,7 @@ var PlaywrightPage = class extends import_node_events.default {
|
|
|
1316
1352
|
throw new Error(`Page ${this.#pageId} is already busy!!!`);
|
|
1317
1353
|
}
|
|
1318
1354
|
this.#status = "busy";
|
|
1355
|
+
logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
|
|
1319
1356
|
return true;
|
|
1320
1357
|
}
|
|
1321
1358
|
async waitForElement(selector, options = {}) {
|
|
@@ -1454,11 +1491,10 @@ var PlaywrightBrowserContext = class extends import_node_events2.default {
|
|
|
1454
1491
|
for (const page of pages) {
|
|
1455
1492
|
const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
|
|
1456
1493
|
const lsdPage = new PlaywrightPage(this, page, pageInfo);
|
|
1494
|
+
this.#lsdPages.push(lsdPage);
|
|
1457
1495
|
if (this.#maxViewportOfNewPage) {
|
|
1458
1496
|
await lsdPage.maximizeViewport();
|
|
1459
1497
|
}
|
|
1460
|
-
this.#lsdPages.push(lsdPage);
|
|
1461
|
-
loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
1462
1498
|
}
|
|
1463
1499
|
}
|
|
1464
1500
|
constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, maxViewportOfNewPage = true) {
|
|
@@ -1488,8 +1524,9 @@ var PlaywrightBrowserContext = class extends import_node_events2.default {
|
|
|
1488
1524
|
this.#lsdPages = [];
|
|
1489
1525
|
this.#nextPageIdx = 1;
|
|
1490
1526
|
this.#gettingPage = false;
|
|
1527
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
|
|
1491
1528
|
this.#initPages();
|
|
1492
|
-
browserContext.on("page"
|
|
1529
|
+
browserContext.on("page" /* BROWSERCONTEXT_PAGE */, async (page) => {
|
|
1493
1530
|
const pageInfo = page.pageInfo;
|
|
1494
1531
|
if (pageInfo) {
|
|
1495
1532
|
const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
|
|
@@ -1498,27 +1535,26 @@ var PlaywrightBrowserContext = class extends import_node_events2.default {
|
|
|
1498
1535
|
const currentTime2 = (0, import_utils4.getCurrentUnixTime)();
|
|
1499
1536
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
|
|
1500
1537
|
const lsdPage = new PlaywrightPage(this, page, pageInfo2);
|
|
1538
|
+
this.#lsdPages.push(lsdPage);
|
|
1501
1539
|
if (this.#maxViewportOfNewPage) {
|
|
1502
1540
|
await lsdPage.maximizeViewport();
|
|
1503
1541
|
}
|
|
1504
|
-
this.#lsdPages.push(lsdPage);
|
|
1505
|
-
loginfo(`##page ${lsdPage.id()} created`);
|
|
1506
1542
|
}
|
|
1507
1543
|
});
|
|
1508
|
-
browserContext.on("close"
|
|
1544
|
+
browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
|
|
1509
1545
|
if (browserContext !== bc) {
|
|
1510
1546
|
logerr(`##browser different browserContext in browserContext.on("close")`);
|
|
1511
1547
|
}
|
|
1512
|
-
this.#lsdBrowser.emit("browserContextClose"
|
|
1548
|
+
this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
|
|
1513
1549
|
});
|
|
1514
|
-
this.on("pageClose"
|
|
1550
|
+
this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
|
|
1515
1551
|
if (!(lsdPage instanceof PlaywrightPage)) {
|
|
1516
|
-
logerr(
|
|
1552
|
+
logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
|
|
1517
1553
|
return;
|
|
1518
1554
|
}
|
|
1519
1555
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
1520
1556
|
if (idx < 0) {
|
|
1521
|
-
logerr(
|
|
1557
|
+
logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
1522
1558
|
return;
|
|
1523
1559
|
}
|
|
1524
1560
|
this.#lsdPages.splice(idx, 1);
|
|
@@ -1535,7 +1571,7 @@ var PlaywrightBrowserContext = class extends import_node_events2.default {
|
|
|
1535
1571
|
if (this.#browserContext) {
|
|
1536
1572
|
this.#status = "closed";
|
|
1537
1573
|
this.#lastStatusUpdateTime = (0, import_utils4.getCurrentUnixTime)();
|
|
1538
|
-
loginfo(
|
|
1574
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
|
|
1539
1575
|
await this.#browserContext.close();
|
|
1540
1576
|
}
|
|
1541
1577
|
return true;
|
|
@@ -1550,12 +1586,12 @@ var PlaywrightBrowserContext = class extends import_node_events2.default {
|
|
|
1550
1586
|
await (0, import_utils4.sleep)(200);
|
|
1551
1587
|
}
|
|
1552
1588
|
}
|
|
1553
|
-
logwarn(
|
|
1589
|
+
logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
|
|
1554
1590
|
return false;
|
|
1555
1591
|
}
|
|
1556
1592
|
#freeGettingLock() {
|
|
1557
1593
|
if (!this.#gettingPage) {
|
|
1558
|
-
logwarn(
|
|
1594
|
+
logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
|
|
1559
1595
|
}
|
|
1560
1596
|
this.#gettingPage = false;
|
|
1561
1597
|
}
|
|
@@ -1564,7 +1600,7 @@ var PlaywrightBrowserContext = class extends import_node_events2.default {
|
|
|
1564
1600
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
1565
1601
|
}
|
|
1566
1602
|
if (maxPageFreeSeconds <= 0) {
|
|
1567
|
-
logwarn(
|
|
1603
|
+
logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
|
|
1568
1604
|
return false;
|
|
1569
1605
|
}
|
|
1570
1606
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -1661,7 +1697,7 @@ var PlaywrightBrowserContext = class extends import_node_events2.default {
|
|
|
1661
1697
|
}
|
|
1662
1698
|
}
|
|
1663
1699
|
id() {
|
|
1664
|
-
return `
|
|
1700
|
+
return `PlaywrightContext-${this.#browserIdx}-${this.#browserContextIdx}`;
|
|
1665
1701
|
}
|
|
1666
1702
|
isFree() {
|
|
1667
1703
|
return this.#status === "free";
|
|
@@ -1795,34 +1831,33 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends import_node_events3.def
|
|
|
1795
1831
|
this.#executablePath = executablePath;
|
|
1796
1832
|
this.#nextBrowserContextIdx = 1;
|
|
1797
1833
|
this.#closeFreePagesIntervalId = null;
|
|
1798
|
-
loginfo(`##browser ${this.id()} ${this.#browserCreationMethod}ed
|
|
1834
|
+
loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
|
|
1799
1835
|
const browserContexts = browser.contexts();
|
|
1800
1836
|
if (browserContexts.length > 0) {
|
|
1801
|
-
logwarn(
|
|
1837
|
+
logwarn(`##browser LsdBrowser there are ${browserContexts.length} new browserContexts when playwright launches new browser`);
|
|
1802
1838
|
}
|
|
1803
1839
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : true;
|
|
1804
1840
|
for (const browserContext of browserContexts) {
|
|
1805
1841
|
const lsdBrowserContext = new PlaywrightBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
1806
1842
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
1807
|
-
loginfo(`##browserContext ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
1808
1843
|
}
|
|
1809
|
-
browser.on("disconnected"
|
|
1844
|
+
browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
|
|
1810
1845
|
loginfo(`##browser ${this.id()} disconnected`);
|
|
1811
1846
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
1812
|
-
logerr(
|
|
1847
|
+
logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
|
|
1813
1848
|
}
|
|
1814
1849
|
});
|
|
1815
|
-
this.on("browserContextClose"
|
|
1850
|
+
this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
|
|
1816
1851
|
if (!(lsdBrowserContext instanceof PlaywrightBrowserContext)) {
|
|
1817
|
-
logerr(
|
|
1852
|
+
logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
|
|
1818
1853
|
return;
|
|
1819
1854
|
}
|
|
1820
1855
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
1821
1856
|
if (idx < 0) {
|
|
1822
|
-
logerr(
|
|
1857
|
+
logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
1823
1858
|
return;
|
|
1824
1859
|
}
|
|
1825
|
-
loginfo(`##
|
|
1860
|
+
loginfo(`##browser ${lsdBrowserContext.id()} closed
|
|
1826
1861
|
`);
|
|
1827
1862
|
this.#lsdBrowserContexts.splice(idx, 1);
|
|
1828
1863
|
if (this.#lsdBrowserContexts.length === 0) {
|
|
@@ -1843,7 +1878,7 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends import_node_events3.def
|
|
|
1843
1878
|
}
|
|
1844
1879
|
async newBrowserContext(options) {
|
|
1845
1880
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
1846
|
-
logwarn(`##browser ${this.id()} can not create more new browserContext`);
|
|
1881
|
+
logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
|
|
1847
1882
|
return null;
|
|
1848
1883
|
}
|
|
1849
1884
|
const browserContextOptions = {};
|
|
@@ -1862,7 +1897,6 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends import_node_events3.def
|
|
|
1862
1897
|
const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
|
|
1863
1898
|
const lsdBrowserContext = new PlaywrightBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
1864
1899
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
1865
|
-
loginfo(`##browser ${lsdBrowserContext.id()} created`);
|
|
1866
1900
|
return lsdBrowserContext;
|
|
1867
1901
|
}
|
|
1868
1902
|
async close() {
|
|
@@ -1873,6 +1907,7 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends import_node_events3.def
|
|
|
1873
1907
|
await lsdBrowserContext.close();
|
|
1874
1908
|
}
|
|
1875
1909
|
await this.#browser.close();
|
|
1910
|
+
loginfo(`##browser LsdBrowser ${this.id()} is closed`);
|
|
1876
1911
|
return true;
|
|
1877
1912
|
}
|
|
1878
1913
|
browserContexts() {
|
|
@@ -1898,7 +1933,7 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends import_node_events3.def
|
|
|
1898
1933
|
return this.#executablePath;
|
|
1899
1934
|
}
|
|
1900
1935
|
id() {
|
|
1901
|
-
return `
|
|
1936
|
+
return `PlaywrightBrowser-${this.#browserType}-${this.#browserIdx}`;
|
|
1902
1937
|
}
|
|
1903
1938
|
isConnected() {
|
|
1904
1939
|
return this.#browser.isConnected();
|
|
@@ -2434,15 +2469,15 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
2434
2469
|
}
|
|
2435
2470
|
const page = this.#page;
|
|
2436
2471
|
const pageId = this.#pageId;
|
|
2437
|
-
page.on("close"
|
|
2438
|
-
loginfo(`##browser
|
|
2472
|
+
page.on("close" /* PAGE_CLOSE */, async () => {
|
|
2473
|
+
loginfo(`##browser page ${pageId} closed @LsdPage`);
|
|
2439
2474
|
if (!page.pageInfo) {
|
|
2440
|
-
logerr(
|
|
2475
|
+
logerr(`##browser LsdPage logic error in page.on("close")`);
|
|
2441
2476
|
}
|
|
2442
|
-
this.emit("pageClose");
|
|
2443
|
-
this.#lsdBrowserContext.emit("pageClose"
|
|
2477
|
+
this.emit("pageClose" /* PAGE_CLOSE */);
|
|
2478
|
+
this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
|
|
2444
2479
|
});
|
|
2445
|
-
page.on("popup"
|
|
2480
|
+
page.on("popup" /* PAGE_POUP */, (p) => {
|
|
2446
2481
|
if (p) {
|
|
2447
2482
|
let evtData = null;
|
|
2448
2483
|
const pageInfo = p.pageInfo;
|
|
@@ -2456,12 +2491,12 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
2456
2491
|
pageInfo.relatedId = page.pageInfo.taskId;
|
|
2457
2492
|
}
|
|
2458
2493
|
} else {
|
|
2459
|
-
logerr(`##browser
|
|
2494
|
+
logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
|
|
2460
2495
|
}
|
|
2461
|
-
loginfo(`##browser
|
|
2462
|
-
this.emit("pagePopup"
|
|
2496
|
+
loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
|
|
2497
|
+
this.emit("pagePopup" /* PAGE_POPUP */, evtData);
|
|
2463
2498
|
} else {
|
|
2464
|
-
logerr(`##browser ${pageId} has popup page with null page`);
|
|
2499
|
+
logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
|
|
2465
2500
|
}
|
|
2466
2501
|
});
|
|
2467
2502
|
}
|
|
@@ -2476,12 +2511,13 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
2476
2511
|
const currentTime = (0, import_utils7.getCurrentUnixTime)();
|
|
2477
2512
|
const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
|
|
2478
2513
|
this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
|
|
2479
|
-
this.#pageId = `
|
|
2514
|
+
this.#pageId = `PuppeteerPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
2480
2515
|
this.#closeWhenFree = false;
|
|
2481
2516
|
this.#requestInterceptionNum = 0;
|
|
2482
2517
|
this.#responseInterceptionNum = 0;
|
|
2483
2518
|
this.#client = null;
|
|
2484
2519
|
this.#isDebugTask = false;
|
|
2520
|
+
loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
|
|
2485
2521
|
this.#addPageOn();
|
|
2486
2522
|
}
|
|
2487
2523
|
async addPreloadScript(scriptOrFunc, arg) {
|
|
@@ -2559,7 +2595,7 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
2559
2595
|
}
|
|
2560
2596
|
async close() {
|
|
2561
2597
|
if (this.#status === "closed") {
|
|
2562
|
-
logwarn(
|
|
2598
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
|
|
2563
2599
|
return true;
|
|
2564
2600
|
} else if (this.#status === "busy") {
|
|
2565
2601
|
throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
|
|
@@ -2570,6 +2606,7 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
2570
2606
|
await this.#page.close();
|
|
2571
2607
|
this.#page = null;
|
|
2572
2608
|
this.#status = "closed";
|
|
2609
|
+
loginfo(`##browser LsdPage ${this.#pageId} is closed`);
|
|
2573
2610
|
return true;
|
|
2574
2611
|
}
|
|
2575
2612
|
closeWhenFree() {
|
|
@@ -2654,10 +2691,11 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
2654
2691
|
return [];
|
|
2655
2692
|
}
|
|
2656
2693
|
async free() {
|
|
2657
|
-
if (this.#status === "free") {
|
|
2658
|
-
logwarn(
|
|
2694
|
+
if (this.#status === "free" && this.pageInfo().openType !== "popup") {
|
|
2695
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
|
|
2659
2696
|
}
|
|
2660
2697
|
this.#status = "free";
|
|
2698
|
+
logdbg(`##browser LsdPage ${this.#pageId} is freed`);
|
|
2661
2699
|
await this.clearRequestInterceptions();
|
|
2662
2700
|
await this.clearResponseInterceptions();
|
|
2663
2701
|
return true;
|
|
@@ -2941,7 +2979,7 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
2941
2979
|
}
|
|
2942
2980
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
2943
2981
|
if (actOptions.length <= 0) {
|
|
2944
|
-
logwarn("
|
|
2982
|
+
logwarn("##browser LsdPage invalid paras in setRequestInterception");
|
|
2945
2983
|
return false;
|
|
2946
2984
|
}
|
|
2947
2985
|
if (this.#requestInterceptionNum <= 0) {
|
|
@@ -2950,16 +2988,16 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
2950
2988
|
} else {
|
|
2951
2989
|
this.#requestInterceptionNum++;
|
|
2952
2990
|
}
|
|
2953
|
-
this.#page.on("request"
|
|
2991
|
+
this.#page.on("request" /* PAGE_REQUEST */, async (request) => {
|
|
2954
2992
|
try {
|
|
2955
2993
|
for (const option of actOptions) {
|
|
2956
2994
|
const { requestMatch, action, fulfill } = option;
|
|
2957
2995
|
const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
|
|
2958
2996
|
if (this.#isDebugTask) {
|
|
2959
2997
|
if (matchedFlag) {
|
|
2960
|
-
|
|
2998
|
+
loginfo(`##browser matched request ${request.method()} ${request.url()}`);
|
|
2961
2999
|
} else {
|
|
2962
|
-
|
|
3000
|
+
logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
|
|
2963
3001
|
}
|
|
2964
3002
|
}
|
|
2965
3003
|
if (matchedFlag) {
|
|
@@ -2996,11 +3034,11 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
2996
3034
|
}
|
|
2997
3035
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
2998
3036
|
if (actOptions.length <= 0) {
|
|
2999
|
-
logwarn("
|
|
3037
|
+
logwarn("##browser LsdPage invalid paras in setResponseInterception");
|
|
3000
3038
|
return false;
|
|
3001
3039
|
}
|
|
3002
3040
|
this.#responseInterceptionNum++;
|
|
3003
|
-
this.#page.on("response"
|
|
3041
|
+
this.#page.on("response" /* PAGE_RESPONSE */, async (response) => {
|
|
3004
3042
|
try {
|
|
3005
3043
|
if (!response.ok() || !this.#page) {
|
|
3006
3044
|
return false;
|
|
@@ -3023,9 +3061,9 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
3023
3061
|
}
|
|
3024
3062
|
if (this.#isDebugTask) {
|
|
3025
3063
|
if (matchedFlag) {
|
|
3026
|
-
|
|
3064
|
+
loginfo(`##browser matched response ${request.method()} ${request.url()}`);
|
|
3027
3065
|
} else {
|
|
3028
|
-
|
|
3066
|
+
logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
|
|
3029
3067
|
}
|
|
3030
3068
|
}
|
|
3031
3069
|
if (!matchedFlag) {
|
|
@@ -3044,6 +3082,7 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
3044
3082
|
requestData,
|
|
3045
3083
|
responseData
|
|
3046
3084
|
});
|
|
3085
|
+
loginfo(`##browser cache matched response: ${requestUrl}`);
|
|
3047
3086
|
}
|
|
3048
3087
|
if (typeof handler === "function") {
|
|
3049
3088
|
const pageData = { pageUrl, cookies: "" };
|
|
@@ -3109,6 +3148,7 @@ var PuppeteerPage = class extends import_node_events4.default {
|
|
|
3109
3148
|
throw new Error(`Page ${this.#pageId} is already busy!!!`);
|
|
3110
3149
|
}
|
|
3111
3150
|
this.#status = "busy";
|
|
3151
|
+
logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
|
|
3112
3152
|
return true;
|
|
3113
3153
|
}
|
|
3114
3154
|
async waitForElement(selector, options = {}) {
|
|
@@ -3219,14 +3259,13 @@ var PuppeteerBrowserContext = class extends import_node_events5.default {
|
|
|
3219
3259
|
for (const page of pages) {
|
|
3220
3260
|
const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
|
|
3221
3261
|
const lsdPage = new PuppeteerPage(this, page, pageInfo);
|
|
3262
|
+
this.#lsdPages.push(lsdPage);
|
|
3222
3263
|
if (this.#maxViewportOfNewPage) {
|
|
3223
3264
|
await lsdPage.maximizeViewport();
|
|
3224
3265
|
}
|
|
3225
3266
|
if (this.#userAgent) {
|
|
3226
3267
|
await lsdPage.setUserAgent(this.#userAgent);
|
|
3227
3268
|
}
|
|
3228
|
-
this.#lsdPages.push(lsdPage);
|
|
3229
|
-
loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
3230
3269
|
}
|
|
3231
3270
|
}
|
|
3232
3271
|
constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, userAgent = "", maxViewportOfNewPage = true) {
|
|
@@ -3255,8 +3294,9 @@ var PuppeteerBrowserContext = class extends import_node_events5.default {
|
|
|
3255
3294
|
this.#lsdPages = [];
|
|
3256
3295
|
this.#nextPageIdx = 1;
|
|
3257
3296
|
this.#gettingPage = false;
|
|
3297
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
|
|
3258
3298
|
this.#initPages();
|
|
3259
|
-
browserContext.on("targetcreated"
|
|
3299
|
+
browserContext.on("targetcreated" /* BROWSERCONTEXT_TARGETCREATED */, async (p) => {
|
|
3260
3300
|
if (p.type() === "page") {
|
|
3261
3301
|
const page = await p.page();
|
|
3262
3302
|
if (!page) {
|
|
@@ -3270,30 +3310,36 @@ var PuppeteerBrowserContext = class extends import_node_events5.default {
|
|
|
3270
3310
|
const currentTime2 = (0, import_utils8.getCurrentUnixTime)();
|
|
3271
3311
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
|
|
3272
3312
|
const lsdPage = new PuppeteerPage(this, page, pageInfo2);
|
|
3273
|
-
|
|
3274
|
-
await lsdPage.maximizeViewport();
|
|
3275
|
-
}
|
|
3313
|
+
this.#lsdPages.push(lsdPage);
|
|
3276
3314
|
if (this.#userAgent) {
|
|
3277
3315
|
await lsdPage.setUserAgent(this.#userAgent);
|
|
3278
3316
|
}
|
|
3279
|
-
this.#
|
|
3280
|
-
|
|
3317
|
+
if (this.#maxViewportOfNewPage) {
|
|
3318
|
+
await lsdPage.maximizeViewport();
|
|
3319
|
+
}
|
|
3281
3320
|
}
|
|
3282
3321
|
}
|
|
3283
3322
|
});
|
|
3284
|
-
|
|
3323
|
+
browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
|
|
3324
|
+
logerr(`##browser LsdBrowserContext puppeteer BrowserContext receives close event`);
|
|
3325
|
+
if (browserContext !== bc) {
|
|
3326
|
+
logerr(`##browser LsdBrowserContext different browserContext in browserContext.on("close")`);
|
|
3327
|
+
}
|
|
3328
|
+
this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
|
|
3329
|
+
});
|
|
3330
|
+
this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
|
|
3285
3331
|
if (!(lsdPage instanceof PuppeteerPage)) {
|
|
3286
|
-
logerr(
|
|
3332
|
+
logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
|
|
3287
3333
|
return;
|
|
3288
3334
|
}
|
|
3289
3335
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
3290
3336
|
if (idx < 0) {
|
|
3291
|
-
logerr(
|
|
3337
|
+
logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
3292
3338
|
return;
|
|
3293
3339
|
}
|
|
3294
3340
|
this.#lsdPages.splice(idx, 1);
|
|
3295
3341
|
if (this.#lsdPages.length === 0) {
|
|
3296
|
-
this.#lsdBrowser.emit("browserContextClose"
|
|
3342
|
+
this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
|
|
3297
3343
|
}
|
|
3298
3344
|
return;
|
|
3299
3345
|
});
|
|
@@ -3308,7 +3354,7 @@ var PuppeteerBrowserContext = class extends import_node_events5.default {
|
|
|
3308
3354
|
if (this.#browserContext) {
|
|
3309
3355
|
this.#status = "closed";
|
|
3310
3356
|
this.#lastStatusUpdateTime = (0, import_utils8.getCurrentUnixTime)();
|
|
3311
|
-
loginfo(
|
|
3357
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
|
|
3312
3358
|
if (this.#browserContextCreationMethod !== "launch") {
|
|
3313
3359
|
await this.#browserContext.close();
|
|
3314
3360
|
}
|
|
@@ -3325,12 +3371,12 @@ var PuppeteerBrowserContext = class extends import_node_events5.default {
|
|
|
3325
3371
|
await (0, import_utils8.sleep)(200);
|
|
3326
3372
|
}
|
|
3327
3373
|
}
|
|
3328
|
-
logwarn(
|
|
3374
|
+
logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
|
|
3329
3375
|
return false;
|
|
3330
3376
|
}
|
|
3331
3377
|
#freeGettingLock() {
|
|
3332
3378
|
if (!this.#gettingPage) {
|
|
3333
|
-
logwarn(
|
|
3379
|
+
logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
|
|
3334
3380
|
}
|
|
3335
3381
|
this.#gettingPage = false;
|
|
3336
3382
|
}
|
|
@@ -3339,7 +3385,7 @@ var PuppeteerBrowserContext = class extends import_node_events5.default {
|
|
|
3339
3385
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
3340
3386
|
}
|
|
3341
3387
|
if (maxPageFreeSeconds <= 0) {
|
|
3342
|
-
logwarn(
|
|
3388
|
+
logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
|
|
3343
3389
|
return false;
|
|
3344
3390
|
}
|
|
3345
3391
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -3438,7 +3484,7 @@ var PuppeteerBrowserContext = class extends import_node_events5.default {
|
|
|
3438
3484
|
}
|
|
3439
3485
|
}
|
|
3440
3486
|
id() {
|
|
3441
|
-
return `
|
|
3487
|
+
return `PuppeteerContext-${this.#browserIdx}-${this.#browserContextIdx}`;
|
|
3442
3488
|
}
|
|
3443
3489
|
isIncognito() {
|
|
3444
3490
|
return this.#incognito;
|
|
@@ -3472,7 +3518,7 @@ var PuppeteerBrowserContext = class extends import_node_events5.default {
|
|
|
3472
3518
|
}
|
|
3473
3519
|
if (localStorageOrigins.length > 0) {
|
|
3474
3520
|
await origPage.setRequestInterception(true);
|
|
3475
|
-
origPage.on("request"
|
|
3521
|
+
origPage.on("request" /* PAGE_REQUEST */, (request) => {
|
|
3476
3522
|
request.respond({
|
|
3477
3523
|
status: 200,
|
|
3478
3524
|
// contentType: "text/html; charset=utf-8", // "text/plain",
|
|
@@ -3575,28 +3621,27 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends import_node_events6.defau
|
|
|
3575
3621
|
this.#executablePath = executablePath;
|
|
3576
3622
|
this.#nextBrowserContextIdx = 1;
|
|
3577
3623
|
this.#closeFreePagesIntervalId = null;
|
|
3578
|
-
loginfo(`##browser
|
|
3624
|
+
loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
|
|
3579
3625
|
const browserContexts = browser.browserContexts();
|
|
3580
3626
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : false;
|
|
3581
3627
|
for (const browserContext of browserContexts) {
|
|
3582
3628
|
const lsdBrowserContext = new PuppeteerBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), this.#userAgent(), maxViewportOfNewPage);
|
|
3583
3629
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
3584
|
-
loginfo(`##browser ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
3585
3630
|
}
|
|
3586
|
-
browser.on("disconnected"
|
|
3631
|
+
browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
|
|
3587
3632
|
loginfo(`##browser ${this.id()} disconnected`);
|
|
3588
3633
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
3589
|
-
logerr(
|
|
3634
|
+
logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
|
|
3590
3635
|
}
|
|
3591
3636
|
});
|
|
3592
|
-
this.on("browserContextClose"
|
|
3637
|
+
this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
|
|
3593
3638
|
if (!(lsdBrowserContext instanceof PuppeteerBrowserContext)) {
|
|
3594
|
-
logerr(
|
|
3639
|
+
logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
|
|
3595
3640
|
return;
|
|
3596
3641
|
}
|
|
3597
3642
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
3598
3643
|
if (idx < 0) {
|
|
3599
|
-
logerr(
|
|
3644
|
+
logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
3600
3645
|
return;
|
|
3601
3646
|
}
|
|
3602
3647
|
loginfo(`##browser ${lsdBrowserContext.id()} closed
|
|
@@ -3620,7 +3665,7 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends import_node_events6.defau
|
|
|
3620
3665
|
}
|
|
3621
3666
|
async newBrowserContext(options) {
|
|
3622
3667
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
3623
|
-
logwarn(`##browser ${this.id()} can not create more new browserContext`);
|
|
3668
|
+
logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
|
|
3624
3669
|
return null;
|
|
3625
3670
|
}
|
|
3626
3671
|
const browserContextOptions = {};
|
|
@@ -3633,7 +3678,6 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends import_node_events6.defau
|
|
|
3633
3678
|
const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
|
|
3634
3679
|
const lsdBrowserContext = new PuppeteerBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), userAgent, maxViewportOfNewPage);
|
|
3635
3680
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
3636
|
-
loginfo(`##browser ${lsdBrowserContext.id()} created`);
|
|
3637
3681
|
return lsdBrowserContext;
|
|
3638
3682
|
}
|
|
3639
3683
|
async close() {
|
|
@@ -3644,6 +3688,7 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends import_node_events6.defau
|
|
|
3644
3688
|
await lsdBrowserContext.close();
|
|
3645
3689
|
}
|
|
3646
3690
|
await this.#browser.close();
|
|
3691
|
+
loginfo(`##browser LsdBrowser ${this.id()} is closed`);
|
|
3647
3692
|
return true;
|
|
3648
3693
|
}
|
|
3649
3694
|
browserContexts() {
|
|
@@ -3669,7 +3714,7 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends import_node_events6.defau
|
|
|
3669
3714
|
return this.#executablePath;
|
|
3670
3715
|
}
|
|
3671
3716
|
id() {
|
|
3672
|
-
return `
|
|
3717
|
+
return `PuppeteerBrowser-${this.#browserIdx}`;
|
|
3673
3718
|
}
|
|
3674
3719
|
isConnected() {
|
|
3675
3720
|
return this.#browser.connected;
|
|
@@ -4414,7 +4459,7 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
4414
4459
|
const cookieItems = await this.#getCookies(page);
|
|
4415
4460
|
const domainSet = new Set(cookieItems.map((c) => c.domain));
|
|
4416
4461
|
if (domainSet.size !== 1) {
|
|
4417
|
-
logwarn(
|
|
4462
|
+
logwarn(`##browser LsdPage domains in clearCookies: ${Array.from(domainSet.values())}`);
|
|
4418
4463
|
}
|
|
4419
4464
|
for (const domain of domainSet.values()) {
|
|
4420
4465
|
await browserContext.clearCookies({ domain });
|
|
@@ -4620,15 +4665,15 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
4620
4665
|
}
|
|
4621
4666
|
const page = this.#page;
|
|
4622
4667
|
const pageId = this.#pageId;
|
|
4623
|
-
page.on("close"
|
|
4624
|
-
loginfo(`##browser
|
|
4668
|
+
page.on("close" /* PAGE_CLOSE */, async () => {
|
|
4669
|
+
loginfo(`##browser page ${pageId} closed @LsdPage`);
|
|
4625
4670
|
if (!page.pageInfo) {
|
|
4626
|
-
logerr(
|
|
4671
|
+
logerr(`##browser LsdPage logic error in page.on("close")`);
|
|
4627
4672
|
}
|
|
4628
|
-
this.emit("pageClose");
|
|
4629
|
-
this.#lsdBrowserContext.emit("pageClose"
|
|
4673
|
+
this.emit("pageClose" /* PAGE_CLOSE */);
|
|
4674
|
+
this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
|
|
4630
4675
|
});
|
|
4631
|
-
page.on("popup"
|
|
4676
|
+
page.on("popup" /* PAGE_POUP */, (p) => {
|
|
4632
4677
|
if (p) {
|
|
4633
4678
|
let evtData = null;
|
|
4634
4679
|
const pageInfo = p.pageInfo;
|
|
@@ -4642,12 +4687,12 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
4642
4687
|
pageInfo.relatedId = page.pageInfo.taskId;
|
|
4643
4688
|
}
|
|
4644
4689
|
} else {
|
|
4645
|
-
logerr(`##browser
|
|
4690
|
+
logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
|
|
4646
4691
|
}
|
|
4647
|
-
loginfo(`##browser
|
|
4648
|
-
this.emit("pagePopup"
|
|
4692
|
+
loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
|
|
4693
|
+
this.emit("pagePopup" /* PAGE_POPUP */, evtData);
|
|
4649
4694
|
} else {
|
|
4650
|
-
logerr(`##browser ${pageId} has popup page with null page`);
|
|
4695
|
+
logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
|
|
4651
4696
|
}
|
|
4652
4697
|
});
|
|
4653
4698
|
}
|
|
@@ -4662,13 +4707,14 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
4662
4707
|
const currentTime = (0, import_utils11.getCurrentUnixTime)();
|
|
4663
4708
|
const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
|
|
4664
4709
|
this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
|
|
4665
|
-
this.#pageId = `
|
|
4710
|
+
this.#pageId = `PatchrightPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
4666
4711
|
this.#closeWhenFree = false;
|
|
4667
4712
|
this.#resquestInterceptionOptions = [];
|
|
4668
4713
|
this.#responseInterceptionOptions = [];
|
|
4669
4714
|
this.#client = null;
|
|
4670
4715
|
this.#responseCb = null;
|
|
4671
4716
|
this.#isDebugTask = false;
|
|
4717
|
+
loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
|
|
4672
4718
|
this.#addPageOn();
|
|
4673
4719
|
}
|
|
4674
4720
|
async addPreloadScript(scriptOrFunc, arg) {
|
|
@@ -4749,7 +4795,7 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
4749
4795
|
}
|
|
4750
4796
|
async close() {
|
|
4751
4797
|
if (this.#status === "closed") {
|
|
4752
|
-
logwarn(
|
|
4798
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
|
|
4753
4799
|
return true;
|
|
4754
4800
|
} else if (this.#status === "busy") {
|
|
4755
4801
|
throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
|
|
@@ -4760,6 +4806,7 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
4760
4806
|
await this.#page.close();
|
|
4761
4807
|
this.#page = null;
|
|
4762
4808
|
this.#status = "closed";
|
|
4809
|
+
loginfo(`##browser LsdPage ${this.#pageId} is closed`);
|
|
4763
4810
|
return true;
|
|
4764
4811
|
}
|
|
4765
4812
|
closeWhenFree() {
|
|
@@ -4843,10 +4890,11 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
4843
4890
|
return [];
|
|
4844
4891
|
}
|
|
4845
4892
|
async free() {
|
|
4846
|
-
if (this.#status === "free") {
|
|
4847
|
-
logwarn(
|
|
4893
|
+
if (this.#status === "free" && this.pageInfo().openType !== "popup") {
|
|
4894
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
|
|
4848
4895
|
}
|
|
4849
4896
|
this.#status = "free";
|
|
4897
|
+
logdbg(`##browser LsdPage ${this.#pageId} is freed`);
|
|
4850
4898
|
await this.clearRequestInterceptions();
|
|
4851
4899
|
await this.clearResponseInterceptions();
|
|
4852
4900
|
return true;
|
|
@@ -5128,7 +5176,7 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
5128
5176
|
}
|
|
5129
5177
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
5130
5178
|
if (actOptions.length <= 0) {
|
|
5131
|
-
logwarn("
|
|
5179
|
+
logwarn("##browser LsdPage invalid paras in setRequestInterception");
|
|
5132
5180
|
return false;
|
|
5133
5181
|
}
|
|
5134
5182
|
const firstRequestInterception = this.#resquestInterceptionOptions.length <= 0;
|
|
@@ -5151,9 +5199,9 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
5151
5199
|
const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
|
|
5152
5200
|
if (this.#isDebugTask) {
|
|
5153
5201
|
if (matchedFlag) {
|
|
5154
|
-
|
|
5202
|
+
loginfo(`##browser matched request ${request.method()} ${request.url()}`);
|
|
5155
5203
|
} else {
|
|
5156
|
-
|
|
5204
|
+
logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
|
|
5157
5205
|
}
|
|
5158
5206
|
}
|
|
5159
5207
|
if (matchedFlag) {
|
|
@@ -5209,9 +5257,9 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
5209
5257
|
}
|
|
5210
5258
|
if (this.#isDebugTask) {
|
|
5211
5259
|
if (matchedFlag) {
|
|
5212
|
-
|
|
5260
|
+
loginfo(`##browser matched response ${request.method()} ${request.url()}`);
|
|
5213
5261
|
} else {
|
|
5214
|
-
|
|
5262
|
+
logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
|
|
5215
5263
|
}
|
|
5216
5264
|
}
|
|
5217
5265
|
if (!matchedFlag) {
|
|
@@ -5249,7 +5297,7 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
5249
5297
|
}
|
|
5250
5298
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
5251
5299
|
if (actOptions.length <= 0) {
|
|
5252
|
-
logwarn("
|
|
5300
|
+
logwarn("##browser LsdPage invalid paras in setResponseInterception");
|
|
5253
5301
|
return false;
|
|
5254
5302
|
}
|
|
5255
5303
|
const firstResponseInterception = this.#responseInterceptionOptions.length <= 0;
|
|
@@ -5262,7 +5310,7 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
5262
5310
|
}
|
|
5263
5311
|
if (firstResponseInterception && this.#responseInterceptionOptions.length > 0) {
|
|
5264
5312
|
this.#responseCb = this.#responseListener.bind(this);
|
|
5265
|
-
this.#page.on("response"
|
|
5313
|
+
this.#page.on("response" /* PAGE_RESPONSE */, this.#responseCb);
|
|
5266
5314
|
}
|
|
5267
5315
|
return true;
|
|
5268
5316
|
}
|
|
@@ -5310,6 +5358,7 @@ var PatchrightPage = class extends import_node_events8.default {
|
|
|
5310
5358
|
throw new Error(`Page ${this.#pageId} is already busy!!!`);
|
|
5311
5359
|
}
|
|
5312
5360
|
this.#status = "busy";
|
|
5361
|
+
logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
|
|
5313
5362
|
return true;
|
|
5314
5363
|
}
|
|
5315
5364
|
async waitForElement(selector, options = {}) {
|
|
@@ -5448,11 +5497,10 @@ var PatchrightBrowserContext = class extends import_node_events9.default {
|
|
|
5448
5497
|
for (const page of pages) {
|
|
5449
5498
|
const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
|
|
5450
5499
|
const lsdPage = new PatchrightPage(this, page, pageInfo);
|
|
5500
|
+
this.#lsdPages.push(lsdPage);
|
|
5451
5501
|
if (this.#maxViewportOfNewPage) {
|
|
5452
5502
|
await lsdPage.maximizeViewport();
|
|
5453
5503
|
}
|
|
5454
|
-
this.#lsdPages.push(lsdPage);
|
|
5455
|
-
loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
5456
5504
|
}
|
|
5457
5505
|
}
|
|
5458
5506
|
constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, maxViewportOfNewPage = true) {
|
|
@@ -5482,8 +5530,9 @@ var PatchrightBrowserContext = class extends import_node_events9.default {
|
|
|
5482
5530
|
this.#lsdPages = [];
|
|
5483
5531
|
this.#nextPageIdx = 1;
|
|
5484
5532
|
this.#gettingPage = false;
|
|
5533
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
|
|
5485
5534
|
this.#initPages();
|
|
5486
|
-
browserContext.on("page"
|
|
5535
|
+
browserContext.on("page" /* BROWSERCONTEXT_PAGE */, async (page) => {
|
|
5487
5536
|
const pageInfo = page.pageInfo;
|
|
5488
5537
|
if (pageInfo) {
|
|
5489
5538
|
const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
|
|
@@ -5492,27 +5541,26 @@ var PatchrightBrowserContext = class extends import_node_events9.default {
|
|
|
5492
5541
|
const currentTime2 = (0, import_utils12.getCurrentUnixTime)();
|
|
5493
5542
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
|
|
5494
5543
|
const lsdPage = new PatchrightPage(this, page, pageInfo2);
|
|
5544
|
+
this.#lsdPages.push(lsdPage);
|
|
5495
5545
|
if (this.#maxViewportOfNewPage) {
|
|
5496
5546
|
await lsdPage.maximizeViewport();
|
|
5497
5547
|
}
|
|
5498
|
-
this.#lsdPages.push(lsdPage);
|
|
5499
|
-
loginfo(`##page ${lsdPage.id()} created`);
|
|
5500
5548
|
}
|
|
5501
5549
|
});
|
|
5502
|
-
browserContext.on("close"
|
|
5550
|
+
browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
|
|
5503
5551
|
if (browserContext !== bc) {
|
|
5504
|
-
logerr(`##browser different browserContext in browserContext.on("close")`);
|
|
5552
|
+
logerr(`##browser LsdBrowserContext different browserContext in browserContext.on("close")`);
|
|
5505
5553
|
}
|
|
5506
|
-
this.#lsdBrowser.emit("browserContextClose"
|
|
5554
|
+
this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
|
|
5507
5555
|
});
|
|
5508
|
-
this.on("pageClose"
|
|
5556
|
+
this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
|
|
5509
5557
|
if (!(lsdPage instanceof PatchrightPage)) {
|
|
5510
|
-
logerr(
|
|
5558
|
+
logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
|
|
5511
5559
|
return;
|
|
5512
5560
|
}
|
|
5513
5561
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
5514
5562
|
if (idx < 0) {
|
|
5515
|
-
logerr(
|
|
5563
|
+
logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
5516
5564
|
return;
|
|
5517
5565
|
}
|
|
5518
5566
|
this.#lsdPages.splice(idx, 1);
|
|
@@ -5529,7 +5577,7 @@ var PatchrightBrowserContext = class extends import_node_events9.default {
|
|
|
5529
5577
|
if (this.#browserContext) {
|
|
5530
5578
|
this.#status = "closed";
|
|
5531
5579
|
this.#lastStatusUpdateTime = (0, import_utils12.getCurrentUnixTime)();
|
|
5532
|
-
loginfo(
|
|
5580
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
|
|
5533
5581
|
await this.#browserContext.close();
|
|
5534
5582
|
}
|
|
5535
5583
|
return true;
|
|
@@ -5544,12 +5592,12 @@ var PatchrightBrowserContext = class extends import_node_events9.default {
|
|
|
5544
5592
|
await (0, import_utils12.sleep)(200);
|
|
5545
5593
|
}
|
|
5546
5594
|
}
|
|
5547
|
-
logwarn(
|
|
5595
|
+
logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
|
|
5548
5596
|
return false;
|
|
5549
5597
|
}
|
|
5550
5598
|
#freeGettingLock() {
|
|
5551
5599
|
if (!this.#gettingPage) {
|
|
5552
|
-
logwarn(
|
|
5600
|
+
logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
|
|
5553
5601
|
}
|
|
5554
5602
|
this.#gettingPage = false;
|
|
5555
5603
|
}
|
|
@@ -5558,7 +5606,7 @@ var PatchrightBrowserContext = class extends import_node_events9.default {
|
|
|
5558
5606
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
5559
5607
|
}
|
|
5560
5608
|
if (maxPageFreeSeconds <= 0) {
|
|
5561
|
-
logwarn(
|
|
5609
|
+
logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
|
|
5562
5610
|
return false;
|
|
5563
5611
|
}
|
|
5564
5612
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -5655,7 +5703,7 @@ var PatchrightBrowserContext = class extends import_node_events9.default {
|
|
|
5655
5703
|
}
|
|
5656
5704
|
}
|
|
5657
5705
|
id() {
|
|
5658
|
-
return `
|
|
5706
|
+
return `PatchrightContext-${this.#browserIdx}-${this.#browserContextIdx}`;
|
|
5659
5707
|
}
|
|
5660
5708
|
isFree() {
|
|
5661
5709
|
return this.#status === "free";
|
|
@@ -5789,34 +5837,33 @@ var PatchrightBrowser = class _PatchrightBrowser extends import_node_events10.de
|
|
|
5789
5837
|
this.#executablePath = executablePath;
|
|
5790
5838
|
this.#nextBrowserContextIdx = 1;
|
|
5791
5839
|
this.#closeFreePagesIntervalId = null;
|
|
5792
|
-
loginfo(`##browser ${this.id()} ${this.#browserCreationMethod}ed
|
|
5840
|
+
loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
|
|
5793
5841
|
const browserContexts = browser.contexts();
|
|
5794
5842
|
if (browserContexts.length > 0) {
|
|
5795
|
-
logwarn(
|
|
5843
|
+
logwarn(`##browser LsdBrowser there are ${browserContexts.length} new browserContexts when playwright launches new browser`);
|
|
5796
5844
|
}
|
|
5797
5845
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : true;
|
|
5798
5846
|
for (const browserContext of browserContexts) {
|
|
5799
5847
|
const lsdBrowserContext = new PatchrightBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
5800
5848
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
5801
|
-
loginfo(`##browserContext ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
5802
5849
|
}
|
|
5803
|
-
browser.on("disconnected"
|
|
5850
|
+
browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
|
|
5804
5851
|
loginfo(`##browser ${this.id()} disconnected`);
|
|
5805
5852
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
5806
|
-
logerr(
|
|
5853
|
+
logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
|
|
5807
5854
|
}
|
|
5808
5855
|
});
|
|
5809
|
-
this.on("browserContextClose"
|
|
5856
|
+
this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
|
|
5810
5857
|
if (!(lsdBrowserContext instanceof PatchrightBrowserContext)) {
|
|
5811
|
-
logerr(
|
|
5858
|
+
logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
|
|
5812
5859
|
return;
|
|
5813
5860
|
}
|
|
5814
5861
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
5815
5862
|
if (idx < 0) {
|
|
5816
|
-
logerr(
|
|
5863
|
+
logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
5817
5864
|
return;
|
|
5818
5865
|
}
|
|
5819
|
-
loginfo(`##
|
|
5866
|
+
loginfo(`##browser ${lsdBrowserContext.id()} closed
|
|
5820
5867
|
`);
|
|
5821
5868
|
this.#lsdBrowserContexts.splice(idx, 1);
|
|
5822
5869
|
if (this.#lsdBrowserContexts.length === 0) {
|
|
@@ -5837,7 +5884,7 @@ var PatchrightBrowser = class _PatchrightBrowser extends import_node_events10.de
|
|
|
5837
5884
|
}
|
|
5838
5885
|
async newBrowserContext(options) {
|
|
5839
5886
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
5840
|
-
logwarn(`##browser ${this.id()} can not create more new browserContext`);
|
|
5887
|
+
logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
|
|
5841
5888
|
return null;
|
|
5842
5889
|
}
|
|
5843
5890
|
const browserContextOptions = {};
|
|
@@ -5856,7 +5903,6 @@ var PatchrightBrowser = class _PatchrightBrowser extends import_node_events10.de
|
|
|
5856
5903
|
const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
|
|
5857
5904
|
const lsdBrowserContext = new PatchrightBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
5858
5905
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
5859
|
-
loginfo(`##browser ${lsdBrowserContext.id()} created`);
|
|
5860
5906
|
return lsdBrowserContext;
|
|
5861
5907
|
}
|
|
5862
5908
|
async close() {
|
|
@@ -5867,6 +5913,7 @@ var PatchrightBrowser = class _PatchrightBrowser extends import_node_events10.de
|
|
|
5867
5913
|
await lsdBrowserContext.close();
|
|
5868
5914
|
}
|
|
5869
5915
|
await this.#browser.close();
|
|
5916
|
+
loginfo(`##browser LsdBrowser ${this.id()} is closed`);
|
|
5870
5917
|
return true;
|
|
5871
5918
|
}
|
|
5872
5919
|
browserContexts() {
|
|
@@ -5892,7 +5939,7 @@ var PatchrightBrowser = class _PatchrightBrowser extends import_node_events10.de
|
|
|
5892
5939
|
return this.#executablePath;
|
|
5893
5940
|
}
|
|
5894
5941
|
id() {
|
|
5895
|
-
return `
|
|
5942
|
+
return `PatchrightBrowser-${this.#browserType}-${this.#browserIdx}`;
|
|
5896
5943
|
}
|
|
5897
5944
|
isConnected() {
|
|
5898
5945
|
return this.#browser.isConnected();
|
|
@@ -6264,7 +6311,7 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
6264
6311
|
const cookieItems = await this.#getCookies(page);
|
|
6265
6312
|
const domainSet = new Set(cookieItems.map((c) => c.domain));
|
|
6266
6313
|
if (domainSet.size !== 1) {
|
|
6267
|
-
logwarn(
|
|
6314
|
+
logwarn(`##browser LsdPage domains in clearCookies: ${Array.from(domainSet.values())}`);
|
|
6268
6315
|
}
|
|
6269
6316
|
for (const domain of domainSet.values()) {
|
|
6270
6317
|
await browserContext.clearCookies({ domain });
|
|
@@ -6470,15 +6517,15 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
6470
6517
|
}
|
|
6471
6518
|
const page = this.#page;
|
|
6472
6519
|
const pageId = this.#pageId;
|
|
6473
|
-
page.on("close"
|
|
6474
|
-
loginfo(`##browser
|
|
6520
|
+
page.on("close" /* PAGE_CLOSE */, async () => {
|
|
6521
|
+
loginfo(`##browser page ${pageId} closed @LsdPage`);
|
|
6475
6522
|
if (!page.pageInfo) {
|
|
6476
|
-
logerr(
|
|
6523
|
+
logerr(`##browser LsdPage logic error in page.on("close")`);
|
|
6477
6524
|
}
|
|
6478
|
-
this.emit("pageClose");
|
|
6479
|
-
this.#lsdBrowserContext.emit("pageClose"
|
|
6525
|
+
this.emit("pageClose" /* PAGE_CLOSE */);
|
|
6526
|
+
this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
|
|
6480
6527
|
});
|
|
6481
|
-
page.on("popup"
|
|
6528
|
+
page.on("popup" /* PAGE_POUP */, (p) => {
|
|
6482
6529
|
if (p) {
|
|
6483
6530
|
let evtData = null;
|
|
6484
6531
|
const pageInfo = p.pageInfo;
|
|
@@ -6492,12 +6539,12 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
6492
6539
|
pageInfo.relatedId = page.pageInfo.taskId;
|
|
6493
6540
|
}
|
|
6494
6541
|
} else {
|
|
6495
|
-
logerr(`##browser
|
|
6542
|
+
logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
|
|
6496
6543
|
}
|
|
6497
|
-
loginfo(`##browser
|
|
6498
|
-
this.emit("pagePopup"
|
|
6544
|
+
loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
|
|
6545
|
+
this.emit("pagePopup" /* PAGE_POPUP */, evtData);
|
|
6499
6546
|
} else {
|
|
6500
|
-
logerr(`##browser ${pageId} has popup page with null page`);
|
|
6547
|
+
logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
|
|
6501
6548
|
}
|
|
6502
6549
|
});
|
|
6503
6550
|
}
|
|
@@ -6512,13 +6559,14 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
6512
6559
|
const currentTime = (0, import_utils15.getCurrentUnixTime)();
|
|
6513
6560
|
const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
|
|
6514
6561
|
this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
|
|
6515
|
-
this.#pageId = `
|
|
6562
|
+
this.#pageId = `CamoufoxPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
6516
6563
|
this.#closeWhenFree = false;
|
|
6517
6564
|
this.#resquestInterceptionOptions = [];
|
|
6518
6565
|
this.#responseInterceptionOptions = [];
|
|
6519
6566
|
this.#client = null;
|
|
6520
6567
|
this.#responseCb = null;
|
|
6521
6568
|
this.#isDebugTask = false;
|
|
6569
|
+
loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
|
|
6522
6570
|
this.#addPageOn();
|
|
6523
6571
|
}
|
|
6524
6572
|
async addPreloadScript() {
|
|
@@ -6586,7 +6634,7 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
6586
6634
|
}
|
|
6587
6635
|
async close() {
|
|
6588
6636
|
if (this.#status === "closed") {
|
|
6589
|
-
logwarn(
|
|
6637
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
|
|
6590
6638
|
return true;
|
|
6591
6639
|
} else if (this.#status === "busy") {
|
|
6592
6640
|
throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
|
|
@@ -6597,6 +6645,7 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
6597
6645
|
await this.#page.close();
|
|
6598
6646
|
this.#page = null;
|
|
6599
6647
|
this.#status = "closed";
|
|
6648
|
+
loginfo(`##browser LsdPage ${this.#pageId} is closed`);
|
|
6600
6649
|
return true;
|
|
6601
6650
|
}
|
|
6602
6651
|
closeWhenFree() {
|
|
@@ -6681,10 +6730,11 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
6681
6730
|
return [];
|
|
6682
6731
|
}
|
|
6683
6732
|
async free() {
|
|
6684
|
-
if (this.#status === "free") {
|
|
6685
|
-
logwarn(
|
|
6733
|
+
if (this.#status === "free" && this.pageInfo().openType !== "popup") {
|
|
6734
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
|
|
6686
6735
|
}
|
|
6687
6736
|
this.#status = "free";
|
|
6737
|
+
logdbg(`##browser LsdPage ${this.#pageId} is freed`);
|
|
6688
6738
|
await this.clearRequestInterceptions();
|
|
6689
6739
|
await this.clearResponseInterceptions();
|
|
6690
6740
|
return true;
|
|
@@ -6966,7 +7016,7 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
6966
7016
|
}
|
|
6967
7017
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
6968
7018
|
if (actOptions.length <= 0) {
|
|
6969
|
-
logwarn("
|
|
7019
|
+
logwarn("##browser LsdPage invalid paras in setRequestInterception");
|
|
6970
7020
|
return false;
|
|
6971
7021
|
}
|
|
6972
7022
|
const firstRequestInterception = this.#resquestInterceptionOptions.length <= 0;
|
|
@@ -6989,9 +7039,9 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
6989
7039
|
const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
|
|
6990
7040
|
if (this.#isDebugTask) {
|
|
6991
7041
|
if (matchedFlag) {
|
|
6992
|
-
|
|
7042
|
+
loginfo(`##browser matched request ${request.method()} ${request.url()}`);
|
|
6993
7043
|
} else {
|
|
6994
|
-
|
|
7044
|
+
logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
|
|
6995
7045
|
}
|
|
6996
7046
|
}
|
|
6997
7047
|
if (matchedFlag) {
|
|
@@ -7047,9 +7097,9 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
7047
7097
|
}
|
|
7048
7098
|
if (this.#isDebugTask) {
|
|
7049
7099
|
if (matchedFlag) {
|
|
7050
|
-
|
|
7100
|
+
loginfo(`##browser matched response ${request.method()} ${request.url()}`);
|
|
7051
7101
|
} else {
|
|
7052
|
-
|
|
7102
|
+
logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
|
|
7053
7103
|
}
|
|
7054
7104
|
}
|
|
7055
7105
|
if (!matchedFlag) {
|
|
@@ -7087,7 +7137,7 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
7087
7137
|
}
|
|
7088
7138
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
7089
7139
|
if (actOptions.length <= 0) {
|
|
7090
|
-
logwarn("
|
|
7140
|
+
logwarn("##browser LsdPage invalid paras in setResponseInterception");
|
|
7091
7141
|
return false;
|
|
7092
7142
|
}
|
|
7093
7143
|
const firstResponseInterception = this.#responseInterceptionOptions.length <= 0;
|
|
@@ -7100,7 +7150,7 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
7100
7150
|
}
|
|
7101
7151
|
if (firstResponseInterception && this.#responseInterceptionOptions.length > 0) {
|
|
7102
7152
|
this.#responseCb = this.#responseListener.bind(this);
|
|
7103
|
-
this.#page.on("response"
|
|
7153
|
+
this.#page.on("response" /* PAGE_RESPONSE */, this.#responseCb);
|
|
7104
7154
|
}
|
|
7105
7155
|
return true;
|
|
7106
7156
|
}
|
|
@@ -7148,6 +7198,7 @@ var CamoufoxPage = class extends import_node_events11.default {
|
|
|
7148
7198
|
throw new Error(`Page ${this.#pageId} is already busy!!!`);
|
|
7149
7199
|
}
|
|
7150
7200
|
this.#status = "busy";
|
|
7201
|
+
logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
|
|
7151
7202
|
return true;
|
|
7152
7203
|
}
|
|
7153
7204
|
async waitForElement(selector, options = {}) {
|
|
@@ -7286,11 +7337,10 @@ var CamoufoxBrowserContext = class extends import_node_events12.default {
|
|
|
7286
7337
|
for (const page of pages) {
|
|
7287
7338
|
const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
|
|
7288
7339
|
const lsdPage = new CamoufoxPage(this, page, pageInfo);
|
|
7340
|
+
this.#lsdPages.push(lsdPage);
|
|
7289
7341
|
if (this.#maxViewportOfNewPage) {
|
|
7290
7342
|
await lsdPage.maximizeViewport();
|
|
7291
7343
|
}
|
|
7292
|
-
this.#lsdPages.push(lsdPage);
|
|
7293
|
-
loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
7294
7344
|
}
|
|
7295
7345
|
}
|
|
7296
7346
|
constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, maxViewportOfNewPage = true) {
|
|
@@ -7320,8 +7370,9 @@ var CamoufoxBrowserContext = class extends import_node_events12.default {
|
|
|
7320
7370
|
this.#lsdPages = [];
|
|
7321
7371
|
this.#nextPageIdx = 1;
|
|
7322
7372
|
this.#gettingPage = false;
|
|
7373
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
|
|
7323
7374
|
this.#initPages();
|
|
7324
|
-
browserContext.on("page"
|
|
7375
|
+
browserContext.on("page" /* BROWSERCONTEXT_PAGE */, async (page) => {
|
|
7325
7376
|
const pageInfo = page.pageInfo;
|
|
7326
7377
|
if (pageInfo) {
|
|
7327
7378
|
const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
|
|
@@ -7330,27 +7381,26 @@ var CamoufoxBrowserContext = class extends import_node_events12.default {
|
|
|
7330
7381
|
const currentTime2 = (0, import_utils16.getCurrentUnixTime)();
|
|
7331
7382
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
|
|
7332
7383
|
const lsdPage = new CamoufoxPage(this, page, pageInfo2);
|
|
7384
|
+
this.#lsdPages.push(lsdPage);
|
|
7333
7385
|
if (this.#maxViewportOfNewPage) {
|
|
7334
7386
|
await lsdPage.maximizeViewport();
|
|
7335
7387
|
}
|
|
7336
|
-
this.#lsdPages.push(lsdPage);
|
|
7337
|
-
loginfo(`##page ${lsdPage.id()} created`);
|
|
7338
7388
|
}
|
|
7339
7389
|
});
|
|
7340
|
-
browserContext.on("close"
|
|
7390
|
+
browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
|
|
7341
7391
|
if (browserContext !== bc) {
|
|
7342
|
-
logerr(`##browser different browserContext in browserContext.on("close")`);
|
|
7392
|
+
logerr(`##browser LsdBrowserContext different browserContext in browserContext.on("close")`);
|
|
7343
7393
|
}
|
|
7344
|
-
this.#lsdBrowser.emit("browserContextClose"
|
|
7394
|
+
this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
|
|
7345
7395
|
});
|
|
7346
|
-
this.on("pageClose"
|
|
7396
|
+
this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
|
|
7347
7397
|
if (!(lsdPage instanceof CamoufoxPage)) {
|
|
7348
|
-
logerr(
|
|
7398
|
+
logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
|
|
7349
7399
|
return;
|
|
7350
7400
|
}
|
|
7351
7401
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
7352
7402
|
if (idx < 0) {
|
|
7353
|
-
logerr(
|
|
7403
|
+
logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
7354
7404
|
return;
|
|
7355
7405
|
}
|
|
7356
7406
|
this.#lsdPages.splice(idx, 1);
|
|
@@ -7367,7 +7417,7 @@ var CamoufoxBrowserContext = class extends import_node_events12.default {
|
|
|
7367
7417
|
if (this.#browserContext) {
|
|
7368
7418
|
this.#status = "closed";
|
|
7369
7419
|
this.#lastStatusUpdateTime = (0, import_utils16.getCurrentUnixTime)();
|
|
7370
|
-
loginfo(
|
|
7420
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
|
|
7371
7421
|
await this.#browserContext.close();
|
|
7372
7422
|
}
|
|
7373
7423
|
return true;
|
|
@@ -7382,12 +7432,12 @@ var CamoufoxBrowserContext = class extends import_node_events12.default {
|
|
|
7382
7432
|
await (0, import_utils16.sleep)(200);
|
|
7383
7433
|
}
|
|
7384
7434
|
}
|
|
7385
|
-
logwarn(
|
|
7435
|
+
logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
|
|
7386
7436
|
return false;
|
|
7387
7437
|
}
|
|
7388
7438
|
#freeGettingLock() {
|
|
7389
7439
|
if (!this.#gettingPage) {
|
|
7390
|
-
logwarn(
|
|
7440
|
+
logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
|
|
7391
7441
|
}
|
|
7392
7442
|
this.#gettingPage = false;
|
|
7393
7443
|
}
|
|
@@ -7396,7 +7446,7 @@ var CamoufoxBrowserContext = class extends import_node_events12.default {
|
|
|
7396
7446
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
7397
7447
|
}
|
|
7398
7448
|
if (maxPageFreeSeconds <= 0) {
|
|
7399
|
-
logwarn(
|
|
7449
|
+
logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
|
|
7400
7450
|
return false;
|
|
7401
7451
|
}
|
|
7402
7452
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -7493,7 +7543,7 @@ var CamoufoxBrowserContext = class extends import_node_events12.default {
|
|
|
7493
7543
|
}
|
|
7494
7544
|
}
|
|
7495
7545
|
id() {
|
|
7496
|
-
return `
|
|
7546
|
+
return `CamoufoxContext-${this.#browserIdx}-${this.#browserContextIdx}`;
|
|
7497
7547
|
}
|
|
7498
7548
|
isFree() {
|
|
7499
7549
|
return this.#status === "free";
|
|
@@ -7627,34 +7677,33 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends import_node_events13.defaul
|
|
|
7627
7677
|
this.#executablePath = executablePath;
|
|
7628
7678
|
this.#nextBrowserContextIdx = 1;
|
|
7629
7679
|
this.#closeFreePagesIntervalId = null;
|
|
7630
|
-
loginfo(`##browser ${this.id()} ${this.#browserCreationMethod}ed
|
|
7680
|
+
loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
|
|
7631
7681
|
const browserContexts = browser.contexts();
|
|
7632
7682
|
if (browserContexts.length > 0) {
|
|
7633
|
-
logwarn(
|
|
7683
|
+
logwarn(`##browser LsdBrowser there are ${browserContexts.length} new browserContexts when camoufox launches new browser`);
|
|
7634
7684
|
}
|
|
7635
7685
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : true;
|
|
7636
7686
|
for (const browserContext of browserContexts) {
|
|
7637
7687
|
const lsdBrowserContext = new CamoufoxBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
7638
7688
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
7639
|
-
loginfo(`##browserContext ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
7640
7689
|
}
|
|
7641
|
-
browser.on("disconnected"
|
|
7690
|
+
browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
|
|
7642
7691
|
loginfo(`##browser ${this.id()} disconnected`);
|
|
7643
7692
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
7644
|
-
logerr(
|
|
7693
|
+
logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
|
|
7645
7694
|
}
|
|
7646
7695
|
});
|
|
7647
|
-
this.on("browserContextClose"
|
|
7696
|
+
this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
|
|
7648
7697
|
if (!(lsdBrowserContext instanceof CamoufoxBrowserContext)) {
|
|
7649
|
-
logerr(
|
|
7698
|
+
logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
|
|
7650
7699
|
return;
|
|
7651
7700
|
}
|
|
7652
7701
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
7653
7702
|
if (idx < 0) {
|
|
7654
|
-
logerr(
|
|
7703
|
+
logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
7655
7704
|
return;
|
|
7656
7705
|
}
|
|
7657
|
-
loginfo(`##
|
|
7706
|
+
loginfo(`##browser ${lsdBrowserContext.id()} closed
|
|
7658
7707
|
`);
|
|
7659
7708
|
this.#lsdBrowserContexts.splice(idx, 1);
|
|
7660
7709
|
if (this.#lsdBrowserContexts.length === 0) {
|
|
@@ -7675,7 +7724,7 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends import_node_events13.defaul
|
|
|
7675
7724
|
}
|
|
7676
7725
|
async newBrowserContext(options) {
|
|
7677
7726
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
7678
|
-
logwarn(`##browser ${this.id()} can not create more new browserContext`);
|
|
7727
|
+
logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
|
|
7679
7728
|
return null;
|
|
7680
7729
|
}
|
|
7681
7730
|
const browserContextOptions = {};
|
|
@@ -7694,7 +7743,6 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends import_node_events13.defaul
|
|
|
7694
7743
|
const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
|
|
7695
7744
|
const lsdBrowserContext = new CamoufoxBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
7696
7745
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
7697
|
-
loginfo(`##browser ${lsdBrowserContext.id()} created`);
|
|
7698
7746
|
return lsdBrowserContext;
|
|
7699
7747
|
}
|
|
7700
7748
|
async close() {
|
|
@@ -7705,6 +7753,7 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends import_node_events13.defaul
|
|
|
7705
7753
|
await lsdBrowserContext.close();
|
|
7706
7754
|
}
|
|
7707
7755
|
await this.#browser.close();
|
|
7756
|
+
loginfo(`##browser LsdBrowser ${this.id()} is closed`);
|
|
7708
7757
|
return true;
|
|
7709
7758
|
}
|
|
7710
7759
|
browserContexts() {
|
|
@@ -7730,7 +7779,7 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends import_node_events13.defaul
|
|
|
7730
7779
|
return this.#executablePath;
|
|
7731
7780
|
}
|
|
7732
7781
|
id() {
|
|
7733
|
-
return `
|
|
7782
|
+
return `CamoufoxBrowser-${this.#browserType}-${this.#browserIdx}`;
|
|
7734
7783
|
}
|
|
7735
7784
|
isConnected() {
|
|
7736
7785
|
return this.#browser.isConnected();
|
|
@@ -7892,22 +7941,22 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
7892
7941
|
const actOptions = { closeFreePagesIntervalSeconds, maxBrowserContextsPerBrowser, maxPagesPerBrowserContext, maxPageFreeSeconds, maxViewportOfNewPage, proxy, timeout, args, executablePath, maxWindowSize, headless, minBrowserContexts, incognito, proxyPerBrowserContext, userDataDir, userAgent };
|
|
7893
7942
|
let idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--incoginto"));
|
|
7894
7943
|
if (idx >= 0) {
|
|
7895
|
-
logwarn(
|
|
7944
|
+
logwarn(`##browser controller Please use options.incognito instead when launching new browser.`);
|
|
7896
7945
|
args.splice(idx, 1);
|
|
7897
7946
|
}
|
|
7898
7947
|
idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--proxy-server"));
|
|
7899
7948
|
if (idx >= 0) {
|
|
7900
|
-
logwarn(
|
|
7949
|
+
logwarn(`##browser controller Please use options.proxy instead when launching new browser.`);
|
|
7901
7950
|
args.splice(idx, 1);
|
|
7902
7951
|
}
|
|
7903
7952
|
idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--user-data-dir"));
|
|
7904
7953
|
if (idx >= 0) {
|
|
7905
|
-
logwarn(
|
|
7954
|
+
logwarn(`##browser controller Please use options.userDataDir instead when launching new browser.`);
|
|
7906
7955
|
args.splice(idx, 1);
|
|
7907
7956
|
}
|
|
7908
7957
|
idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--start-maximized"));
|
|
7909
7958
|
if (idx >= 0) {
|
|
7910
|
-
logwarn(
|
|
7959
|
+
logwarn(`##browser controller Please use options.maxWindowSize instead when launching new browser.`);
|
|
7911
7960
|
args.splice(idx, 1);
|
|
7912
7961
|
}
|
|
7913
7962
|
let lsdBrowser;
|
|
@@ -8105,7 +8154,7 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
8105
8154
|
const pids = await (0, import_utils18.getPidsListeningOnPort)(port);
|
|
8106
8155
|
let browserPid = 0;
|
|
8107
8156
|
if (pids.length !== 1) {
|
|
8108
|
-
logerr(`##browser pids.length ${pids.length} is not 1 when trying to connect to browserUrl ${browserUrl}`);
|
|
8157
|
+
logerr(`##browser controller pids.length ${pids.length} is not 1 when trying to connect to browserUrl ${browserUrl}`);
|
|
8109
8158
|
} else {
|
|
8110
8159
|
browserPid = pids[0];
|
|
8111
8160
|
}
|
|
@@ -8150,6 +8199,10 @@ var controller = new LsdBrowserController();
|
|
|
8150
8199
|
0 && (module.exports = {
|
|
8151
8200
|
CheerioElement,
|
|
8152
8201
|
CheerioPage,
|
|
8202
|
+
ControllerEvent,
|
|
8203
|
+
LsdBrowserContextEvent,
|
|
8204
|
+
LsdBrowserEvent,
|
|
8205
|
+
LsdPageEvent,
|
|
8153
8206
|
PlaywrightBrowser,
|
|
8154
8207
|
PlaywrightBrowserContext,
|
|
8155
8208
|
PlaywrightElement,
|