@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.js
CHANGED
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
// src/types/types.ts
|
|
2
|
+
var ControllerEvent = /* @__PURE__ */ ((ControllerEvent2) => {
|
|
3
|
+
ControllerEvent2["BROWSERCONTEXT_CLOSE"] = "close";
|
|
4
|
+
ControllerEvent2["BROWSERCONTEXT_PAGE"] = "page";
|
|
5
|
+
ControllerEvent2["BROWSERCONTEXT_TARGETCREATED"] = "targetcreated";
|
|
6
|
+
ControllerEvent2["BROWSER_DISCONNECTED"] = "disconnected";
|
|
7
|
+
ControllerEvent2["PAGE_CLOSE"] = "close";
|
|
8
|
+
ControllerEvent2["PAGE_POUP"] = "popup";
|
|
9
|
+
ControllerEvent2["PAGE_REQUEST"] = "request";
|
|
10
|
+
ControllerEvent2["PAGE_RESPONSE"] = "response";
|
|
11
|
+
return ControllerEvent2;
|
|
12
|
+
})(ControllerEvent || {});
|
|
13
|
+
var LsdPageEvent = /* @__PURE__ */ ((LsdPageEvent2) => {
|
|
14
|
+
LsdPageEvent2["PAGE_CLOSE"] = "pageClose";
|
|
15
|
+
LsdPageEvent2["PAGE_POPUP"] = "pagePopup";
|
|
16
|
+
return LsdPageEvent2;
|
|
17
|
+
})(LsdPageEvent || {});
|
|
18
|
+
var LsdBrowserContextEvent = /* @__PURE__ */ ((LsdBrowserContextEvent2) => {
|
|
19
|
+
LsdBrowserContextEvent2["PAGE_CLOSE"] = "pageClose";
|
|
20
|
+
return LsdBrowserContextEvent2;
|
|
21
|
+
})(LsdBrowserContextEvent || {});
|
|
22
|
+
var LsdBrowserEvent = /* @__PURE__ */ ((LsdBrowserEvent2) => {
|
|
23
|
+
LsdBrowserEvent2["BROWSER_CONTEXT_CLOSE"] = "browserContextClose";
|
|
24
|
+
return LsdBrowserEvent2;
|
|
25
|
+
})(LsdBrowserEvent || {});
|
|
26
|
+
|
|
1
27
|
// src/utils/log.ts
|
|
2
28
|
import { log, LogLevel } from "@letsscrapedata/utils";
|
|
3
29
|
var pkgLog = log;
|
|
@@ -9,6 +35,9 @@ function setControllerLogFun(logFun) {
|
|
|
9
35
|
return false;
|
|
10
36
|
}
|
|
11
37
|
}
|
|
38
|
+
async function logdbg(...args) {
|
|
39
|
+
await pkgLog(LogLevel.DBG, ...args);
|
|
40
|
+
}
|
|
12
41
|
async function loginfo(...args) {
|
|
13
42
|
await pkgLog(LogLevel.INF, ...args);
|
|
14
43
|
}
|
|
@@ -372,7 +401,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
372
401
|
const cookieItems = await this.#getCookies(page);
|
|
373
402
|
const domainSet = new Set(cookieItems.map((c) => c.domain));
|
|
374
403
|
if (domainSet.size !== 1) {
|
|
375
|
-
logwarn(
|
|
404
|
+
logwarn(`##browser LsdPage domains in clearCookies: ${Array.from(domainSet.values())}`);
|
|
376
405
|
}
|
|
377
406
|
for (const domain of domainSet.values()) {
|
|
378
407
|
await browserContext.clearCookies({ domain });
|
|
@@ -578,15 +607,15 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
578
607
|
}
|
|
579
608
|
const page = this.#page;
|
|
580
609
|
const pageId = this.#pageId;
|
|
581
|
-
page.on("close"
|
|
582
|
-
loginfo(`##browser
|
|
610
|
+
page.on("close" /* PAGE_CLOSE */, async () => {
|
|
611
|
+
loginfo(`##browser page ${pageId} closed @LsdPage`);
|
|
583
612
|
if (!page.pageInfo) {
|
|
584
|
-
logerr(
|
|
613
|
+
logerr(`##browser LsdPage logic error in page.on("close")`);
|
|
585
614
|
}
|
|
586
|
-
this.emit("pageClose");
|
|
587
|
-
this.#lsdBrowserContext.emit("pageClose"
|
|
615
|
+
this.emit("pageClose" /* PAGE_CLOSE */);
|
|
616
|
+
this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
|
|
588
617
|
});
|
|
589
|
-
page.on("popup"
|
|
618
|
+
page.on("popup" /* PAGE_POUP */, (p) => {
|
|
590
619
|
if (p) {
|
|
591
620
|
let evtData = null;
|
|
592
621
|
const pageInfo = p.pageInfo;
|
|
@@ -600,12 +629,12 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
600
629
|
pageInfo.relatedId = page.pageInfo.taskId;
|
|
601
630
|
}
|
|
602
631
|
} else {
|
|
603
|
-
logerr(`##browser
|
|
632
|
+
logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
|
|
604
633
|
}
|
|
605
|
-
loginfo(`##browser
|
|
606
|
-
this.emit("pagePopup"
|
|
634
|
+
loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
|
|
635
|
+
this.emit("pagePopup" /* PAGE_POPUP */, evtData);
|
|
607
636
|
} else {
|
|
608
|
-
logerr(`##browser ${pageId} has popup page with null page`);
|
|
637
|
+
logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
|
|
609
638
|
}
|
|
610
639
|
});
|
|
611
640
|
}
|
|
@@ -620,13 +649,14 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
620
649
|
const currentTime = getCurrentUnixTime();
|
|
621
650
|
const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
|
|
622
651
|
this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
|
|
623
|
-
this.#pageId = `
|
|
652
|
+
this.#pageId = `PlaywrightPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
624
653
|
this.#closeWhenFree = false;
|
|
625
654
|
this.#resquestInterceptionOptions = [];
|
|
626
655
|
this.#responseInterceptionOptions = [];
|
|
627
656
|
this.#client = null;
|
|
628
657
|
this.#responseCb = null;
|
|
629
658
|
this.#isDebugTask = false;
|
|
659
|
+
loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
|
|
630
660
|
this.#addPageOn();
|
|
631
661
|
}
|
|
632
662
|
async addPreloadScript(scriptOrFunc, arg) {
|
|
@@ -707,7 +737,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
707
737
|
}
|
|
708
738
|
async close() {
|
|
709
739
|
if (this.#status === "closed") {
|
|
710
|
-
logwarn(
|
|
740
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
|
|
711
741
|
return true;
|
|
712
742
|
} else if (this.#status === "busy") {
|
|
713
743
|
throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
|
|
@@ -718,6 +748,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
718
748
|
await this.#page.close();
|
|
719
749
|
this.#page = null;
|
|
720
750
|
this.#status = "closed";
|
|
751
|
+
loginfo(`##browser LsdPage ${this.#pageId} is closed`);
|
|
721
752
|
return true;
|
|
722
753
|
}
|
|
723
754
|
closeWhenFree() {
|
|
@@ -802,10 +833,11 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
802
833
|
return [];
|
|
803
834
|
}
|
|
804
835
|
async free() {
|
|
805
|
-
if (this.#status === "free") {
|
|
806
|
-
logwarn(
|
|
836
|
+
if (this.#status === "free" && this.pageInfo().openType !== "popup") {
|
|
837
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
|
|
807
838
|
}
|
|
808
839
|
this.#status = "free";
|
|
840
|
+
logdbg(`##browser LsdPage ${this.#pageId} is freed`);
|
|
809
841
|
await this.clearRequestInterceptions();
|
|
810
842
|
await this.clearResponseInterceptions();
|
|
811
843
|
return true;
|
|
@@ -1087,7 +1119,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
1087
1119
|
}
|
|
1088
1120
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
1089
1121
|
if (actOptions.length <= 0) {
|
|
1090
|
-
logwarn("
|
|
1122
|
+
logwarn("##browser LsdPage invalid paras in setRequestInterception");
|
|
1091
1123
|
return false;
|
|
1092
1124
|
}
|
|
1093
1125
|
const firstRequestInterception = this.#resquestInterceptionOptions.length <= 0;
|
|
@@ -1110,9 +1142,9 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
1110
1142
|
const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
|
|
1111
1143
|
if (this.#isDebugTask) {
|
|
1112
1144
|
if (matchedFlag) {
|
|
1113
|
-
|
|
1145
|
+
loginfo(`##browser matched request ${request.method()} ${request.url()}`);
|
|
1114
1146
|
} else {
|
|
1115
|
-
|
|
1147
|
+
logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
|
|
1116
1148
|
}
|
|
1117
1149
|
}
|
|
1118
1150
|
if (matchedFlag) {
|
|
@@ -1168,9 +1200,9 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
1168
1200
|
}
|
|
1169
1201
|
if (this.#isDebugTask) {
|
|
1170
1202
|
if (matchedFlag) {
|
|
1171
|
-
|
|
1203
|
+
loginfo(`##browser matched response ${request.method()} ${request.url()}`);
|
|
1172
1204
|
} else {
|
|
1173
|
-
|
|
1205
|
+
logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
|
|
1174
1206
|
}
|
|
1175
1207
|
}
|
|
1176
1208
|
if (!matchedFlag) {
|
|
@@ -1208,7 +1240,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
1208
1240
|
}
|
|
1209
1241
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
1210
1242
|
if (actOptions.length <= 0) {
|
|
1211
|
-
logwarn("
|
|
1243
|
+
logwarn("##browser LsdPage invalid paras in setResponseInterception");
|
|
1212
1244
|
return false;
|
|
1213
1245
|
}
|
|
1214
1246
|
const firstResponseInterception = this.#responseInterceptionOptions.length <= 0;
|
|
@@ -1221,7 +1253,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
1221
1253
|
}
|
|
1222
1254
|
if (firstResponseInterception && this.#responseInterceptionOptions.length > 0) {
|
|
1223
1255
|
this.#responseCb = this.#responseListener.bind(this);
|
|
1224
|
-
this.#page.on("response"
|
|
1256
|
+
this.#page.on("response" /* PAGE_RESPONSE */, this.#responseCb);
|
|
1225
1257
|
}
|
|
1226
1258
|
return true;
|
|
1227
1259
|
}
|
|
@@ -1269,6 +1301,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
1269
1301
|
throw new Error(`Page ${this.#pageId} is already busy!!!`);
|
|
1270
1302
|
}
|
|
1271
1303
|
this.#status = "busy";
|
|
1304
|
+
logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
|
|
1272
1305
|
return true;
|
|
1273
1306
|
}
|
|
1274
1307
|
async waitForElement(selector, options = {}) {
|
|
@@ -1407,11 +1440,10 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1407
1440
|
for (const page of pages) {
|
|
1408
1441
|
const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
|
|
1409
1442
|
const lsdPage = new PlaywrightPage(this, page, pageInfo);
|
|
1443
|
+
this.#lsdPages.push(lsdPage);
|
|
1410
1444
|
if (this.#maxViewportOfNewPage) {
|
|
1411
1445
|
await lsdPage.maximizeViewport();
|
|
1412
1446
|
}
|
|
1413
|
-
this.#lsdPages.push(lsdPage);
|
|
1414
|
-
loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
1415
1447
|
}
|
|
1416
1448
|
}
|
|
1417
1449
|
constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, maxViewportOfNewPage = true) {
|
|
@@ -1441,8 +1473,9 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1441
1473
|
this.#lsdPages = [];
|
|
1442
1474
|
this.#nextPageIdx = 1;
|
|
1443
1475
|
this.#gettingPage = false;
|
|
1476
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
|
|
1444
1477
|
this.#initPages();
|
|
1445
|
-
browserContext.on("page"
|
|
1478
|
+
browserContext.on("page" /* BROWSERCONTEXT_PAGE */, async (page) => {
|
|
1446
1479
|
const pageInfo = page.pageInfo;
|
|
1447
1480
|
if (pageInfo) {
|
|
1448
1481
|
const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
|
|
@@ -1451,27 +1484,26 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1451
1484
|
const currentTime2 = getCurrentUnixTime2();
|
|
1452
1485
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
|
|
1453
1486
|
const lsdPage = new PlaywrightPage(this, page, pageInfo2);
|
|
1487
|
+
this.#lsdPages.push(lsdPage);
|
|
1454
1488
|
if (this.#maxViewportOfNewPage) {
|
|
1455
1489
|
await lsdPage.maximizeViewport();
|
|
1456
1490
|
}
|
|
1457
|
-
this.#lsdPages.push(lsdPage);
|
|
1458
|
-
loginfo(`##page ${lsdPage.id()} created`);
|
|
1459
1491
|
}
|
|
1460
1492
|
});
|
|
1461
|
-
browserContext.on("close"
|
|
1493
|
+
browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
|
|
1462
1494
|
if (browserContext !== bc) {
|
|
1463
1495
|
logerr(`##browser different browserContext in browserContext.on("close")`);
|
|
1464
1496
|
}
|
|
1465
|
-
this.#lsdBrowser.emit("browserContextClose"
|
|
1497
|
+
this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
|
|
1466
1498
|
});
|
|
1467
|
-
this.on("pageClose"
|
|
1499
|
+
this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
|
|
1468
1500
|
if (!(lsdPage instanceof PlaywrightPage)) {
|
|
1469
|
-
logerr(
|
|
1501
|
+
logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
|
|
1470
1502
|
return;
|
|
1471
1503
|
}
|
|
1472
1504
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
1473
1505
|
if (idx < 0) {
|
|
1474
|
-
logerr(
|
|
1506
|
+
logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
1475
1507
|
return;
|
|
1476
1508
|
}
|
|
1477
1509
|
this.#lsdPages.splice(idx, 1);
|
|
@@ -1488,7 +1520,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1488
1520
|
if (this.#browserContext) {
|
|
1489
1521
|
this.#status = "closed";
|
|
1490
1522
|
this.#lastStatusUpdateTime = getCurrentUnixTime2();
|
|
1491
|
-
loginfo(
|
|
1523
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
|
|
1492
1524
|
await this.#browserContext.close();
|
|
1493
1525
|
}
|
|
1494
1526
|
return true;
|
|
@@ -1503,12 +1535,12 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1503
1535
|
await sleep(200);
|
|
1504
1536
|
}
|
|
1505
1537
|
}
|
|
1506
|
-
logwarn(
|
|
1538
|
+
logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
|
|
1507
1539
|
return false;
|
|
1508
1540
|
}
|
|
1509
1541
|
#freeGettingLock() {
|
|
1510
1542
|
if (!this.#gettingPage) {
|
|
1511
|
-
logwarn(
|
|
1543
|
+
logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
|
|
1512
1544
|
}
|
|
1513
1545
|
this.#gettingPage = false;
|
|
1514
1546
|
}
|
|
@@ -1517,7 +1549,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1517
1549
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
1518
1550
|
}
|
|
1519
1551
|
if (maxPageFreeSeconds <= 0) {
|
|
1520
|
-
logwarn(
|
|
1552
|
+
logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
|
|
1521
1553
|
return false;
|
|
1522
1554
|
}
|
|
1523
1555
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -1614,7 +1646,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1614
1646
|
}
|
|
1615
1647
|
}
|
|
1616
1648
|
id() {
|
|
1617
|
-
return `
|
|
1649
|
+
return `PlaywrightContext-${this.#browserIdx}-${this.#browserContextIdx}`;
|
|
1618
1650
|
}
|
|
1619
1651
|
isFree() {
|
|
1620
1652
|
return this.#status === "free";
|
|
@@ -1748,34 +1780,33 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends EventEmitter3 {
|
|
|
1748
1780
|
this.#executablePath = executablePath;
|
|
1749
1781
|
this.#nextBrowserContextIdx = 1;
|
|
1750
1782
|
this.#closeFreePagesIntervalId = null;
|
|
1751
|
-
loginfo(`##browser ${this.id()} ${this.#browserCreationMethod}ed
|
|
1783
|
+
loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
|
|
1752
1784
|
const browserContexts = browser.contexts();
|
|
1753
1785
|
if (browserContexts.length > 0) {
|
|
1754
|
-
logwarn(
|
|
1786
|
+
logwarn(`##browser LsdBrowser there are ${browserContexts.length} new browserContexts when playwright launches new browser`);
|
|
1755
1787
|
}
|
|
1756
1788
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : true;
|
|
1757
1789
|
for (const browserContext of browserContexts) {
|
|
1758
1790
|
const lsdBrowserContext = new PlaywrightBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
1759
1791
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
1760
|
-
loginfo(`##browserContext ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
1761
1792
|
}
|
|
1762
|
-
browser.on("disconnected"
|
|
1793
|
+
browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
|
|
1763
1794
|
loginfo(`##browser ${this.id()} disconnected`);
|
|
1764
1795
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
1765
|
-
logerr(
|
|
1796
|
+
logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
|
|
1766
1797
|
}
|
|
1767
1798
|
});
|
|
1768
|
-
this.on("browserContextClose"
|
|
1799
|
+
this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
|
|
1769
1800
|
if (!(lsdBrowserContext instanceof PlaywrightBrowserContext)) {
|
|
1770
|
-
logerr(
|
|
1801
|
+
logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
|
|
1771
1802
|
return;
|
|
1772
1803
|
}
|
|
1773
1804
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
1774
1805
|
if (idx < 0) {
|
|
1775
|
-
logerr(
|
|
1806
|
+
logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
1776
1807
|
return;
|
|
1777
1808
|
}
|
|
1778
|
-
loginfo(`##
|
|
1809
|
+
loginfo(`##browser ${lsdBrowserContext.id()} closed
|
|
1779
1810
|
`);
|
|
1780
1811
|
this.#lsdBrowserContexts.splice(idx, 1);
|
|
1781
1812
|
if (this.#lsdBrowserContexts.length === 0) {
|
|
@@ -1796,7 +1827,7 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends EventEmitter3 {
|
|
|
1796
1827
|
}
|
|
1797
1828
|
async newBrowserContext(options) {
|
|
1798
1829
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
1799
|
-
logwarn(`##browser ${this.id()} can not create more new browserContext`);
|
|
1830
|
+
logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
|
|
1800
1831
|
return null;
|
|
1801
1832
|
}
|
|
1802
1833
|
const browserContextOptions = {};
|
|
@@ -1815,7 +1846,6 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends EventEmitter3 {
|
|
|
1815
1846
|
const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
|
|
1816
1847
|
const lsdBrowserContext = new PlaywrightBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
1817
1848
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
1818
|
-
loginfo(`##browser ${lsdBrowserContext.id()} created`);
|
|
1819
1849
|
return lsdBrowserContext;
|
|
1820
1850
|
}
|
|
1821
1851
|
async close() {
|
|
@@ -1826,6 +1856,7 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends EventEmitter3 {
|
|
|
1826
1856
|
await lsdBrowserContext.close();
|
|
1827
1857
|
}
|
|
1828
1858
|
await this.#browser.close();
|
|
1859
|
+
loginfo(`##browser LsdBrowser ${this.id()} is closed`);
|
|
1829
1860
|
return true;
|
|
1830
1861
|
}
|
|
1831
1862
|
browserContexts() {
|
|
@@ -1851,7 +1882,7 @@ var PlaywrightBrowser = class _PlaywrightBrowser extends EventEmitter3 {
|
|
|
1851
1882
|
return this.#executablePath;
|
|
1852
1883
|
}
|
|
1853
1884
|
id() {
|
|
1854
|
-
return `
|
|
1885
|
+
return `PlaywrightBrowser-${this.#browserType}-${this.#browserIdx}`;
|
|
1855
1886
|
}
|
|
1856
1887
|
isConnected() {
|
|
1857
1888
|
return this.#browser.isConnected();
|
|
@@ -2387,15 +2418,15 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2387
2418
|
}
|
|
2388
2419
|
const page = this.#page;
|
|
2389
2420
|
const pageId = this.#pageId;
|
|
2390
|
-
page.on("close"
|
|
2391
|
-
loginfo(`##browser
|
|
2421
|
+
page.on("close" /* PAGE_CLOSE */, async () => {
|
|
2422
|
+
loginfo(`##browser page ${pageId} closed @LsdPage`);
|
|
2392
2423
|
if (!page.pageInfo) {
|
|
2393
|
-
logerr(
|
|
2424
|
+
logerr(`##browser LsdPage logic error in page.on("close")`);
|
|
2394
2425
|
}
|
|
2395
|
-
this.emit("pageClose");
|
|
2396
|
-
this.#lsdBrowserContext.emit("pageClose"
|
|
2426
|
+
this.emit("pageClose" /* PAGE_CLOSE */);
|
|
2427
|
+
this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
|
|
2397
2428
|
});
|
|
2398
|
-
page.on("popup"
|
|
2429
|
+
page.on("popup" /* PAGE_POUP */, (p) => {
|
|
2399
2430
|
if (p) {
|
|
2400
2431
|
let evtData = null;
|
|
2401
2432
|
const pageInfo = p.pageInfo;
|
|
@@ -2409,12 +2440,12 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2409
2440
|
pageInfo.relatedId = page.pageInfo.taskId;
|
|
2410
2441
|
}
|
|
2411
2442
|
} else {
|
|
2412
|
-
logerr(`##browser
|
|
2443
|
+
logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
|
|
2413
2444
|
}
|
|
2414
|
-
loginfo(`##browser
|
|
2415
|
-
this.emit("pagePopup"
|
|
2445
|
+
loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
|
|
2446
|
+
this.emit("pagePopup" /* PAGE_POPUP */, evtData);
|
|
2416
2447
|
} else {
|
|
2417
|
-
logerr(`##browser ${pageId} has popup page with null page`);
|
|
2448
|
+
logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
|
|
2418
2449
|
}
|
|
2419
2450
|
});
|
|
2420
2451
|
}
|
|
@@ -2429,12 +2460,13 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2429
2460
|
const currentTime = getCurrentUnixTime4();
|
|
2430
2461
|
const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
|
|
2431
2462
|
this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
|
|
2432
|
-
this.#pageId = `
|
|
2463
|
+
this.#pageId = `PuppeteerPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
2433
2464
|
this.#closeWhenFree = false;
|
|
2434
2465
|
this.#requestInterceptionNum = 0;
|
|
2435
2466
|
this.#responseInterceptionNum = 0;
|
|
2436
2467
|
this.#client = null;
|
|
2437
2468
|
this.#isDebugTask = false;
|
|
2469
|
+
loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
|
|
2438
2470
|
this.#addPageOn();
|
|
2439
2471
|
}
|
|
2440
2472
|
async addPreloadScript(scriptOrFunc, arg) {
|
|
@@ -2512,7 +2544,7 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2512
2544
|
}
|
|
2513
2545
|
async close() {
|
|
2514
2546
|
if (this.#status === "closed") {
|
|
2515
|
-
logwarn(
|
|
2547
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
|
|
2516
2548
|
return true;
|
|
2517
2549
|
} else if (this.#status === "busy") {
|
|
2518
2550
|
throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
|
|
@@ -2523,6 +2555,7 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2523
2555
|
await this.#page.close();
|
|
2524
2556
|
this.#page = null;
|
|
2525
2557
|
this.#status = "closed";
|
|
2558
|
+
loginfo(`##browser LsdPage ${this.#pageId} is closed`);
|
|
2526
2559
|
return true;
|
|
2527
2560
|
}
|
|
2528
2561
|
closeWhenFree() {
|
|
@@ -2607,10 +2640,11 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2607
2640
|
return [];
|
|
2608
2641
|
}
|
|
2609
2642
|
async free() {
|
|
2610
|
-
if (this.#status === "free") {
|
|
2611
|
-
logwarn(
|
|
2643
|
+
if (this.#status === "free" && this.pageInfo().openType !== "popup") {
|
|
2644
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
|
|
2612
2645
|
}
|
|
2613
2646
|
this.#status = "free";
|
|
2647
|
+
logdbg(`##browser LsdPage ${this.#pageId} is freed`);
|
|
2614
2648
|
await this.clearRequestInterceptions();
|
|
2615
2649
|
await this.clearResponseInterceptions();
|
|
2616
2650
|
return true;
|
|
@@ -2894,7 +2928,7 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2894
2928
|
}
|
|
2895
2929
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
2896
2930
|
if (actOptions.length <= 0) {
|
|
2897
|
-
logwarn("
|
|
2931
|
+
logwarn("##browser LsdPage invalid paras in setRequestInterception");
|
|
2898
2932
|
return false;
|
|
2899
2933
|
}
|
|
2900
2934
|
if (this.#requestInterceptionNum <= 0) {
|
|
@@ -2903,16 +2937,16 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2903
2937
|
} else {
|
|
2904
2938
|
this.#requestInterceptionNum++;
|
|
2905
2939
|
}
|
|
2906
|
-
this.#page.on("request"
|
|
2940
|
+
this.#page.on("request" /* PAGE_REQUEST */, async (request) => {
|
|
2907
2941
|
try {
|
|
2908
2942
|
for (const option of actOptions) {
|
|
2909
2943
|
const { requestMatch, action, fulfill } = option;
|
|
2910
2944
|
const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
|
|
2911
2945
|
if (this.#isDebugTask) {
|
|
2912
2946
|
if (matchedFlag) {
|
|
2913
|
-
|
|
2947
|
+
loginfo(`##browser matched request ${request.method()} ${request.url()}`);
|
|
2914
2948
|
} else {
|
|
2915
|
-
|
|
2949
|
+
logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
|
|
2916
2950
|
}
|
|
2917
2951
|
}
|
|
2918
2952
|
if (matchedFlag) {
|
|
@@ -2949,11 +2983,11 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2949
2983
|
}
|
|
2950
2984
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
2951
2985
|
if (actOptions.length <= 0) {
|
|
2952
|
-
logwarn("
|
|
2986
|
+
logwarn("##browser LsdPage invalid paras in setResponseInterception");
|
|
2953
2987
|
return false;
|
|
2954
2988
|
}
|
|
2955
2989
|
this.#responseInterceptionNum++;
|
|
2956
|
-
this.#page.on("response"
|
|
2990
|
+
this.#page.on("response" /* PAGE_RESPONSE */, async (response) => {
|
|
2957
2991
|
try {
|
|
2958
2992
|
if (!response.ok() || !this.#page) {
|
|
2959
2993
|
return false;
|
|
@@ -2976,9 +3010,9 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2976
3010
|
}
|
|
2977
3011
|
if (this.#isDebugTask) {
|
|
2978
3012
|
if (matchedFlag) {
|
|
2979
|
-
|
|
3013
|
+
loginfo(`##browser matched response ${request.method()} ${request.url()}`);
|
|
2980
3014
|
} else {
|
|
2981
|
-
|
|
3015
|
+
logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
|
|
2982
3016
|
}
|
|
2983
3017
|
}
|
|
2984
3018
|
if (!matchedFlag) {
|
|
@@ -2997,6 +3031,7 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2997
3031
|
requestData,
|
|
2998
3032
|
responseData
|
|
2999
3033
|
});
|
|
3034
|
+
loginfo(`##browser cache matched response: ${requestUrl}`);
|
|
3000
3035
|
}
|
|
3001
3036
|
if (typeof handler === "function") {
|
|
3002
3037
|
const pageData = { pageUrl, cookies: "" };
|
|
@@ -3062,6 +3097,7 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
3062
3097
|
throw new Error(`Page ${this.#pageId} is already busy!!!`);
|
|
3063
3098
|
}
|
|
3064
3099
|
this.#status = "busy";
|
|
3100
|
+
logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
|
|
3065
3101
|
return true;
|
|
3066
3102
|
}
|
|
3067
3103
|
async waitForElement(selector, options = {}) {
|
|
@@ -3172,14 +3208,13 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
3172
3208
|
for (const page of pages) {
|
|
3173
3209
|
const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
|
|
3174
3210
|
const lsdPage = new PuppeteerPage(this, page, pageInfo);
|
|
3211
|
+
this.#lsdPages.push(lsdPage);
|
|
3175
3212
|
if (this.#maxViewportOfNewPage) {
|
|
3176
3213
|
await lsdPage.maximizeViewport();
|
|
3177
3214
|
}
|
|
3178
3215
|
if (this.#userAgent) {
|
|
3179
3216
|
await lsdPage.setUserAgent(this.#userAgent);
|
|
3180
3217
|
}
|
|
3181
|
-
this.#lsdPages.push(lsdPage);
|
|
3182
|
-
loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
3183
3218
|
}
|
|
3184
3219
|
}
|
|
3185
3220
|
constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, userAgent = "", maxViewportOfNewPage = true) {
|
|
@@ -3208,8 +3243,9 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
3208
3243
|
this.#lsdPages = [];
|
|
3209
3244
|
this.#nextPageIdx = 1;
|
|
3210
3245
|
this.#gettingPage = false;
|
|
3246
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
|
|
3211
3247
|
this.#initPages();
|
|
3212
|
-
browserContext.on("targetcreated"
|
|
3248
|
+
browserContext.on("targetcreated" /* BROWSERCONTEXT_TARGETCREATED */, async (p) => {
|
|
3213
3249
|
if (p.type() === "page") {
|
|
3214
3250
|
const page = await p.page();
|
|
3215
3251
|
if (!page) {
|
|
@@ -3223,30 +3259,36 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
3223
3259
|
const currentTime2 = getCurrentUnixTime5();
|
|
3224
3260
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
|
|
3225
3261
|
const lsdPage = new PuppeteerPage(this, page, pageInfo2);
|
|
3226
|
-
|
|
3227
|
-
await lsdPage.maximizeViewport();
|
|
3228
|
-
}
|
|
3262
|
+
this.#lsdPages.push(lsdPage);
|
|
3229
3263
|
if (this.#userAgent) {
|
|
3230
3264
|
await lsdPage.setUserAgent(this.#userAgent);
|
|
3231
3265
|
}
|
|
3232
|
-
this.#
|
|
3233
|
-
|
|
3266
|
+
if (this.#maxViewportOfNewPage) {
|
|
3267
|
+
await lsdPage.maximizeViewport();
|
|
3268
|
+
}
|
|
3234
3269
|
}
|
|
3235
3270
|
}
|
|
3236
3271
|
});
|
|
3237
|
-
|
|
3272
|
+
browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
|
|
3273
|
+
logerr(`##browser LsdBrowserContext puppeteer BrowserContext receives close event`);
|
|
3274
|
+
if (browserContext !== bc) {
|
|
3275
|
+
logerr(`##browser LsdBrowserContext different browserContext in browserContext.on("close")`);
|
|
3276
|
+
}
|
|
3277
|
+
this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
|
|
3278
|
+
});
|
|
3279
|
+
this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
|
|
3238
3280
|
if (!(lsdPage instanceof PuppeteerPage)) {
|
|
3239
|
-
logerr(
|
|
3281
|
+
logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
|
|
3240
3282
|
return;
|
|
3241
3283
|
}
|
|
3242
3284
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
3243
3285
|
if (idx < 0) {
|
|
3244
|
-
logerr(
|
|
3286
|
+
logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
3245
3287
|
return;
|
|
3246
3288
|
}
|
|
3247
3289
|
this.#lsdPages.splice(idx, 1);
|
|
3248
3290
|
if (this.#lsdPages.length === 0) {
|
|
3249
|
-
this.#lsdBrowser.emit("browserContextClose"
|
|
3291
|
+
this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
|
|
3250
3292
|
}
|
|
3251
3293
|
return;
|
|
3252
3294
|
});
|
|
@@ -3261,7 +3303,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
3261
3303
|
if (this.#browserContext) {
|
|
3262
3304
|
this.#status = "closed";
|
|
3263
3305
|
this.#lastStatusUpdateTime = getCurrentUnixTime5();
|
|
3264
|
-
loginfo(
|
|
3306
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
|
|
3265
3307
|
if (this.#browserContextCreationMethod !== "launch") {
|
|
3266
3308
|
await this.#browserContext.close();
|
|
3267
3309
|
}
|
|
@@ -3278,12 +3320,12 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
3278
3320
|
await sleep2(200);
|
|
3279
3321
|
}
|
|
3280
3322
|
}
|
|
3281
|
-
logwarn(
|
|
3323
|
+
logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
|
|
3282
3324
|
return false;
|
|
3283
3325
|
}
|
|
3284
3326
|
#freeGettingLock() {
|
|
3285
3327
|
if (!this.#gettingPage) {
|
|
3286
|
-
logwarn(
|
|
3328
|
+
logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
|
|
3287
3329
|
}
|
|
3288
3330
|
this.#gettingPage = false;
|
|
3289
3331
|
}
|
|
@@ -3292,7 +3334,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
3292
3334
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
3293
3335
|
}
|
|
3294
3336
|
if (maxPageFreeSeconds <= 0) {
|
|
3295
|
-
logwarn(
|
|
3337
|
+
logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
|
|
3296
3338
|
return false;
|
|
3297
3339
|
}
|
|
3298
3340
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -3391,7 +3433,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
3391
3433
|
}
|
|
3392
3434
|
}
|
|
3393
3435
|
id() {
|
|
3394
|
-
return `
|
|
3436
|
+
return `PuppeteerContext-${this.#browserIdx}-${this.#browserContextIdx}`;
|
|
3395
3437
|
}
|
|
3396
3438
|
isIncognito() {
|
|
3397
3439
|
return this.#incognito;
|
|
@@ -3425,7 +3467,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
3425
3467
|
}
|
|
3426
3468
|
if (localStorageOrigins.length > 0) {
|
|
3427
3469
|
await origPage.setRequestInterception(true);
|
|
3428
|
-
origPage.on("request"
|
|
3470
|
+
origPage.on("request" /* PAGE_REQUEST */, (request) => {
|
|
3429
3471
|
request.respond({
|
|
3430
3472
|
status: 200,
|
|
3431
3473
|
// contentType: "text/html; charset=utf-8", // "text/plain",
|
|
@@ -3528,28 +3570,27 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends EventEmitter6 {
|
|
|
3528
3570
|
this.#executablePath = executablePath;
|
|
3529
3571
|
this.#nextBrowserContextIdx = 1;
|
|
3530
3572
|
this.#closeFreePagesIntervalId = null;
|
|
3531
|
-
loginfo(`##browser
|
|
3573
|
+
loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
|
|
3532
3574
|
const browserContexts = browser.browserContexts();
|
|
3533
3575
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : false;
|
|
3534
3576
|
for (const browserContext of browserContexts) {
|
|
3535
3577
|
const lsdBrowserContext = new PuppeteerBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), this.#userAgent(), maxViewportOfNewPage);
|
|
3536
3578
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
3537
|
-
loginfo(`##browser ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
3538
3579
|
}
|
|
3539
|
-
browser.on("disconnected"
|
|
3580
|
+
browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
|
|
3540
3581
|
loginfo(`##browser ${this.id()} disconnected`);
|
|
3541
3582
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
3542
|
-
logerr(
|
|
3583
|
+
logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
|
|
3543
3584
|
}
|
|
3544
3585
|
});
|
|
3545
|
-
this.on("browserContextClose"
|
|
3586
|
+
this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
|
|
3546
3587
|
if (!(lsdBrowserContext instanceof PuppeteerBrowserContext)) {
|
|
3547
|
-
logerr(
|
|
3588
|
+
logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
|
|
3548
3589
|
return;
|
|
3549
3590
|
}
|
|
3550
3591
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
3551
3592
|
if (idx < 0) {
|
|
3552
|
-
logerr(
|
|
3593
|
+
logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
3553
3594
|
return;
|
|
3554
3595
|
}
|
|
3555
3596
|
loginfo(`##browser ${lsdBrowserContext.id()} closed
|
|
@@ -3573,7 +3614,7 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends EventEmitter6 {
|
|
|
3573
3614
|
}
|
|
3574
3615
|
async newBrowserContext(options) {
|
|
3575
3616
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
3576
|
-
logwarn(`##browser ${this.id()} can not create more new browserContext`);
|
|
3617
|
+
logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
|
|
3577
3618
|
return null;
|
|
3578
3619
|
}
|
|
3579
3620
|
const browserContextOptions = {};
|
|
@@ -3586,7 +3627,6 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends EventEmitter6 {
|
|
|
3586
3627
|
const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
|
|
3587
3628
|
const lsdBrowserContext = new PuppeteerBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), userAgent, maxViewportOfNewPage);
|
|
3588
3629
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
3589
|
-
loginfo(`##browser ${lsdBrowserContext.id()} created`);
|
|
3590
3630
|
return lsdBrowserContext;
|
|
3591
3631
|
}
|
|
3592
3632
|
async close() {
|
|
@@ -3597,6 +3637,7 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends EventEmitter6 {
|
|
|
3597
3637
|
await lsdBrowserContext.close();
|
|
3598
3638
|
}
|
|
3599
3639
|
await this.#browser.close();
|
|
3640
|
+
loginfo(`##browser LsdBrowser ${this.id()} is closed`);
|
|
3600
3641
|
return true;
|
|
3601
3642
|
}
|
|
3602
3643
|
browserContexts() {
|
|
@@ -3622,7 +3663,7 @@ var PuppeteerBrowser = class _PuppeteerBrowser extends EventEmitter6 {
|
|
|
3622
3663
|
return this.#executablePath;
|
|
3623
3664
|
}
|
|
3624
3665
|
id() {
|
|
3625
|
-
return `
|
|
3666
|
+
return `PuppeteerBrowser-${this.#browserIdx}`;
|
|
3626
3667
|
}
|
|
3627
3668
|
isConnected() {
|
|
3628
3669
|
return this.#browser.connected;
|
|
@@ -4367,7 +4408,7 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
4367
4408
|
const cookieItems = await this.#getCookies(page);
|
|
4368
4409
|
const domainSet = new Set(cookieItems.map((c) => c.domain));
|
|
4369
4410
|
if (domainSet.size !== 1) {
|
|
4370
|
-
logwarn(
|
|
4411
|
+
logwarn(`##browser LsdPage domains in clearCookies: ${Array.from(domainSet.values())}`);
|
|
4371
4412
|
}
|
|
4372
4413
|
for (const domain of domainSet.values()) {
|
|
4373
4414
|
await browserContext.clearCookies({ domain });
|
|
@@ -4573,15 +4614,15 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
4573
4614
|
}
|
|
4574
4615
|
const page = this.#page;
|
|
4575
4616
|
const pageId = this.#pageId;
|
|
4576
|
-
page.on("close"
|
|
4577
|
-
loginfo(`##browser
|
|
4617
|
+
page.on("close" /* PAGE_CLOSE */, async () => {
|
|
4618
|
+
loginfo(`##browser page ${pageId} closed @LsdPage`);
|
|
4578
4619
|
if (!page.pageInfo) {
|
|
4579
|
-
logerr(
|
|
4620
|
+
logerr(`##browser LsdPage logic error in page.on("close")`);
|
|
4580
4621
|
}
|
|
4581
|
-
this.emit("pageClose");
|
|
4582
|
-
this.#lsdBrowserContext.emit("pageClose"
|
|
4622
|
+
this.emit("pageClose" /* PAGE_CLOSE */);
|
|
4623
|
+
this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
|
|
4583
4624
|
});
|
|
4584
|
-
page.on("popup"
|
|
4625
|
+
page.on("popup" /* PAGE_POUP */, (p) => {
|
|
4585
4626
|
if (p) {
|
|
4586
4627
|
let evtData = null;
|
|
4587
4628
|
const pageInfo = p.pageInfo;
|
|
@@ -4595,12 +4636,12 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
4595
4636
|
pageInfo.relatedId = page.pageInfo.taskId;
|
|
4596
4637
|
}
|
|
4597
4638
|
} else {
|
|
4598
|
-
logerr(`##browser
|
|
4639
|
+
logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
|
|
4599
4640
|
}
|
|
4600
|
-
loginfo(`##browser
|
|
4601
|
-
this.emit("pagePopup"
|
|
4641
|
+
loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
|
|
4642
|
+
this.emit("pagePopup" /* PAGE_POPUP */, evtData);
|
|
4602
4643
|
} else {
|
|
4603
|
-
logerr(`##browser ${pageId} has popup page with null page`);
|
|
4644
|
+
logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
|
|
4604
4645
|
}
|
|
4605
4646
|
});
|
|
4606
4647
|
}
|
|
@@ -4615,13 +4656,14 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
4615
4656
|
const currentTime = getCurrentUnixTime7();
|
|
4616
4657
|
const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
|
|
4617
4658
|
this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
|
|
4618
|
-
this.#pageId = `
|
|
4659
|
+
this.#pageId = `PatchrightPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
4619
4660
|
this.#closeWhenFree = false;
|
|
4620
4661
|
this.#resquestInterceptionOptions = [];
|
|
4621
4662
|
this.#responseInterceptionOptions = [];
|
|
4622
4663
|
this.#client = null;
|
|
4623
4664
|
this.#responseCb = null;
|
|
4624
4665
|
this.#isDebugTask = false;
|
|
4666
|
+
loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
|
|
4625
4667
|
this.#addPageOn();
|
|
4626
4668
|
}
|
|
4627
4669
|
async addPreloadScript(scriptOrFunc, arg) {
|
|
@@ -4702,7 +4744,7 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
4702
4744
|
}
|
|
4703
4745
|
async close() {
|
|
4704
4746
|
if (this.#status === "closed") {
|
|
4705
|
-
logwarn(
|
|
4747
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
|
|
4706
4748
|
return true;
|
|
4707
4749
|
} else if (this.#status === "busy") {
|
|
4708
4750
|
throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
|
|
@@ -4713,6 +4755,7 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
4713
4755
|
await this.#page.close();
|
|
4714
4756
|
this.#page = null;
|
|
4715
4757
|
this.#status = "closed";
|
|
4758
|
+
loginfo(`##browser LsdPage ${this.#pageId} is closed`);
|
|
4716
4759
|
return true;
|
|
4717
4760
|
}
|
|
4718
4761
|
closeWhenFree() {
|
|
@@ -4796,10 +4839,11 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
4796
4839
|
return [];
|
|
4797
4840
|
}
|
|
4798
4841
|
async free() {
|
|
4799
|
-
if (this.#status === "free") {
|
|
4800
|
-
logwarn(
|
|
4842
|
+
if (this.#status === "free" && this.pageInfo().openType !== "popup") {
|
|
4843
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
|
|
4801
4844
|
}
|
|
4802
4845
|
this.#status = "free";
|
|
4846
|
+
logdbg(`##browser LsdPage ${this.#pageId} is freed`);
|
|
4803
4847
|
await this.clearRequestInterceptions();
|
|
4804
4848
|
await this.clearResponseInterceptions();
|
|
4805
4849
|
return true;
|
|
@@ -5081,7 +5125,7 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
5081
5125
|
}
|
|
5082
5126
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
5083
5127
|
if (actOptions.length <= 0) {
|
|
5084
|
-
logwarn("
|
|
5128
|
+
logwarn("##browser LsdPage invalid paras in setRequestInterception");
|
|
5085
5129
|
return false;
|
|
5086
5130
|
}
|
|
5087
5131
|
const firstRequestInterception = this.#resquestInterceptionOptions.length <= 0;
|
|
@@ -5104,9 +5148,9 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
5104
5148
|
const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
|
|
5105
5149
|
if (this.#isDebugTask) {
|
|
5106
5150
|
if (matchedFlag) {
|
|
5107
|
-
|
|
5151
|
+
loginfo(`##browser matched request ${request.method()} ${request.url()}`);
|
|
5108
5152
|
} else {
|
|
5109
|
-
|
|
5153
|
+
logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
|
|
5110
5154
|
}
|
|
5111
5155
|
}
|
|
5112
5156
|
if (matchedFlag) {
|
|
@@ -5162,9 +5206,9 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
5162
5206
|
}
|
|
5163
5207
|
if (this.#isDebugTask) {
|
|
5164
5208
|
if (matchedFlag) {
|
|
5165
|
-
|
|
5209
|
+
loginfo(`##browser matched response ${request.method()} ${request.url()}`);
|
|
5166
5210
|
} else {
|
|
5167
|
-
|
|
5211
|
+
logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
|
|
5168
5212
|
}
|
|
5169
5213
|
}
|
|
5170
5214
|
if (!matchedFlag) {
|
|
@@ -5202,7 +5246,7 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
5202
5246
|
}
|
|
5203
5247
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
5204
5248
|
if (actOptions.length <= 0) {
|
|
5205
|
-
logwarn("
|
|
5249
|
+
logwarn("##browser LsdPage invalid paras in setResponseInterception");
|
|
5206
5250
|
return false;
|
|
5207
5251
|
}
|
|
5208
5252
|
const firstResponseInterception = this.#responseInterceptionOptions.length <= 0;
|
|
@@ -5215,7 +5259,7 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
5215
5259
|
}
|
|
5216
5260
|
if (firstResponseInterception && this.#responseInterceptionOptions.length > 0) {
|
|
5217
5261
|
this.#responseCb = this.#responseListener.bind(this);
|
|
5218
|
-
this.#page.on("response"
|
|
5262
|
+
this.#page.on("response" /* PAGE_RESPONSE */, this.#responseCb);
|
|
5219
5263
|
}
|
|
5220
5264
|
return true;
|
|
5221
5265
|
}
|
|
@@ -5263,6 +5307,7 @@ var PatchrightPage = class extends EventEmitter8 {
|
|
|
5263
5307
|
throw new Error(`Page ${this.#pageId} is already busy!!!`);
|
|
5264
5308
|
}
|
|
5265
5309
|
this.#status = "busy";
|
|
5310
|
+
logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
|
|
5266
5311
|
return true;
|
|
5267
5312
|
}
|
|
5268
5313
|
async waitForElement(selector, options = {}) {
|
|
@@ -5401,11 +5446,10 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
|
|
|
5401
5446
|
for (const page of pages) {
|
|
5402
5447
|
const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
|
|
5403
5448
|
const lsdPage = new PatchrightPage(this, page, pageInfo);
|
|
5449
|
+
this.#lsdPages.push(lsdPage);
|
|
5404
5450
|
if (this.#maxViewportOfNewPage) {
|
|
5405
5451
|
await lsdPage.maximizeViewport();
|
|
5406
5452
|
}
|
|
5407
|
-
this.#lsdPages.push(lsdPage);
|
|
5408
|
-
loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
5409
5453
|
}
|
|
5410
5454
|
}
|
|
5411
5455
|
constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, maxViewportOfNewPage = true) {
|
|
@@ -5435,8 +5479,9 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
|
|
|
5435
5479
|
this.#lsdPages = [];
|
|
5436
5480
|
this.#nextPageIdx = 1;
|
|
5437
5481
|
this.#gettingPage = false;
|
|
5482
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
|
|
5438
5483
|
this.#initPages();
|
|
5439
|
-
browserContext.on("page"
|
|
5484
|
+
browserContext.on("page" /* BROWSERCONTEXT_PAGE */, async (page) => {
|
|
5440
5485
|
const pageInfo = page.pageInfo;
|
|
5441
5486
|
if (pageInfo) {
|
|
5442
5487
|
const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
|
|
@@ -5445,27 +5490,26 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
|
|
|
5445
5490
|
const currentTime2 = getCurrentUnixTime8();
|
|
5446
5491
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
|
|
5447
5492
|
const lsdPage = new PatchrightPage(this, page, pageInfo2);
|
|
5493
|
+
this.#lsdPages.push(lsdPage);
|
|
5448
5494
|
if (this.#maxViewportOfNewPage) {
|
|
5449
5495
|
await lsdPage.maximizeViewport();
|
|
5450
5496
|
}
|
|
5451
|
-
this.#lsdPages.push(lsdPage);
|
|
5452
|
-
loginfo(`##page ${lsdPage.id()} created`);
|
|
5453
5497
|
}
|
|
5454
5498
|
});
|
|
5455
|
-
browserContext.on("close"
|
|
5499
|
+
browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
|
|
5456
5500
|
if (browserContext !== bc) {
|
|
5457
|
-
logerr(`##browser different browserContext in browserContext.on("close")`);
|
|
5501
|
+
logerr(`##browser LsdBrowserContext different browserContext in browserContext.on("close")`);
|
|
5458
5502
|
}
|
|
5459
|
-
this.#lsdBrowser.emit("browserContextClose"
|
|
5503
|
+
this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
|
|
5460
5504
|
});
|
|
5461
|
-
this.on("pageClose"
|
|
5505
|
+
this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
|
|
5462
5506
|
if (!(lsdPage instanceof PatchrightPage)) {
|
|
5463
|
-
logerr(
|
|
5507
|
+
logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
|
|
5464
5508
|
return;
|
|
5465
5509
|
}
|
|
5466
5510
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
5467
5511
|
if (idx < 0) {
|
|
5468
|
-
logerr(
|
|
5512
|
+
logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
5469
5513
|
return;
|
|
5470
5514
|
}
|
|
5471
5515
|
this.#lsdPages.splice(idx, 1);
|
|
@@ -5482,7 +5526,7 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
|
|
|
5482
5526
|
if (this.#browserContext) {
|
|
5483
5527
|
this.#status = "closed";
|
|
5484
5528
|
this.#lastStatusUpdateTime = getCurrentUnixTime8();
|
|
5485
|
-
loginfo(
|
|
5529
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
|
|
5486
5530
|
await this.#browserContext.close();
|
|
5487
5531
|
}
|
|
5488
5532
|
return true;
|
|
@@ -5497,12 +5541,12 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
|
|
|
5497
5541
|
await sleep3(200);
|
|
5498
5542
|
}
|
|
5499
5543
|
}
|
|
5500
|
-
logwarn(
|
|
5544
|
+
logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
|
|
5501
5545
|
return false;
|
|
5502
5546
|
}
|
|
5503
5547
|
#freeGettingLock() {
|
|
5504
5548
|
if (!this.#gettingPage) {
|
|
5505
|
-
logwarn(
|
|
5549
|
+
logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
|
|
5506
5550
|
}
|
|
5507
5551
|
this.#gettingPage = false;
|
|
5508
5552
|
}
|
|
@@ -5511,7 +5555,7 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
|
|
|
5511
5555
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
5512
5556
|
}
|
|
5513
5557
|
if (maxPageFreeSeconds <= 0) {
|
|
5514
|
-
logwarn(
|
|
5558
|
+
logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
|
|
5515
5559
|
return false;
|
|
5516
5560
|
}
|
|
5517
5561
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -5608,7 +5652,7 @@ var PatchrightBrowserContext = class extends EventEmitter9 {
|
|
|
5608
5652
|
}
|
|
5609
5653
|
}
|
|
5610
5654
|
id() {
|
|
5611
|
-
return `
|
|
5655
|
+
return `PatchrightContext-${this.#browserIdx}-${this.#browserContextIdx}`;
|
|
5612
5656
|
}
|
|
5613
5657
|
isFree() {
|
|
5614
5658
|
return this.#status === "free";
|
|
@@ -5742,34 +5786,33 @@ var PatchrightBrowser = class _PatchrightBrowser extends EventEmitter10 {
|
|
|
5742
5786
|
this.#executablePath = executablePath;
|
|
5743
5787
|
this.#nextBrowserContextIdx = 1;
|
|
5744
5788
|
this.#closeFreePagesIntervalId = null;
|
|
5745
|
-
loginfo(`##browser ${this.id()} ${this.#browserCreationMethod}ed
|
|
5789
|
+
loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
|
|
5746
5790
|
const browserContexts = browser.contexts();
|
|
5747
5791
|
if (browserContexts.length > 0) {
|
|
5748
|
-
logwarn(
|
|
5792
|
+
logwarn(`##browser LsdBrowser there are ${browserContexts.length} new browserContexts when playwright launches new browser`);
|
|
5749
5793
|
}
|
|
5750
5794
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : true;
|
|
5751
5795
|
for (const browserContext of browserContexts) {
|
|
5752
5796
|
const lsdBrowserContext = new PatchrightBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
5753
5797
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
5754
|
-
loginfo(`##browserContext ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
5755
5798
|
}
|
|
5756
|
-
browser.on("disconnected"
|
|
5799
|
+
browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
|
|
5757
5800
|
loginfo(`##browser ${this.id()} disconnected`);
|
|
5758
5801
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
5759
|
-
logerr(
|
|
5802
|
+
logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
|
|
5760
5803
|
}
|
|
5761
5804
|
});
|
|
5762
|
-
this.on("browserContextClose"
|
|
5805
|
+
this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
|
|
5763
5806
|
if (!(lsdBrowserContext instanceof PatchrightBrowserContext)) {
|
|
5764
|
-
logerr(
|
|
5807
|
+
logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
|
|
5765
5808
|
return;
|
|
5766
5809
|
}
|
|
5767
5810
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
5768
5811
|
if (idx < 0) {
|
|
5769
|
-
logerr(
|
|
5812
|
+
logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
5770
5813
|
return;
|
|
5771
5814
|
}
|
|
5772
|
-
loginfo(`##
|
|
5815
|
+
loginfo(`##browser ${lsdBrowserContext.id()} closed
|
|
5773
5816
|
`);
|
|
5774
5817
|
this.#lsdBrowserContexts.splice(idx, 1);
|
|
5775
5818
|
if (this.#lsdBrowserContexts.length === 0) {
|
|
@@ -5790,7 +5833,7 @@ var PatchrightBrowser = class _PatchrightBrowser extends EventEmitter10 {
|
|
|
5790
5833
|
}
|
|
5791
5834
|
async newBrowserContext(options) {
|
|
5792
5835
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
5793
|
-
logwarn(`##browser ${this.id()} can not create more new browserContext`);
|
|
5836
|
+
logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
|
|
5794
5837
|
return null;
|
|
5795
5838
|
}
|
|
5796
5839
|
const browserContextOptions = {};
|
|
@@ -5809,7 +5852,6 @@ var PatchrightBrowser = class _PatchrightBrowser extends EventEmitter10 {
|
|
|
5809
5852
|
const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
|
|
5810
5853
|
const lsdBrowserContext = new PatchrightBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
5811
5854
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
5812
|
-
loginfo(`##browser ${lsdBrowserContext.id()} created`);
|
|
5813
5855
|
return lsdBrowserContext;
|
|
5814
5856
|
}
|
|
5815
5857
|
async close() {
|
|
@@ -5820,6 +5862,7 @@ var PatchrightBrowser = class _PatchrightBrowser extends EventEmitter10 {
|
|
|
5820
5862
|
await lsdBrowserContext.close();
|
|
5821
5863
|
}
|
|
5822
5864
|
await this.#browser.close();
|
|
5865
|
+
loginfo(`##browser LsdBrowser ${this.id()} is closed`);
|
|
5823
5866
|
return true;
|
|
5824
5867
|
}
|
|
5825
5868
|
browserContexts() {
|
|
@@ -5845,7 +5888,7 @@ var PatchrightBrowser = class _PatchrightBrowser extends EventEmitter10 {
|
|
|
5845
5888
|
return this.#executablePath;
|
|
5846
5889
|
}
|
|
5847
5890
|
id() {
|
|
5848
|
-
return `
|
|
5891
|
+
return `PatchrightBrowser-${this.#browserType}-${this.#browserIdx}`;
|
|
5849
5892
|
}
|
|
5850
5893
|
isConnected() {
|
|
5851
5894
|
return this.#browser.isConnected();
|
|
@@ -6217,7 +6260,7 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
6217
6260
|
const cookieItems = await this.#getCookies(page);
|
|
6218
6261
|
const domainSet = new Set(cookieItems.map((c) => c.domain));
|
|
6219
6262
|
if (domainSet.size !== 1) {
|
|
6220
|
-
logwarn(
|
|
6263
|
+
logwarn(`##browser LsdPage domains in clearCookies: ${Array.from(domainSet.values())}`);
|
|
6221
6264
|
}
|
|
6222
6265
|
for (const domain of domainSet.values()) {
|
|
6223
6266
|
await browserContext.clearCookies({ domain });
|
|
@@ -6423,15 +6466,15 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
6423
6466
|
}
|
|
6424
6467
|
const page = this.#page;
|
|
6425
6468
|
const pageId = this.#pageId;
|
|
6426
|
-
page.on("close"
|
|
6427
|
-
loginfo(`##browser
|
|
6469
|
+
page.on("close" /* PAGE_CLOSE */, async () => {
|
|
6470
|
+
loginfo(`##browser page ${pageId} closed @LsdPage`);
|
|
6428
6471
|
if (!page.pageInfo) {
|
|
6429
|
-
logerr(
|
|
6472
|
+
logerr(`##browser LsdPage logic error in page.on("close")`);
|
|
6430
6473
|
}
|
|
6431
|
-
this.emit("pageClose");
|
|
6432
|
-
this.#lsdBrowserContext.emit("pageClose"
|
|
6474
|
+
this.emit("pageClose" /* PAGE_CLOSE */);
|
|
6475
|
+
this.#lsdBrowserContext.emit("pageClose" /* PAGE_CLOSE */, this);
|
|
6433
6476
|
});
|
|
6434
|
-
page.on("popup"
|
|
6477
|
+
page.on("popup" /* PAGE_POUP */, (p) => {
|
|
6435
6478
|
if (p) {
|
|
6436
6479
|
let evtData = null;
|
|
6437
6480
|
const pageInfo = p.pageInfo;
|
|
@@ -6445,12 +6488,12 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
6445
6488
|
pageInfo.relatedId = page.pageInfo.taskId;
|
|
6446
6489
|
}
|
|
6447
6490
|
} else {
|
|
6448
|
-
logerr(`##browser
|
|
6491
|
+
logerr(`##browser page ${pageId} has popup without page.pageInfo @LsdPage`);
|
|
6449
6492
|
}
|
|
6450
|
-
loginfo(`##browser
|
|
6451
|
-
this.emit("pagePopup"
|
|
6493
|
+
loginfo(`##browser page ${pageId} has popup ${popupPageId} @LsdPage`);
|
|
6494
|
+
this.emit("pagePopup" /* PAGE_POPUP */, evtData);
|
|
6452
6495
|
} else {
|
|
6453
|
-
logerr(`##browser ${pageId} has popup page with null page`);
|
|
6496
|
+
logerr(`##browser page ${pageId} has popup page with null page @LsdPage`);
|
|
6454
6497
|
}
|
|
6455
6498
|
});
|
|
6456
6499
|
}
|
|
@@ -6465,13 +6508,14 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
6465
6508
|
const currentTime = getCurrentUnixTime10();
|
|
6466
6509
|
const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0, relatedId = 0, misc = {} } = pageInfo ? pageInfo : {};
|
|
6467
6510
|
this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId, relatedId, misc };
|
|
6468
|
-
this.#pageId = `
|
|
6511
|
+
this.#pageId = `CamoufoxPage-${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
6469
6512
|
this.#closeWhenFree = false;
|
|
6470
6513
|
this.#resquestInterceptionOptions = [];
|
|
6471
6514
|
this.#responseInterceptionOptions = [];
|
|
6472
6515
|
this.#client = null;
|
|
6473
6516
|
this.#responseCb = null;
|
|
6474
6517
|
this.#isDebugTask = false;
|
|
6518
|
+
loginfo(`##browser LsdPage ${this.#pageId} ${openType}ed`);
|
|
6475
6519
|
this.#addPageOn();
|
|
6476
6520
|
}
|
|
6477
6521
|
async addPreloadScript() {
|
|
@@ -6539,7 +6583,7 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
6539
6583
|
}
|
|
6540
6584
|
async close() {
|
|
6541
6585
|
if (this.#status === "closed") {
|
|
6542
|
-
logwarn(
|
|
6586
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already closed.`);
|
|
6543
6587
|
return true;
|
|
6544
6588
|
} else if (this.#status === "busy") {
|
|
6545
6589
|
throw new Error(`Page ${this.#pageId} cannot be closed because it is busy.`);
|
|
@@ -6550,6 +6594,7 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
6550
6594
|
await this.#page.close();
|
|
6551
6595
|
this.#page = null;
|
|
6552
6596
|
this.#status = "closed";
|
|
6597
|
+
loginfo(`##browser LsdPage ${this.#pageId} is closed`);
|
|
6553
6598
|
return true;
|
|
6554
6599
|
}
|
|
6555
6600
|
closeWhenFree() {
|
|
@@ -6634,10 +6679,11 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
6634
6679
|
return [];
|
|
6635
6680
|
}
|
|
6636
6681
|
async free() {
|
|
6637
|
-
if (this.#status === "free") {
|
|
6638
|
-
logwarn(
|
|
6682
|
+
if (this.#status === "free" && this.pageInfo().openType !== "popup") {
|
|
6683
|
+
logwarn(`##browser LsdPage ${this.#pageId} is already free.`);
|
|
6639
6684
|
}
|
|
6640
6685
|
this.#status = "free";
|
|
6686
|
+
logdbg(`##browser LsdPage ${this.#pageId} is freed`);
|
|
6641
6687
|
await this.clearRequestInterceptions();
|
|
6642
6688
|
await this.clearResponseInterceptions();
|
|
6643
6689
|
return true;
|
|
@@ -6919,7 +6965,7 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
6919
6965
|
}
|
|
6920
6966
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
6921
6967
|
if (actOptions.length <= 0) {
|
|
6922
|
-
logwarn("
|
|
6968
|
+
logwarn("##browser LsdPage invalid paras in setRequestInterception");
|
|
6923
6969
|
return false;
|
|
6924
6970
|
}
|
|
6925
6971
|
const firstRequestInterception = this.#resquestInterceptionOptions.length <= 0;
|
|
@@ -6942,9 +6988,9 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
6942
6988
|
const matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
|
|
6943
6989
|
if (this.#isDebugTask) {
|
|
6944
6990
|
if (matchedFlag) {
|
|
6945
|
-
|
|
6991
|
+
loginfo(`##browser matched request ${request.method()} ${request.url()}`);
|
|
6946
6992
|
} else {
|
|
6947
|
-
|
|
6993
|
+
logdbg(`##browser unmatched request ${request.method()} ${request.url()}`);
|
|
6948
6994
|
}
|
|
6949
6995
|
}
|
|
6950
6996
|
if (matchedFlag) {
|
|
@@ -7000,9 +7046,9 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
7000
7046
|
}
|
|
7001
7047
|
if (this.#isDebugTask) {
|
|
7002
7048
|
if (matchedFlag) {
|
|
7003
|
-
|
|
7049
|
+
loginfo(`##browser matched response ${request.method()} ${request.url()}`);
|
|
7004
7050
|
} else {
|
|
7005
|
-
|
|
7051
|
+
logdbg(`##browser unmatched response ${request.method()} ${request.url()}`);
|
|
7006
7052
|
}
|
|
7007
7053
|
}
|
|
7008
7054
|
if (!matchedFlag) {
|
|
@@ -7040,7 +7086,7 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
7040
7086
|
}
|
|
7041
7087
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
7042
7088
|
if (actOptions.length <= 0) {
|
|
7043
|
-
logwarn("
|
|
7089
|
+
logwarn("##browser LsdPage invalid paras in setResponseInterception");
|
|
7044
7090
|
return false;
|
|
7045
7091
|
}
|
|
7046
7092
|
const firstResponseInterception = this.#responseInterceptionOptions.length <= 0;
|
|
@@ -7053,7 +7099,7 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
7053
7099
|
}
|
|
7054
7100
|
if (firstResponseInterception && this.#responseInterceptionOptions.length > 0) {
|
|
7055
7101
|
this.#responseCb = this.#responseListener.bind(this);
|
|
7056
|
-
this.#page.on("response"
|
|
7102
|
+
this.#page.on("response" /* PAGE_RESPONSE */, this.#responseCb);
|
|
7057
7103
|
}
|
|
7058
7104
|
return true;
|
|
7059
7105
|
}
|
|
@@ -7101,6 +7147,7 @@ var CamoufoxPage = class extends EventEmitter11 {
|
|
|
7101
7147
|
throw new Error(`Page ${this.#pageId} is already busy!!!`);
|
|
7102
7148
|
}
|
|
7103
7149
|
this.#status = "busy";
|
|
7150
|
+
logdbg(`##browser LsdPage ${this.#pageId} is allocated`);
|
|
7104
7151
|
return true;
|
|
7105
7152
|
}
|
|
7106
7153
|
async waitForElement(selector, options = {}) {
|
|
@@ -7239,11 +7286,10 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
|
|
|
7239
7286
|
for (const page of pages) {
|
|
7240
7287
|
const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0, relatedId: 0, misc: {} };
|
|
7241
7288
|
const lsdPage = new CamoufoxPage(this, page, pageInfo);
|
|
7289
|
+
this.#lsdPages.push(lsdPage);
|
|
7242
7290
|
if (this.#maxViewportOfNewPage) {
|
|
7243
7291
|
await lsdPage.maximizeViewport();
|
|
7244
7292
|
}
|
|
7245
|
-
this.#lsdPages.push(lsdPage);
|
|
7246
|
-
loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
7247
7293
|
}
|
|
7248
7294
|
}
|
|
7249
7295
|
constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, maxViewportOfNewPage = true) {
|
|
@@ -7273,8 +7319,9 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
|
|
|
7273
7319
|
this.#lsdPages = [];
|
|
7274
7320
|
this.#nextPageIdx = 1;
|
|
7275
7321
|
this.#gettingPage = false;
|
|
7322
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} is created`);
|
|
7276
7323
|
this.#initPages();
|
|
7277
|
-
browserContext.on("page"
|
|
7324
|
+
browserContext.on("page" /* BROWSERCONTEXT_PAGE */, async (page) => {
|
|
7278
7325
|
const pageInfo = page.pageInfo;
|
|
7279
7326
|
if (pageInfo) {
|
|
7280
7327
|
const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
|
|
@@ -7283,27 +7330,26 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
|
|
|
7283
7330
|
const currentTime2 = getCurrentUnixTime11();
|
|
7284
7331
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
|
|
7285
7332
|
const lsdPage = new CamoufoxPage(this, page, pageInfo2);
|
|
7333
|
+
this.#lsdPages.push(lsdPage);
|
|
7286
7334
|
if (this.#maxViewportOfNewPage) {
|
|
7287
7335
|
await lsdPage.maximizeViewport();
|
|
7288
7336
|
}
|
|
7289
|
-
this.#lsdPages.push(lsdPage);
|
|
7290
|
-
loginfo(`##page ${lsdPage.id()} created`);
|
|
7291
7337
|
}
|
|
7292
7338
|
});
|
|
7293
|
-
browserContext.on("close"
|
|
7339
|
+
browserContext.on("close" /* BROWSERCONTEXT_CLOSE */, (bc) => {
|
|
7294
7340
|
if (browserContext !== bc) {
|
|
7295
|
-
logerr(`##browser different browserContext in browserContext.on("close")`);
|
|
7341
|
+
logerr(`##browser LsdBrowserContext different browserContext in browserContext.on("close")`);
|
|
7296
7342
|
}
|
|
7297
|
-
this.#lsdBrowser.emit("browserContextClose"
|
|
7343
|
+
this.#lsdBrowser.emit("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, this);
|
|
7298
7344
|
});
|
|
7299
|
-
this.on("pageClose"
|
|
7345
|
+
this.on("pageClose" /* PAGE_CLOSE */, (lsdPage) => {
|
|
7300
7346
|
if (!(lsdPage instanceof CamoufoxPage)) {
|
|
7301
|
-
logerr(
|
|
7347
|
+
logerr(`##browser LsdBrowserContext invalid data in LsdBrowserContext.on("pageClose)`);
|
|
7302
7348
|
return;
|
|
7303
7349
|
}
|
|
7304
7350
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
7305
7351
|
if (idx < 0) {
|
|
7306
|
-
logerr(
|
|
7352
|
+
logerr(`##browser LsdBrowserContext invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
7307
7353
|
return;
|
|
7308
7354
|
}
|
|
7309
7355
|
this.#lsdPages.splice(idx, 1);
|
|
@@ -7320,7 +7366,7 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
|
|
|
7320
7366
|
if (this.#browserContext) {
|
|
7321
7367
|
this.#status = "closed";
|
|
7322
7368
|
this.#lastStatusUpdateTime = getCurrentUnixTime11();
|
|
7323
|
-
loginfo(
|
|
7369
|
+
loginfo(`##browser LsdBrowserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
|
|
7324
7370
|
await this.#browserContext.close();
|
|
7325
7371
|
}
|
|
7326
7372
|
return true;
|
|
@@ -7335,12 +7381,12 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
|
|
|
7335
7381
|
await sleep4(200);
|
|
7336
7382
|
}
|
|
7337
7383
|
}
|
|
7338
|
-
logwarn(
|
|
7384
|
+
logwarn(`##browser LsdBrowserContext cannot get the gettingLock.`);
|
|
7339
7385
|
return false;
|
|
7340
7386
|
}
|
|
7341
7387
|
#freeGettingLock() {
|
|
7342
7388
|
if (!this.#gettingPage) {
|
|
7343
|
-
logwarn(
|
|
7389
|
+
logwarn(`##browser LsdBrowserContext gettingLock is already free now.`);
|
|
7344
7390
|
}
|
|
7345
7391
|
this.#gettingPage = false;
|
|
7346
7392
|
}
|
|
@@ -7349,7 +7395,7 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
|
|
|
7349
7395
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
7350
7396
|
}
|
|
7351
7397
|
if (maxPageFreeSeconds <= 0) {
|
|
7352
|
-
logwarn(
|
|
7398
|
+
logwarn(`##browser LsdBrowserContext please set valid maxPageFreeSeconds to close free pages`);
|
|
7353
7399
|
return false;
|
|
7354
7400
|
}
|
|
7355
7401
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -7446,7 +7492,7 @@ var CamoufoxBrowserContext = class extends EventEmitter12 {
|
|
|
7446
7492
|
}
|
|
7447
7493
|
}
|
|
7448
7494
|
id() {
|
|
7449
|
-
return `
|
|
7495
|
+
return `CamoufoxContext-${this.#browserIdx}-${this.#browserContextIdx}`;
|
|
7450
7496
|
}
|
|
7451
7497
|
isFree() {
|
|
7452
7498
|
return this.#status === "free";
|
|
@@ -7580,34 +7626,33 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends EventEmitter13 {
|
|
|
7580
7626
|
this.#executablePath = executablePath;
|
|
7581
7627
|
this.#nextBrowserContextIdx = 1;
|
|
7582
7628
|
this.#closeFreePagesIntervalId = null;
|
|
7583
|
-
loginfo(`##browser ${this.id()} ${this.#browserCreationMethod}ed
|
|
7629
|
+
loginfo(`##browser LsdBrowser ${this.id()} ${this.#browserCreationMethod}ed}`);
|
|
7584
7630
|
const browserContexts = browser.contexts();
|
|
7585
7631
|
if (browserContexts.length > 0) {
|
|
7586
|
-
logwarn(
|
|
7632
|
+
logwarn(`##browser LsdBrowser there are ${browserContexts.length} new browserContexts when camoufox launches new browser`);
|
|
7587
7633
|
}
|
|
7588
7634
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : true;
|
|
7589
7635
|
for (const browserContext of browserContexts) {
|
|
7590
7636
|
const lsdBrowserContext = new CamoufoxBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
7591
7637
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
7592
|
-
loginfo(`##browserContext ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
7593
7638
|
}
|
|
7594
|
-
browser.on("disconnected"
|
|
7639
|
+
browser.on("disconnected" /* BROWSER_DISCONNECTED */, () => {
|
|
7595
7640
|
loginfo(`##browser ${this.id()} disconnected`);
|
|
7596
7641
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
7597
|
-
logerr(
|
|
7642
|
+
logerr(`##browser LsdBrowser ${this.id()} has browserContexts when disconnected`);
|
|
7598
7643
|
}
|
|
7599
7644
|
});
|
|
7600
|
-
this.on("browserContextClose"
|
|
7645
|
+
this.on("browserContextClose" /* BROWSER_CONTEXT_CLOSE */, (lsdBrowserContext) => {
|
|
7601
7646
|
if (!(lsdBrowserContext instanceof CamoufoxBrowserContext)) {
|
|
7602
|
-
logerr(
|
|
7647
|
+
logerr(`##browser LsdBrowser invalid data in LsdBrowser.on("browserContextClose)`);
|
|
7603
7648
|
return;
|
|
7604
7649
|
}
|
|
7605
7650
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
7606
7651
|
if (idx < 0) {
|
|
7607
|
-
logerr(
|
|
7652
|
+
logerr(`##browser LsdBrowser invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
7608
7653
|
return;
|
|
7609
7654
|
}
|
|
7610
|
-
loginfo(`##
|
|
7655
|
+
loginfo(`##browser ${lsdBrowserContext.id()} closed
|
|
7611
7656
|
`);
|
|
7612
7657
|
this.#lsdBrowserContexts.splice(idx, 1);
|
|
7613
7658
|
if (this.#lsdBrowserContexts.length === 0) {
|
|
@@ -7628,7 +7673,7 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends EventEmitter13 {
|
|
|
7628
7673
|
}
|
|
7629
7674
|
async newBrowserContext(options) {
|
|
7630
7675
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
7631
|
-
logwarn(`##browser ${this.id()} can not create more new browserContext`);
|
|
7676
|
+
logwarn(`##browser LsdBrowser ${this.id()} can not create more new browserContext`);
|
|
7632
7677
|
return null;
|
|
7633
7678
|
}
|
|
7634
7679
|
const browserContextOptions = {};
|
|
@@ -7647,7 +7692,6 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends EventEmitter13 {
|
|
|
7647
7692
|
const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
|
|
7648
7693
|
const lsdBrowserContext = new CamoufoxBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
7649
7694
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
7650
|
-
loginfo(`##browser ${lsdBrowserContext.id()} created`);
|
|
7651
7695
|
return lsdBrowserContext;
|
|
7652
7696
|
}
|
|
7653
7697
|
async close() {
|
|
@@ -7658,6 +7702,7 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends EventEmitter13 {
|
|
|
7658
7702
|
await lsdBrowserContext.close();
|
|
7659
7703
|
}
|
|
7660
7704
|
await this.#browser.close();
|
|
7705
|
+
loginfo(`##browser LsdBrowser ${this.id()} is closed`);
|
|
7661
7706
|
return true;
|
|
7662
7707
|
}
|
|
7663
7708
|
browserContexts() {
|
|
@@ -7683,7 +7728,7 @@ var CamoufoxBrowser = class _CamoufoxBrowser extends EventEmitter13 {
|
|
|
7683
7728
|
return this.#executablePath;
|
|
7684
7729
|
}
|
|
7685
7730
|
id() {
|
|
7686
|
-
return `
|
|
7731
|
+
return `CamoufoxBrowser-${this.#browserType}-${this.#browserIdx}`;
|
|
7687
7732
|
}
|
|
7688
7733
|
isConnected() {
|
|
7689
7734
|
return this.#browser.isConnected();
|
|
@@ -7845,22 +7890,22 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
7845
7890
|
const actOptions = { closeFreePagesIntervalSeconds, maxBrowserContextsPerBrowser, maxPagesPerBrowserContext, maxPageFreeSeconds, maxViewportOfNewPage, proxy, timeout, args, executablePath, maxWindowSize, headless, minBrowserContexts, incognito, proxyPerBrowserContext, userDataDir, userAgent };
|
|
7846
7891
|
let idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--incoginto"));
|
|
7847
7892
|
if (idx >= 0) {
|
|
7848
|
-
logwarn(
|
|
7893
|
+
logwarn(`##browser controller Please use options.incognito instead when launching new browser.`);
|
|
7849
7894
|
args.splice(idx, 1);
|
|
7850
7895
|
}
|
|
7851
7896
|
idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--proxy-server"));
|
|
7852
7897
|
if (idx >= 0) {
|
|
7853
|
-
logwarn(
|
|
7898
|
+
logwarn(`##browser controller Please use options.proxy instead when launching new browser.`);
|
|
7854
7899
|
args.splice(idx, 1);
|
|
7855
7900
|
}
|
|
7856
7901
|
idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--user-data-dir"));
|
|
7857
7902
|
if (idx >= 0) {
|
|
7858
|
-
logwarn(
|
|
7903
|
+
logwarn(`##browser controller Please use options.userDataDir instead when launching new browser.`);
|
|
7859
7904
|
args.splice(idx, 1);
|
|
7860
7905
|
}
|
|
7861
7906
|
idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--start-maximized"));
|
|
7862
7907
|
if (idx >= 0) {
|
|
7863
|
-
logwarn(
|
|
7908
|
+
logwarn(`##browser controller Please use options.maxWindowSize instead when launching new browser.`);
|
|
7864
7909
|
args.splice(idx, 1);
|
|
7865
7910
|
}
|
|
7866
7911
|
let lsdBrowser;
|
|
@@ -8058,7 +8103,7 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
8058
8103
|
const pids = await getPidsListeningOnPort(port);
|
|
8059
8104
|
let browserPid = 0;
|
|
8060
8105
|
if (pids.length !== 1) {
|
|
8061
|
-
logerr(`##browser pids.length ${pids.length} is not 1 when trying to connect to browserUrl ${browserUrl}`);
|
|
8106
|
+
logerr(`##browser controller pids.length ${pids.length} is not 1 when trying to connect to browserUrl ${browserUrl}`);
|
|
8062
8107
|
} else {
|
|
8063
8108
|
browserPid = pids[0];
|
|
8064
8109
|
}
|
|
@@ -8102,6 +8147,10 @@ var controller = new LsdBrowserController();
|
|
|
8102
8147
|
export {
|
|
8103
8148
|
CheerioElement,
|
|
8104
8149
|
CheerioPage,
|
|
8150
|
+
ControllerEvent,
|
|
8151
|
+
LsdBrowserContextEvent,
|
|
8152
|
+
LsdBrowserEvent,
|
|
8153
|
+
LsdPageEvent,
|
|
8105
8154
|
PlaywrightBrowser,
|
|
8106
8155
|
PlaywrightBrowserContext,
|
|
8107
8156
|
PlaywrightElement,
|