@letsscrapedata/controller 0.0.1 → 0.0.3
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.mjs → index.cjs} +293 -184
- package/dist/{index.d.mts → index.d.cts} +67 -19
- package/dist/index.d.ts +67 -19
- package/dist/index.js +273 -204
- package/package.json +3 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -27,12 +28,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
27
28
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
29
|
mod
|
|
29
30
|
));
|
|
31
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
32
|
|
|
31
33
|
// ../../node_modules/boolbase/index.js
|
|
32
34
|
var require_boolbase = __commonJS({
|
|
33
|
-
"../../node_modules/boolbase/index.js"(
|
|
35
|
+
"../../node_modules/boolbase/index.js"(exports2, module2) {
|
|
34
36
|
"use strict";
|
|
35
|
-
|
|
37
|
+
module2.exports = {
|
|
36
38
|
trueFunc: function trueFunc2() {
|
|
37
39
|
return true;
|
|
38
40
|
},
|
|
@@ -43,6 +45,23 @@ var require_boolbase = __commonJS({
|
|
|
43
45
|
}
|
|
44
46
|
});
|
|
45
47
|
|
|
48
|
+
// src/index.ts
|
|
49
|
+
var src_exports = {};
|
|
50
|
+
__export(src_exports, {
|
|
51
|
+
CheerioElement: () => CheerioElement,
|
|
52
|
+
CheerioPage: () => CheerioPage,
|
|
53
|
+
PlaywrightBrowser: () => PlaywrightBrowser,
|
|
54
|
+
PlaywrightBrowserContext: () => PlaywrightBrowserContext,
|
|
55
|
+
PlaywrightElement: () => PlaywrightElement,
|
|
56
|
+
PlaywrightPage: () => PlaywrightPage,
|
|
57
|
+
PuppeteerBrowser: () => PuppeteerBrowser,
|
|
58
|
+
PuppeteerBrowserContext: () => PuppeteerBrowserContext,
|
|
59
|
+
PuppeteerElement: () => PuppeteerElement,
|
|
60
|
+
PuppeteerPage: () => PuppeteerPage,
|
|
61
|
+
defaultProxy: () => defaultProxy
|
|
62
|
+
});
|
|
63
|
+
module.exports = __toCommonJS(src_exports);
|
|
64
|
+
|
|
46
65
|
// src/types/types.ts
|
|
47
66
|
var defaultProxy = {
|
|
48
67
|
server: "default",
|
|
@@ -54,18 +73,18 @@ var defaultProxy = {
|
|
|
54
73
|
};
|
|
55
74
|
|
|
56
75
|
// src/playwright/browser.ts
|
|
57
|
-
|
|
76
|
+
var import_node_events3 = __toESM(require("events"), 1);
|
|
58
77
|
|
|
59
78
|
// src/playwright/context.ts
|
|
60
|
-
|
|
61
|
-
|
|
79
|
+
var import_node_events2 = __toESM(require("events"), 1);
|
|
80
|
+
var import_utils3 = require("@letsscrapedata/utils");
|
|
62
81
|
|
|
63
82
|
// src/playwright/page.ts
|
|
64
|
-
|
|
65
|
-
|
|
83
|
+
var import_node_events = __toESM(require("events"), 1);
|
|
84
|
+
var import_utils2 = require("@letsscrapedata/utils");
|
|
66
85
|
|
|
67
86
|
// src/playwright/element.ts
|
|
68
|
-
|
|
87
|
+
var import_utils = require("@letsscrapedata/utils");
|
|
69
88
|
var PlaywrightElement = class _PlaywrightElement {
|
|
70
89
|
#frame;
|
|
71
90
|
#locator;
|
|
@@ -281,39 +300,21 @@ var PlaywrightElement = class _PlaywrightElement {
|
|
|
281
300
|
}
|
|
282
301
|
break;
|
|
283
302
|
default:
|
|
284
|
-
unreachable(type);
|
|
303
|
+
(0, import_utils.unreachable)(type);
|
|
285
304
|
}
|
|
286
305
|
return true;
|
|
287
306
|
}
|
|
288
307
|
async screenshot(options) {
|
|
289
308
|
return await this.#locator.screenshot(options);
|
|
290
309
|
}
|
|
291
|
-
async scrollBy(x, y) {
|
|
292
|
-
await this.#locator.page().evaluate(
|
|
293
|
-
([x2, y2]) => {
|
|
294
|
-
window.scrollBy(x2, y2);
|
|
295
|
-
},
|
|
296
|
-
[x, y]
|
|
297
|
-
);
|
|
298
|
-
return true;
|
|
299
|
-
}
|
|
300
310
|
async scrollIntoView() {
|
|
301
311
|
await this.#locator.scrollIntoViewIfNeeded();
|
|
302
312
|
return true;
|
|
303
313
|
}
|
|
304
|
-
async scrollTo(x, y) {
|
|
305
|
-
await this.#locator.page().evaluate(
|
|
306
|
-
([x2, y2]) => {
|
|
307
|
-
window.scrollTo(x2, y2);
|
|
308
|
-
},
|
|
309
|
-
[x, y]
|
|
310
|
-
);
|
|
311
|
-
return true;
|
|
312
|
-
}
|
|
313
314
|
};
|
|
314
315
|
|
|
315
316
|
// src/playwright/page.ts
|
|
316
|
-
var PlaywrightPage = class extends
|
|
317
|
+
var PlaywrightPage = class extends import_node_events.default {
|
|
317
318
|
#lsdBrowserContext;
|
|
318
319
|
#page;
|
|
319
320
|
#status;
|
|
@@ -335,7 +336,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
335
336
|
const cookieItems = await this.#getCookies(page);
|
|
336
337
|
const domainSet = new Set(cookieItems.map((c) => c.domain));
|
|
337
338
|
if (domainSet.size !== 1) {
|
|
338
|
-
logwarn(`Domains in clearCookies: ${Array.from(domainSet.values())}`);
|
|
339
|
+
(0, import_utils2.logwarn)(`Domains in clearCookies: ${Array.from(domainSet.values())}`);
|
|
339
340
|
}
|
|
340
341
|
for (const domain of domainSet.values()) {
|
|
341
342
|
await browserContext.clearCookies({ domain });
|
|
@@ -487,9 +488,9 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
487
488
|
const page = this.#page;
|
|
488
489
|
const pageId = this.#pageId;
|
|
489
490
|
page.on("close", async () => {
|
|
490
|
-
loginfo(`##browser ${pageId} closed`);
|
|
491
|
+
(0, import_utils2.loginfo)(`##browser ${pageId} closed`);
|
|
491
492
|
if (!page.pageInfo) {
|
|
492
|
-
logerr(`Logic error in page.on("close")`);
|
|
493
|
+
(0, import_utils2.logerr)(`Logic error in page.on("close")`);
|
|
493
494
|
}
|
|
494
495
|
this.emit("pageClose");
|
|
495
496
|
this.#lsdBrowserContext.emit("pageClose", this);
|
|
@@ -503,12 +504,12 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
503
504
|
popupPageId = `page-${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
504
505
|
pageInfo.openType = "popup";
|
|
505
506
|
} else {
|
|
506
|
-
logerr(`##browser ${pageId} has popup without page.pageInfo`);
|
|
507
|
+
(0, import_utils2.logerr)(`##browser ${pageId} has popup without page.pageInfo`);
|
|
507
508
|
}
|
|
508
|
-
loginfo(`##browser ${pageId} has popup ${popupPageId}`);
|
|
509
|
+
(0, import_utils2.loginfo)(`##browser ${pageId} has popup ${popupPageId}`);
|
|
509
510
|
this.emit("pagePopup", pageInfo);
|
|
510
511
|
} else {
|
|
511
|
-
logerr(`##browser ${pageId} has popup page with null page`);
|
|
512
|
+
(0, import_utils2.logerr)(`##browser ${pageId} has popup page with null page`);
|
|
512
513
|
}
|
|
513
514
|
});
|
|
514
515
|
}
|
|
@@ -520,7 +521,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
520
521
|
this.#lsdBrowserContext = browserContext;
|
|
521
522
|
this.#page = page;
|
|
522
523
|
this.#status = "free";
|
|
523
|
-
const currentTime = getCurrentUnixTime();
|
|
524
|
+
const currentTime = (0, import_utils2.getCurrentUnixTime)();
|
|
524
525
|
const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0 } = pageInfo ? pageInfo : {};
|
|
525
526
|
this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId };
|
|
526
527
|
this.#pageId = `page${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
@@ -568,7 +569,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
568
569
|
}
|
|
569
570
|
return true;
|
|
570
571
|
} catch (err) {
|
|
571
|
-
logerr(err);
|
|
572
|
+
(0, import_utils2.logerr)(err);
|
|
572
573
|
return false;
|
|
573
574
|
}
|
|
574
575
|
}
|
|
@@ -666,12 +667,19 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
666
667
|
await this.clearResponseInterceptions();
|
|
667
668
|
return true;
|
|
668
669
|
}
|
|
670
|
+
#getWaitUntil(origWaitUntil) {
|
|
671
|
+
if (origWaitUntil === "networkidle0" || origWaitUntil === "networkidle2") {
|
|
672
|
+
return "networkidle";
|
|
673
|
+
} else {
|
|
674
|
+
return origWaitUntil;
|
|
675
|
+
}
|
|
676
|
+
}
|
|
669
677
|
async goto(url, options) {
|
|
670
678
|
if (!this.#page) {
|
|
671
679
|
throw new Error("No valid page");
|
|
672
680
|
}
|
|
673
681
|
if (options) {
|
|
674
|
-
const { referer, timeout, waitUntil } = options;
|
|
682
|
+
const { referer, timeout, waitUntil = "load" } = options;
|
|
675
683
|
const newOptions = {};
|
|
676
684
|
if (referer) {
|
|
677
685
|
newOptions.referer = referer;
|
|
@@ -679,9 +687,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
679
687
|
if (timeout) {
|
|
680
688
|
newOptions.timeout = timeout;
|
|
681
689
|
}
|
|
682
|
-
|
|
683
|
-
newOptions.waitUntil = waitUntil === "networkidle" ? "networkidle0" : waitUntil;
|
|
684
|
-
}
|
|
690
|
+
newOptions.waitUntil = this.#getWaitUntil(waitUntil);
|
|
685
691
|
await this.#page.goto(url, newOptions);
|
|
686
692
|
} else {
|
|
687
693
|
await this.#page.goto(url);
|
|
@@ -752,6 +758,30 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
752
758
|
}
|
|
753
759
|
return await this.#page.screenshot(options);
|
|
754
760
|
}
|
|
761
|
+
async scrollBy(x, y) {
|
|
762
|
+
if (!this.#page) {
|
|
763
|
+
throw new Error("No valid page");
|
|
764
|
+
}
|
|
765
|
+
await this.#page.evaluate(
|
|
766
|
+
([x2, y2]) => {
|
|
767
|
+
window.scrollBy(x2, y2);
|
|
768
|
+
},
|
|
769
|
+
[x, y]
|
|
770
|
+
);
|
|
771
|
+
return true;
|
|
772
|
+
}
|
|
773
|
+
async scrollTo(x, y) {
|
|
774
|
+
if (!this.#page) {
|
|
775
|
+
throw new Error("No valid page");
|
|
776
|
+
}
|
|
777
|
+
await this.#page.evaluate(
|
|
778
|
+
([x2, y2]) => {
|
|
779
|
+
window.scrollTo(x2, y2);
|
|
780
|
+
},
|
|
781
|
+
[x, y]
|
|
782
|
+
);
|
|
783
|
+
return true;
|
|
784
|
+
}
|
|
755
785
|
async setCookies(cookies) {
|
|
756
786
|
if (!this.#page) {
|
|
757
787
|
throw new Error("No valid page");
|
|
@@ -812,7 +842,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
812
842
|
}
|
|
813
843
|
return true;
|
|
814
844
|
} catch (err) {
|
|
815
|
-
logerr(err);
|
|
845
|
+
(0, import_utils2.logerr)(err);
|
|
816
846
|
return false;
|
|
817
847
|
}
|
|
818
848
|
}
|
|
@@ -822,7 +852,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
822
852
|
}
|
|
823
853
|
const actOptions = Array.isArray(options) ? options : [options];
|
|
824
854
|
if (actOptions.length <= 0) {
|
|
825
|
-
logwarn("Invalid paras in setRequestInterception");
|
|
855
|
+
(0, import_utils2.logwarn)("Invalid paras in setRequestInterception");
|
|
826
856
|
return false;
|
|
827
857
|
}
|
|
828
858
|
const firstRequestInterception = this.#resquestInterceptionOptions.length <= 0;
|
|
@@ -833,7 +863,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
833
863
|
this.#resquestInterceptionOptions.push(option);
|
|
834
864
|
break;
|
|
835
865
|
default:
|
|
836
|
-
|
|
866
|
+
(0, import_utils2.unreachable)(option.action);
|
|
837
867
|
}
|
|
838
868
|
}
|
|
839
869
|
if (firstRequestInterception && this.#resquestInterceptionOptions.length > 0) {
|
|
@@ -857,7 +887,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
857
887
|
});
|
|
858
888
|
break;
|
|
859
889
|
default:
|
|
860
|
-
|
|
890
|
+
(0, import_utils2.unreachable)(action);
|
|
861
891
|
}
|
|
862
892
|
return true;
|
|
863
893
|
} else {
|
|
@@ -866,7 +896,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
866
896
|
await route.continue();
|
|
867
897
|
return true;
|
|
868
898
|
} catch (err) {
|
|
869
|
-
logerr(err);
|
|
899
|
+
(0, import_utils2.logerr)(err);
|
|
870
900
|
return false;
|
|
871
901
|
}
|
|
872
902
|
});
|
|
@@ -884,7 +914,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
884
914
|
return;
|
|
885
915
|
}
|
|
886
916
|
for (const option of this.#responseInterceptionOptions) {
|
|
887
|
-
const { requestMatch, responseMatch,
|
|
917
|
+
const { requestMatch, responseMatch, responseItems, handler, handlerOptions } = option;
|
|
888
918
|
let matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
|
|
889
919
|
if (matchedFlag && responseMatch) {
|
|
890
920
|
const { minLength, maxLength } = responseMatch;
|
|
@@ -897,20 +927,20 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
897
927
|
if (!matchedFlag) {
|
|
898
928
|
continue;
|
|
899
929
|
}
|
|
900
|
-
if (Array.isArray(
|
|
930
|
+
if (Array.isArray(responseItems)) {
|
|
901
931
|
const requestMethod = request.method();
|
|
902
932
|
const requestUrl = request.url();
|
|
903
933
|
const reqData2 = request.postData();
|
|
904
934
|
const requestData = reqData2 ? reqData2 : "";
|
|
905
935
|
const responseData = await response.text();
|
|
906
|
-
|
|
936
|
+
responseItems.push({
|
|
907
937
|
pageUrl,
|
|
908
938
|
requestMethod,
|
|
909
939
|
requestUrl,
|
|
910
940
|
requestData,
|
|
911
941
|
responseData
|
|
912
942
|
});
|
|
913
|
-
loginfo(`##browser cache matched response: ${requestUrl}`);
|
|
943
|
+
(0, import_utils2.loginfo)(`##browser cache matched response: ${requestUrl}`);
|
|
914
944
|
}
|
|
915
945
|
if (typeof handler === "function") {
|
|
916
946
|
await handler(response, handlerOptions);
|
|
@@ -918,7 +948,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
918
948
|
}
|
|
919
949
|
return;
|
|
920
950
|
} catch (err) {
|
|
921
|
-
logerr(err);
|
|
951
|
+
(0, import_utils2.logerr)(err);
|
|
922
952
|
return;
|
|
923
953
|
}
|
|
924
954
|
}
|
|
@@ -933,7 +963,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
933
963
|
}
|
|
934
964
|
const firstResponseInterception = this.#responseInterceptionOptions.length <= 0;
|
|
935
965
|
for (const option of actOptions) {
|
|
936
|
-
if (option?.
|
|
966
|
+
if (option?.responseItems || option?.handler) {
|
|
937
967
|
this.#responseInterceptionOptions.push(option);
|
|
938
968
|
} else {
|
|
939
969
|
throw new Error(`Invalid ResponseInterceptionOption`);
|
|
@@ -990,6 +1020,30 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
990
1020
|
this.#status = "busy";
|
|
991
1021
|
return true;
|
|
992
1022
|
}
|
|
1023
|
+
async waitForElement(selector, options = {}) {
|
|
1024
|
+
if (!this.#page) {
|
|
1025
|
+
throw new Error("No valid page");
|
|
1026
|
+
}
|
|
1027
|
+
const locator = this.#page.locator(selector);
|
|
1028
|
+
const { timeout = 3e4, state = "visible" } = options;
|
|
1029
|
+
await locator.waitFor({ state, timeout });
|
|
1030
|
+
return true;
|
|
1031
|
+
}
|
|
1032
|
+
async waitForNavigation(options) {
|
|
1033
|
+
if (!this.#page) {
|
|
1034
|
+
throw new Error("No valid page");
|
|
1035
|
+
}
|
|
1036
|
+
const { url = "", timeout = 3e4, waitUntil = "load" } = options;
|
|
1037
|
+
const newWaitUntil = this.#getWaitUntil(waitUntil);
|
|
1038
|
+
if (url) {
|
|
1039
|
+
await this.#page.waitForURL(url, { timeout, waitUntil: newWaitUntil });
|
|
1040
|
+
} else if (newWaitUntil === "commit") {
|
|
1041
|
+
throw new Error("commit is not supported in PlaywrightPage.waitForNavigation");
|
|
1042
|
+
} else {
|
|
1043
|
+
await this.#page.waitForLoadState(newWaitUntil, { timeout });
|
|
1044
|
+
}
|
|
1045
|
+
return true;
|
|
1046
|
+
}
|
|
993
1047
|
async windowMember(keys) {
|
|
994
1048
|
if (!this.#page) {
|
|
995
1049
|
throw new Error("No valid page");
|
|
@@ -1018,7 +1072,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
1018
1072
|
};
|
|
1019
1073
|
|
|
1020
1074
|
// src/playwright/context.ts
|
|
1021
|
-
var PlaywrightBrowserContext = class extends
|
|
1075
|
+
var PlaywrightBrowserContext = class extends import_node_events2.default {
|
|
1022
1076
|
#lsdBrowser;
|
|
1023
1077
|
#browserIdx;
|
|
1024
1078
|
#browserContextIdx;
|
|
@@ -1037,12 +1091,12 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1037
1091
|
}
|
|
1038
1092
|
const pages = this.#browserContext.pages();
|
|
1039
1093
|
const openType = this.#lsdBrowser.browserCreationMethod();
|
|
1040
|
-
const lastStatusUpdateTime =
|
|
1094
|
+
const lastStatusUpdateTime = (0, import_utils3.getCurrentUnixTime)();
|
|
1041
1095
|
for (const page of pages) {
|
|
1042
1096
|
const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0 };
|
|
1043
1097
|
const lsdPage = new PlaywrightPage(this, page, pageInfo);
|
|
1044
1098
|
this.#lsdPages.push(lsdPage);
|
|
1045
|
-
|
|
1099
|
+
(0, import_utils3.loginfo)(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
1046
1100
|
}
|
|
1047
1101
|
}
|
|
1048
1102
|
constructor(lsdBrowser, browserContext, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0) {
|
|
@@ -1057,7 +1111,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1057
1111
|
this.#browserIdx = browserIdx;
|
|
1058
1112
|
this.#browserContextIdx = browserContextIdx;
|
|
1059
1113
|
this.#browserContext = browserContext;
|
|
1060
|
-
this.#createTime =
|
|
1114
|
+
this.#createTime = (0, import_utils3.getCurrentUnixTime)();
|
|
1061
1115
|
this.#incognito = incognito === false ? false : true;
|
|
1062
1116
|
this.#proxy = proxy?.server ? proxy : null;
|
|
1063
1117
|
this.#maxPagesPerBrowserContext = maxPagesPerBrowserContext;
|
|
@@ -1070,29 +1124,29 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1070
1124
|
const pageInfo = page.pageInfo;
|
|
1071
1125
|
if (pageInfo) {
|
|
1072
1126
|
const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
|
|
1073
|
-
|
|
1127
|
+
(0, import_utils3.logwarn)(`##browser page-${browserIdx2}-${browserContextIdx2}-${pageIdx} has been already created`);
|
|
1074
1128
|
} else {
|
|
1075
|
-
const currentTime =
|
|
1129
|
+
const currentTime = (0, import_utils3.getCurrentUnixTime)();
|
|
1076
1130
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime, lastStatusUpdateTime: currentTime, taskId: 0 };
|
|
1077
1131
|
const lsdPage = new PlaywrightPage(this, page, pageInfo2);
|
|
1078
1132
|
this.#lsdPages.push(lsdPage);
|
|
1079
|
-
|
|
1133
|
+
(0, import_utils3.loginfo)(`##browser ${lsdPage.id()} created`);
|
|
1080
1134
|
}
|
|
1081
1135
|
});
|
|
1082
1136
|
browserContext.on("close", (bc) => {
|
|
1083
1137
|
if (browserContext !== bc) {
|
|
1084
|
-
|
|
1138
|
+
(0, import_utils3.logerr)(`##browser different browserContext in browserContext.on("close")`);
|
|
1085
1139
|
}
|
|
1086
1140
|
this.#lsdBrowser.emit("browserContextClose", this);
|
|
1087
1141
|
});
|
|
1088
1142
|
this.on("pageClose", (lsdPage) => {
|
|
1089
1143
|
if (!(lsdPage instanceof PlaywrightPage)) {
|
|
1090
|
-
|
|
1144
|
+
(0, import_utils3.logerr)(`Invalid data in LsdBrowserContext.on("pageClose)`);
|
|
1091
1145
|
return;
|
|
1092
1146
|
}
|
|
1093
1147
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
1094
1148
|
if (idx < 0) {
|
|
1095
|
-
|
|
1149
|
+
(0, import_utils3.logerr)(`Invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
1096
1150
|
return;
|
|
1097
1151
|
}
|
|
1098
1152
|
this.#lsdPages.splice(idx, 1);
|
|
@@ -1115,15 +1169,15 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1115
1169
|
this.#gettingPage = true;
|
|
1116
1170
|
return true;
|
|
1117
1171
|
} else {
|
|
1118
|
-
await sleep(200);
|
|
1172
|
+
await (0, import_utils3.sleep)(200);
|
|
1119
1173
|
}
|
|
1120
1174
|
}
|
|
1121
|
-
|
|
1175
|
+
(0, import_utils3.logwarn)(`Cannot get the gettingLock.`);
|
|
1122
1176
|
return false;
|
|
1123
1177
|
}
|
|
1124
1178
|
#freeGettingLock() {
|
|
1125
1179
|
if (!this.#gettingPage) {
|
|
1126
|
-
|
|
1180
|
+
(0, import_utils3.logwarn)(`Getting lock is already free now.`);
|
|
1127
1181
|
}
|
|
1128
1182
|
this.#gettingPage = false;
|
|
1129
1183
|
}
|
|
@@ -1132,7 +1186,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1132
1186
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
1133
1187
|
}
|
|
1134
1188
|
if (maxPageFreeSeconds <= 0) {
|
|
1135
|
-
|
|
1189
|
+
(0, import_utils3.logwarn)(`Please set valid maxPageFreeSeconds to close free pages`);
|
|
1136
1190
|
return false;
|
|
1137
1191
|
}
|
|
1138
1192
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -1140,7 +1194,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1140
1194
|
return false;
|
|
1141
1195
|
}
|
|
1142
1196
|
try {
|
|
1143
|
-
const maxUpdateTime =
|
|
1197
|
+
const maxUpdateTime = (0, import_utils3.getCurrentUnixTime)() - this.#maxPageFreeSeconds;
|
|
1144
1198
|
let freePages = this.#lsdPages.filter((p) => p.isFree() && p.pageInfo().lastStatusUpdateTime < maxUpdateTime);
|
|
1145
1199
|
if (freePages.length === this.#lsdPages.length) {
|
|
1146
1200
|
freePages = freePages.slice(1);
|
|
@@ -1151,7 +1205,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1151
1205
|
this.#freeGettingLock();
|
|
1152
1206
|
return true;
|
|
1153
1207
|
} catch (err) {
|
|
1154
|
-
|
|
1208
|
+
(0, import_utils3.logerr)(err);
|
|
1155
1209
|
this.#freeGettingLock();
|
|
1156
1210
|
return false;
|
|
1157
1211
|
}
|
|
@@ -1192,7 +1246,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1192
1246
|
return null;
|
|
1193
1247
|
}
|
|
1194
1248
|
} catch (err) {
|
|
1195
|
-
|
|
1249
|
+
(0, import_utils3.logerr)(err);
|
|
1196
1250
|
this.#freeGettingLock();
|
|
1197
1251
|
return null;
|
|
1198
1252
|
}
|
|
@@ -1255,8 +1309,8 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1255
1309
|
};
|
|
1256
1310
|
|
|
1257
1311
|
// src/playwright/browser.ts
|
|
1258
|
-
|
|
1259
|
-
var PlaywrightBrowser = class extends
|
|
1312
|
+
var import_utils4 = require("@letsscrapedata/utils");
|
|
1313
|
+
var PlaywrightBrowser = class extends import_node_events3.default {
|
|
1260
1314
|
#browser;
|
|
1261
1315
|
#browserIdx;
|
|
1262
1316
|
#lsdBrowserContexts;
|
|
@@ -1301,38 +1355,38 @@ var PlaywrightBrowser = class extends EventEmitter3 {
|
|
|
1301
1355
|
this.#executablePath = executablePath;
|
|
1302
1356
|
this.#nextBrowserContextIdx = 1;
|
|
1303
1357
|
this.#closeFreePagesIntervalId = null;
|
|
1304
|
-
|
|
1358
|
+
(0, import_utils4.loginfo)(`##browser ${this.#browserType} ${this.id()} ${this.#browserCreationMethod}ed by ${this.#browserControllerType}`);
|
|
1305
1359
|
const browserContexts = browser.contexts();
|
|
1306
1360
|
if (browserContexts.length > 0) {
|
|
1307
|
-
|
|
1361
|
+
(0, import_utils4.logwarn)(`There are ${browserContexts.length} new browserContexts when playwright launches new browser`);
|
|
1308
1362
|
}
|
|
1309
1363
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : true;
|
|
1310
1364
|
for (const browserContext of browserContexts) {
|
|
1311
1365
|
const lsdBrowserContext = new PlaywrightBrowserContext(this, browserContext, incognito, this.#proxy, this.#browserIdx++, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds());
|
|
1312
1366
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
1313
|
-
|
|
1367
|
+
(0, import_utils4.loginfo)(`##browser ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
1314
1368
|
}
|
|
1315
1369
|
browser.on("disconnected", () => {
|
|
1316
|
-
|
|
1370
|
+
(0, import_utils4.loginfo)(`##browser ${this.id()} disconnected`);
|
|
1317
1371
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
1318
|
-
|
|
1372
|
+
(0, import_utils4.logerr)(`${this.id()} has browserContexts when disconnected`);
|
|
1319
1373
|
}
|
|
1320
1374
|
});
|
|
1321
1375
|
this.on("browserContextClose", (lsdBrowserContext) => {
|
|
1322
1376
|
if (!(lsdBrowserContext instanceof PlaywrightBrowserContext)) {
|
|
1323
|
-
|
|
1377
|
+
(0, import_utils4.logerr)(`Invalid data in LsdBrowser.on("browserContextClose)`);
|
|
1324
1378
|
return;
|
|
1325
1379
|
}
|
|
1326
1380
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
1327
1381
|
if (idx < 0) {
|
|
1328
|
-
|
|
1382
|
+
(0, import_utils4.logerr)(`Invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
1329
1383
|
return;
|
|
1330
1384
|
}
|
|
1331
|
-
|
|
1385
|
+
(0, import_utils4.loginfo)(`##browser ${lsdBrowserContext.id()} closed
|
|
1332
1386
|
`);
|
|
1333
1387
|
this.#lsdBrowserContexts.splice(idx, 1);
|
|
1334
1388
|
if (this.#lsdBrowserContexts.length === 0) {
|
|
1335
|
-
|
|
1389
|
+
(0, import_utils4.loginfo)(`##browser ${this.id()} has no browserContexts now`);
|
|
1336
1390
|
}
|
|
1337
1391
|
return;
|
|
1338
1392
|
});
|
|
@@ -1350,7 +1404,7 @@ var PlaywrightBrowser = class extends EventEmitter3 {
|
|
|
1350
1404
|
// 常用方法(按常见调用顺序排序)
|
|
1351
1405
|
async newBrowserContext(options) {
|
|
1352
1406
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
1353
|
-
|
|
1407
|
+
(0, import_utils4.logwarn)(`##browser ${this.id()} can not create more new browserContext`);
|
|
1354
1408
|
return null;
|
|
1355
1409
|
}
|
|
1356
1410
|
const browserContextOptions = {};
|
|
@@ -1365,7 +1419,7 @@ var PlaywrightBrowser = class extends EventEmitter3 {
|
|
|
1365
1419
|
const browserContext = await this.#browser.newContext(browserContextOptions);
|
|
1366
1420
|
const lsdBrowserContext = new PlaywrightBrowserContext(this, browserContext, true, proxy, this.#browserIdx++, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds());
|
|
1367
1421
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
1368
|
-
|
|
1422
|
+
(0, import_utils4.loginfo)(`##browser ${lsdBrowserContext.id()} created`);
|
|
1369
1423
|
return lsdBrowserContext;
|
|
1370
1424
|
}
|
|
1371
1425
|
async close() {
|
|
@@ -1416,16 +1470,16 @@ var PlaywrightBrowser = class extends EventEmitter3 {
|
|
|
1416
1470
|
};
|
|
1417
1471
|
|
|
1418
1472
|
// src/puppeteer/browser.ts
|
|
1419
|
-
|
|
1473
|
+
var import_node_events6 = __toESM(require("events"), 1);
|
|
1420
1474
|
|
|
1421
1475
|
// src/puppeteer/context.ts
|
|
1422
|
-
|
|
1476
|
+
var import_node_events5 = __toESM(require("events"), 1);
|
|
1423
1477
|
|
|
1424
1478
|
// src/puppeteer/page.ts
|
|
1425
|
-
|
|
1479
|
+
var import_node_events4 = __toESM(require("events"), 1);
|
|
1426
1480
|
|
|
1427
1481
|
// src/puppeteer/element.ts
|
|
1428
|
-
|
|
1482
|
+
var import_utils5 = require("@letsscrapedata/utils");
|
|
1429
1483
|
var PuppeteerElement = class _PuppeteerElement {
|
|
1430
1484
|
#frame;
|
|
1431
1485
|
#$ele;
|
|
@@ -1513,7 +1567,7 @@ var PuppeteerElement = class _PuppeteerElement {
|
|
|
1513
1567
|
}
|
|
1514
1568
|
return retObj;
|
|
1515
1569
|
} catch (err) {
|
|
1516
|
-
|
|
1570
|
+
(0, import_utils5.logerr)(err);
|
|
1517
1571
|
return retObj;
|
|
1518
1572
|
}
|
|
1519
1573
|
}
|
|
@@ -1663,44 +1717,24 @@ var PuppeteerElement = class _PuppeteerElement {
|
|
|
1663
1717
|
}
|
|
1664
1718
|
break;
|
|
1665
1719
|
default:
|
|
1666
|
-
|
|
1720
|
+
(0, import_utils5.unreachable)(type);
|
|
1667
1721
|
}
|
|
1668
1722
|
return true;
|
|
1669
1723
|
}
|
|
1670
1724
|
async screenshot(options) {
|
|
1671
1725
|
return await this.#$ele.screenshot(options);
|
|
1672
1726
|
}
|
|
1673
|
-
async scrollBy(x, y) {
|
|
1674
|
-
await this.#frame.evaluate(
|
|
1675
|
-
(x2, y2) => {
|
|
1676
|
-
window.scrollBy(x2, y2);
|
|
1677
|
-
},
|
|
1678
|
-
x,
|
|
1679
|
-
y
|
|
1680
|
-
);
|
|
1681
|
-
return true;
|
|
1682
|
-
}
|
|
1683
1727
|
async scrollIntoView() {
|
|
1684
1728
|
await this.#frame.evaluate((ele) => {
|
|
1685
1729
|
ele.scrollIntoView();
|
|
1686
1730
|
}, this.#$ele);
|
|
1687
1731
|
return true;
|
|
1688
1732
|
}
|
|
1689
|
-
async scrollTo(x, y) {
|
|
1690
|
-
await this.#frame.evaluate(
|
|
1691
|
-
(x2, y2) => {
|
|
1692
|
-
window.scrollTo(x2, y2);
|
|
1693
|
-
},
|
|
1694
|
-
x,
|
|
1695
|
-
y
|
|
1696
|
-
);
|
|
1697
|
-
return true;
|
|
1698
|
-
}
|
|
1699
1733
|
};
|
|
1700
1734
|
|
|
1701
1735
|
// src/puppeteer/page.ts
|
|
1702
|
-
|
|
1703
|
-
var PuppeteerPage = class extends
|
|
1736
|
+
var import_utils6 = require("@letsscrapedata/utils");
|
|
1737
|
+
var PuppeteerPage = class extends import_node_events4.default {
|
|
1704
1738
|
#lsdBrowserContext;
|
|
1705
1739
|
#page;
|
|
1706
1740
|
#status;
|
|
@@ -1859,9 +1893,9 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
1859
1893
|
const page = this.#page;
|
|
1860
1894
|
const pageId = this.#pageId;
|
|
1861
1895
|
page.on("close", async () => {
|
|
1862
|
-
|
|
1896
|
+
(0, import_utils6.loginfo)(`##browser ${pageId} closed`);
|
|
1863
1897
|
if (!page.pageInfo) {
|
|
1864
|
-
|
|
1898
|
+
(0, import_utils6.logerr)(`Logic error in page.on("close")`);
|
|
1865
1899
|
}
|
|
1866
1900
|
this.emit("pageClose");
|
|
1867
1901
|
this.#lsdBrowserContext.emit("pageClose", this);
|
|
@@ -1875,12 +1909,12 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
1875
1909
|
popupPageId = `page-${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
1876
1910
|
pageInfo.openType = "popup";
|
|
1877
1911
|
} else {
|
|
1878
|
-
|
|
1912
|
+
(0, import_utils6.logerr)(`##browser ${pageId} has popup without page.pageInfo`);
|
|
1879
1913
|
}
|
|
1880
|
-
|
|
1914
|
+
(0, import_utils6.loginfo)(`##browser ${pageId} has popup ${popupPageId}`);
|
|
1881
1915
|
this.emit("pagePopup", pageInfo);
|
|
1882
1916
|
} else {
|
|
1883
|
-
|
|
1917
|
+
(0, import_utils6.logerr)(`##browser ${pageId} has popup page with null page`);
|
|
1884
1918
|
}
|
|
1885
1919
|
});
|
|
1886
1920
|
}
|
|
@@ -1892,7 +1926,7 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
1892
1926
|
this.#lsdBrowserContext = browserContext;
|
|
1893
1927
|
this.#page = page;
|
|
1894
1928
|
this.#status = "free";
|
|
1895
|
-
const currentTime =
|
|
1929
|
+
const currentTime = (0, import_utils6.getCurrentUnixTime)();
|
|
1896
1930
|
const { browserIdx = 0, browserContextIdx = 0, pageIdx = 0, openType = "other", openTime = currentTime, lastStatusUpdateTime = currentTime, taskId = 0 } = pageInfo ? pageInfo : {};
|
|
1897
1931
|
this.#page.pageInfo = { browserIdx, browserContextIdx, pageIdx, openType, openTime, lastStatusUpdateTime, taskId };
|
|
1898
1932
|
this.#pageId = `page${browserIdx}-${browserContextIdx}-${pageIdx}`;
|
|
@@ -2037,12 +2071,21 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2037
2071
|
await this.clearResponseInterceptions();
|
|
2038
2072
|
return true;
|
|
2039
2073
|
}
|
|
2074
|
+
#getWaitUntil(origWaitUntil) {
|
|
2075
|
+
if (origWaitUntil === "networkidle") {
|
|
2076
|
+
return "networkidle0";
|
|
2077
|
+
} else if (origWaitUntil === "commit") {
|
|
2078
|
+
throw new Error("commit is not supported in PuppeteerPage");
|
|
2079
|
+
} else {
|
|
2080
|
+
return origWaitUntil;
|
|
2081
|
+
}
|
|
2082
|
+
}
|
|
2040
2083
|
async goto(url, options) {
|
|
2041
2084
|
if (!this.#page) {
|
|
2042
2085
|
throw new Error("No valid page");
|
|
2043
2086
|
}
|
|
2044
2087
|
if (options) {
|
|
2045
|
-
const { referer, timeout, waitUntil } = options;
|
|
2088
|
+
const { referer, timeout, waitUntil = "load" } = options;
|
|
2046
2089
|
const newOptions = {};
|
|
2047
2090
|
if (referer) {
|
|
2048
2091
|
newOptions.referer = referer;
|
|
@@ -2051,7 +2094,7 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2051
2094
|
newOptions.timeout = timeout;
|
|
2052
2095
|
}
|
|
2053
2096
|
if (waitUntil && waitUntil !== "commit") {
|
|
2054
|
-
newOptions.waitUntil = waitUntil
|
|
2097
|
+
newOptions.waitUntil = this.#getWaitUntil(waitUntil);
|
|
2055
2098
|
}
|
|
2056
2099
|
await this.#page.goto(url, newOptions);
|
|
2057
2100
|
} else {
|
|
@@ -2123,6 +2166,30 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2123
2166
|
}
|
|
2124
2167
|
return await this.#page.screenshot(options);
|
|
2125
2168
|
}
|
|
2169
|
+
async scrollBy(x, y) {
|
|
2170
|
+
if (!this.#page) {
|
|
2171
|
+
throw new Error("No valid page");
|
|
2172
|
+
}
|
|
2173
|
+
await this.#page.evaluate(
|
|
2174
|
+
([x2, y2]) => {
|
|
2175
|
+
window.scrollBy(x2, y2);
|
|
2176
|
+
},
|
|
2177
|
+
[x, y]
|
|
2178
|
+
);
|
|
2179
|
+
return true;
|
|
2180
|
+
}
|
|
2181
|
+
async scrollTo(x, y) {
|
|
2182
|
+
if (!this.#page) {
|
|
2183
|
+
throw new Error("No valid page");
|
|
2184
|
+
}
|
|
2185
|
+
await this.#page.evaluate(
|
|
2186
|
+
([x2, y2]) => {
|
|
2187
|
+
window.scrollTo(x2, y2);
|
|
2188
|
+
},
|
|
2189
|
+
[x, y]
|
|
2190
|
+
);
|
|
2191
|
+
return true;
|
|
2192
|
+
}
|
|
2126
2193
|
async setCookies(cookies) {
|
|
2127
2194
|
if (!this.#page) {
|
|
2128
2195
|
throw new Error("No valid page");
|
|
@@ -2220,7 +2287,7 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2220
2287
|
});
|
|
2221
2288
|
break;
|
|
2222
2289
|
default:
|
|
2223
|
-
|
|
2290
|
+
(0, import_utils6.unreachable)(action);
|
|
2224
2291
|
}
|
|
2225
2292
|
return true;
|
|
2226
2293
|
}
|
|
@@ -2255,7 +2322,7 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2255
2322
|
return false;
|
|
2256
2323
|
}
|
|
2257
2324
|
for (const option of actOptions) {
|
|
2258
|
-
const { requestMatch, responseMatch,
|
|
2325
|
+
const { requestMatch, responseMatch, responseItems, handler, handlerOptions } = option;
|
|
2259
2326
|
let matchedFlag = !requestMatch || this.#checkRequestMatch(request, requestMatch);
|
|
2260
2327
|
if (matchedFlag && responseMatch) {
|
|
2261
2328
|
const { minLength, maxLength } = responseMatch;
|
|
@@ -2268,13 +2335,13 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2268
2335
|
if (!matchedFlag) {
|
|
2269
2336
|
continue;
|
|
2270
2337
|
}
|
|
2271
|
-
if (Array.isArray(
|
|
2338
|
+
if (Array.isArray(responseItems)) {
|
|
2272
2339
|
const requestMethod = request.method();
|
|
2273
2340
|
const requestUrl = request.url();
|
|
2274
2341
|
const reqData2 = request.postData();
|
|
2275
2342
|
const requestData = reqData2 ? reqData2 : "";
|
|
2276
2343
|
const responseData = await response.text();
|
|
2277
|
-
|
|
2344
|
+
responseItems.push({
|
|
2278
2345
|
pageUrl,
|
|
2279
2346
|
requestMethod,
|
|
2280
2347
|
requestUrl,
|
|
@@ -2341,6 +2408,33 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2341
2408
|
this.#status = "busy";
|
|
2342
2409
|
return true;
|
|
2343
2410
|
}
|
|
2411
|
+
async waitForElement(selector, options = {}) {
|
|
2412
|
+
if (!this.#page) {
|
|
2413
|
+
throw new Error("No valid page");
|
|
2414
|
+
}
|
|
2415
|
+
const { timeout = 3e4, state = "visible" } = options;
|
|
2416
|
+
if (state === "visible") {
|
|
2417
|
+
await this.#page.waitForSelector(selector, { timeout, visible: true });
|
|
2418
|
+
} else if (state === "hidden") {
|
|
2419
|
+
await this.#page.waitForSelector(selector, { timeout, hidden: true });
|
|
2420
|
+
} else {
|
|
2421
|
+
throw new Error(`${state} is not supported in PuppeteerPage.waitForElement`);
|
|
2422
|
+
}
|
|
2423
|
+
return true;
|
|
2424
|
+
}
|
|
2425
|
+
async waitForNavigation(options) {
|
|
2426
|
+
if (!this.#page) {
|
|
2427
|
+
throw new Error("No valid page");
|
|
2428
|
+
}
|
|
2429
|
+
const { url = "", timeout = 3e4, waitUntil = "load" } = options;
|
|
2430
|
+
const newWaitUntil = this.#getWaitUntil(waitUntil);
|
|
2431
|
+
if (url) {
|
|
2432
|
+
throw new Error("url is not supported in PuppeteerPage.waitForNavigation");
|
|
2433
|
+
} else {
|
|
2434
|
+
await this.#page.waitForNavigation({ timeout, waitUntil: newWaitUntil });
|
|
2435
|
+
}
|
|
2436
|
+
return true;
|
|
2437
|
+
}
|
|
2344
2438
|
async windowMember(keys) {
|
|
2345
2439
|
if (!this.#page) {
|
|
2346
2440
|
throw new Error("No valid page");
|
|
@@ -2369,8 +2463,8 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2369
2463
|
};
|
|
2370
2464
|
|
|
2371
2465
|
// src/puppeteer/context.ts
|
|
2372
|
-
|
|
2373
|
-
var PuppeteerBrowserContext = class extends
|
|
2466
|
+
var import_utils7 = require("@letsscrapedata/utils");
|
|
2467
|
+
var PuppeteerBrowserContext = class extends import_node_events5.default {
|
|
2374
2468
|
#lsdBrowser;
|
|
2375
2469
|
#browserIdx;
|
|
2376
2470
|
#browserContextIdx;
|
|
@@ -2394,7 +2488,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2394
2488
|
}
|
|
2395
2489
|
const pages = await this.#browserContext.pages();
|
|
2396
2490
|
const openType = this.#lsdBrowser.browserCreationMethod();
|
|
2397
|
-
const lastStatusUpdateTime =
|
|
2491
|
+
const lastStatusUpdateTime = (0, import_utils7.getCurrentUnixTime)();
|
|
2398
2492
|
for (const page of pages) {
|
|
2399
2493
|
const pageInfo = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType, openTime: this.#createTime, lastStatusUpdateTime, taskId: 0 };
|
|
2400
2494
|
const lsdPage = new PuppeteerPage(this, page, pageInfo);
|
|
@@ -2402,7 +2496,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2402
2496
|
await lsdPage.setUserAgent(this.#userAgent);
|
|
2403
2497
|
}
|
|
2404
2498
|
this.#lsdPages.push(lsdPage);
|
|
2405
|
-
|
|
2499
|
+
(0, import_utils7.loginfo)(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
2406
2500
|
}
|
|
2407
2501
|
}
|
|
2408
2502
|
constructor(lsdBrowser, browserContext, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, userAgent = "") {
|
|
@@ -2418,7 +2512,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2418
2512
|
this.#browserContextIdx = browserContextIdx;
|
|
2419
2513
|
this.#browserContext = browserContext;
|
|
2420
2514
|
this.#userAgent = userAgent;
|
|
2421
|
-
this.#createTime =
|
|
2515
|
+
this.#createTime = (0, import_utils7.getCurrentUnixTime)();
|
|
2422
2516
|
this.#incognito = incognito === false ? false : true;
|
|
2423
2517
|
this.#proxy = proxy?.server ? proxy : null;
|
|
2424
2518
|
this.#maxPagesPerBrowserContext = maxPagesPerBrowserContext;
|
|
@@ -2436,27 +2530,27 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2436
2530
|
const pageInfo = page.pageInfo;
|
|
2437
2531
|
if (pageInfo) {
|
|
2438
2532
|
const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
|
|
2439
|
-
|
|
2533
|
+
(0, import_utils7.logwarn)(`##browser page-${browserIdx2}-${browserContextIdx2}-${pageIdx} has been already created`);
|
|
2440
2534
|
} else {
|
|
2441
|
-
const currentTime =
|
|
2535
|
+
const currentTime = (0, import_utils7.getCurrentUnixTime)();
|
|
2442
2536
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime, lastStatusUpdateTime: currentTime, taskId: 0 };
|
|
2443
2537
|
const lsdPage = new PuppeteerPage(this, page, pageInfo2);
|
|
2444
2538
|
if (this.#userAgent) {
|
|
2445
2539
|
await lsdPage.setUserAgent(this.#userAgent);
|
|
2446
2540
|
}
|
|
2447
2541
|
this.#lsdPages.push(lsdPage);
|
|
2448
|
-
|
|
2542
|
+
(0, import_utils7.loginfo)(`##browser ${lsdPage.id()} created`);
|
|
2449
2543
|
}
|
|
2450
2544
|
}
|
|
2451
2545
|
});
|
|
2452
2546
|
this.on("pageClose", (lsdPage) => {
|
|
2453
2547
|
if (!(lsdPage instanceof PuppeteerPage)) {
|
|
2454
|
-
|
|
2548
|
+
(0, import_utils7.logerr)(`Invalid data in LsdBrowserContext.on("pageClose)`);
|
|
2455
2549
|
return;
|
|
2456
2550
|
}
|
|
2457
2551
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
2458
2552
|
if (idx < 0) {
|
|
2459
|
-
|
|
2553
|
+
(0, import_utils7.logerr)(`Invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
2460
2554
|
return;
|
|
2461
2555
|
}
|
|
2462
2556
|
this.#lsdPages.splice(idx, 1);
|
|
@@ -2482,15 +2576,15 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2482
2576
|
this.#gettingPage = true;
|
|
2483
2577
|
return true;
|
|
2484
2578
|
} else {
|
|
2485
|
-
await
|
|
2579
|
+
await (0, import_utils7.sleep)(200);
|
|
2486
2580
|
}
|
|
2487
2581
|
}
|
|
2488
|
-
|
|
2582
|
+
(0, import_utils7.logwarn)(`Cannot get the gettingLock.`);
|
|
2489
2583
|
return false;
|
|
2490
2584
|
}
|
|
2491
2585
|
#freeGettingLock() {
|
|
2492
2586
|
if (!this.#gettingPage) {
|
|
2493
|
-
|
|
2587
|
+
(0, import_utils7.logwarn)(`Getting lock is already free now.`);
|
|
2494
2588
|
}
|
|
2495
2589
|
this.#gettingPage = false;
|
|
2496
2590
|
}
|
|
@@ -2499,7 +2593,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2499
2593
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
2500
2594
|
}
|
|
2501
2595
|
if (maxPageFreeSeconds <= 0) {
|
|
2502
|
-
|
|
2596
|
+
(0, import_utils7.logwarn)(`Please set valid maxPageFreeSeconds to close free pages`);
|
|
2503
2597
|
return false;
|
|
2504
2598
|
}
|
|
2505
2599
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -2507,7 +2601,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2507
2601
|
return false;
|
|
2508
2602
|
}
|
|
2509
2603
|
try {
|
|
2510
|
-
const maxUpdateTime =
|
|
2604
|
+
const maxUpdateTime = (0, import_utils7.getCurrentUnixTime)() - this.#maxPageFreeSeconds;
|
|
2511
2605
|
let freePages = this.#lsdPages.filter((p) => p.isFree() && p.pageInfo().lastStatusUpdateTime < maxUpdateTime);
|
|
2512
2606
|
if (freePages.length === this.#lsdPages.length) {
|
|
2513
2607
|
freePages = freePages.slice(1);
|
|
@@ -2518,7 +2612,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2518
2612
|
this.#freeGettingLock();
|
|
2519
2613
|
return true;
|
|
2520
2614
|
} catch (err) {
|
|
2521
|
-
|
|
2615
|
+
(0, import_utils7.logerr)(err);
|
|
2522
2616
|
this.#freeGettingLock();
|
|
2523
2617
|
return false;
|
|
2524
2618
|
}
|
|
@@ -2533,7 +2627,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2533
2627
|
}
|
|
2534
2628
|
try {
|
|
2535
2629
|
if (this.#lsdPages.length === 0) {
|
|
2536
|
-
await
|
|
2630
|
+
await (0, import_utils7.sleep)(1e3);
|
|
2537
2631
|
}
|
|
2538
2632
|
let lsdPage = this.#lsdPages.find((p) => p.isFree());
|
|
2539
2633
|
if (lsdPage) {
|
|
@@ -2561,7 +2655,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2561
2655
|
return null;
|
|
2562
2656
|
}
|
|
2563
2657
|
} catch (err) {
|
|
2564
|
-
|
|
2658
|
+
(0, import_utils7.logerr)(err);
|
|
2565
2659
|
this.#freeGettingLock();
|
|
2566
2660
|
return null;
|
|
2567
2661
|
}
|
|
@@ -2624,8 +2718,8 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2624
2718
|
};
|
|
2625
2719
|
|
|
2626
2720
|
// src/puppeteer/browser.ts
|
|
2627
|
-
|
|
2628
|
-
var PuppeteerBrowser = class extends
|
|
2721
|
+
var import_utils8 = require("@letsscrapedata/utils");
|
|
2722
|
+
var PuppeteerBrowser = class extends import_node_events6.default {
|
|
2629
2723
|
#browser;
|
|
2630
2724
|
#browserIdx;
|
|
2631
2725
|
#lsdBrowserContexts;
|
|
@@ -2673,35 +2767,35 @@ var PuppeteerBrowser = class extends EventEmitter6 {
|
|
|
2673
2767
|
this.#executablePath = executablePath;
|
|
2674
2768
|
this.#nextBrowserContextIdx = 1;
|
|
2675
2769
|
this.#closeFreePagesIntervalId = null;
|
|
2676
|
-
|
|
2770
|
+
(0, import_utils8.loginfo)(`##browser ${this.#browserType} ${this.id()} ${this.#browserCreationMethod}ed by ${this.#browserControllerType}`);
|
|
2677
2771
|
const browserContexts = browser.browserContexts();
|
|
2678
2772
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : false;
|
|
2679
2773
|
for (const browserContext of browserContexts) {
|
|
2680
2774
|
const lsdBrowserContext = new PuppeteerBrowserContext(this, browserContext, incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), this.#userAgent());
|
|
2681
2775
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
2682
|
-
|
|
2776
|
+
(0, import_utils8.loginfo)(`##browser ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
2683
2777
|
}
|
|
2684
2778
|
browser.on("disconnected", () => {
|
|
2685
|
-
|
|
2779
|
+
(0, import_utils8.loginfo)(`##browser ${this.id()} disconnected`);
|
|
2686
2780
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
2687
|
-
|
|
2781
|
+
(0, import_utils8.logerr)(`${this.id()} has browserContexts when disconnected`);
|
|
2688
2782
|
}
|
|
2689
2783
|
});
|
|
2690
2784
|
this.on("browserContextClose", (lsdBrowserContext) => {
|
|
2691
2785
|
if (!(lsdBrowserContext instanceof PuppeteerBrowserContext)) {
|
|
2692
|
-
|
|
2786
|
+
(0, import_utils8.logerr)(`Invalid data in LsdBrowser.on("browserContextClose)`);
|
|
2693
2787
|
return;
|
|
2694
2788
|
}
|
|
2695
2789
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
2696
2790
|
if (idx < 0) {
|
|
2697
|
-
|
|
2791
|
+
(0, import_utils8.logerr)(`Invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
2698
2792
|
return;
|
|
2699
2793
|
}
|
|
2700
|
-
|
|
2794
|
+
(0, import_utils8.loginfo)(`##browser ${lsdBrowserContext.id()} closed
|
|
2701
2795
|
`);
|
|
2702
2796
|
this.#lsdBrowserContexts.splice(idx, 1);
|
|
2703
2797
|
if (this.#lsdBrowserContexts.length === 0) {
|
|
2704
|
-
|
|
2798
|
+
(0, import_utils8.loginfo)(`##browser ${this.id()} has no browserContexts now`);
|
|
2705
2799
|
}
|
|
2706
2800
|
return;
|
|
2707
2801
|
});
|
|
@@ -2719,7 +2813,7 @@ var PuppeteerBrowser = class extends EventEmitter6 {
|
|
|
2719
2813
|
// 常用方法(按常见调用顺序排序)
|
|
2720
2814
|
async newBrowserContext(options) {
|
|
2721
2815
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
2722
|
-
|
|
2816
|
+
(0, import_utils8.logwarn)(`##browser ${this.id()} can not create more new browserContext`);
|
|
2723
2817
|
return null;
|
|
2724
2818
|
}
|
|
2725
2819
|
const browserContextOptions = {};
|
|
@@ -2731,7 +2825,7 @@ var PuppeteerBrowser = class extends EventEmitter6 {
|
|
|
2731
2825
|
const userAgent = options?.userAgent ? options.userAgent : "";
|
|
2732
2826
|
const lsdBrowserContext = new PuppeteerBrowserContext(this, browserContext, true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), userAgent);
|
|
2733
2827
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
2734
|
-
|
|
2828
|
+
(0, import_utils8.loginfo)(`##browser ${lsdBrowserContext.id()} created`);
|
|
2735
2829
|
return lsdBrowserContext;
|
|
2736
2830
|
}
|
|
2737
2831
|
async close() {
|
|
@@ -2784,7 +2878,7 @@ var PuppeteerBrowser = class extends EventEmitter6 {
|
|
|
2784
2878
|
};
|
|
2785
2879
|
|
|
2786
2880
|
// src/cheerio/page.ts
|
|
2787
|
-
|
|
2881
|
+
var import_node_events7 = __toESM(require("events"), 1);
|
|
2788
2882
|
|
|
2789
2883
|
// ../../node_modules/cheerio/lib/esm/options.js
|
|
2790
2884
|
var defaultOpts = {
|
|
@@ -16656,29 +16750,34 @@ var CheerioElement = class _CheerioElement {
|
|
|
16656
16750
|
return Array.from(Object.keys(element.attribs));
|
|
16657
16751
|
}
|
|
16658
16752
|
}
|
|
16659
|
-
#findNodes(selector) {
|
|
16753
|
+
#findNodes(selector, absolute) {
|
|
16660
16754
|
if (selector.startsWith("./") || selector.startsWith("/")) {
|
|
16661
16755
|
throw new Error("Do not support XPath in cheerio.");
|
|
16662
16756
|
}
|
|
16663
16757
|
if (selector === ".") {
|
|
16664
16758
|
return [this.#node];
|
|
16665
16759
|
}
|
|
16666
|
-
const
|
|
16667
|
-
|
|
16668
|
-
|
|
16760
|
+
const nodes = [];
|
|
16761
|
+
const cheerioNode = !absolute ? this.#node.find(selector) : this.#node._root?.find(selector);
|
|
16762
|
+
if (!cheerioNode) {
|
|
16763
|
+
return nodes;
|
|
16764
|
+
} else if (cheerioNode.length > 0) {
|
|
16669
16765
|
const len = cheerioNode.length;
|
|
16670
16766
|
for (let i = 0; i < len; i++) {
|
|
16671
16767
|
nodes.push(cheerioNode.eq(i));
|
|
16672
16768
|
}
|
|
16673
16769
|
return nodes;
|
|
16674
16770
|
} else {
|
|
16675
|
-
return
|
|
16771
|
+
return nodes;
|
|
16676
16772
|
}
|
|
16677
16773
|
}
|
|
16678
|
-
async findElement(selectorOrXpath) {
|
|
16774
|
+
async findElement(selectorOrXpath, iframeOptions = [], absolute = false) {
|
|
16775
|
+
if (!iframeOptions) {
|
|
16776
|
+
return null;
|
|
16777
|
+
}
|
|
16679
16778
|
const selectors = typeof selectorOrXpath === "string" ? [selectorOrXpath] : selectorOrXpath;
|
|
16680
16779
|
for (const selector of selectors) {
|
|
16681
|
-
const nodes = this.#findNodes(selector);
|
|
16780
|
+
const nodes = this.#findNodes(selector, absolute);
|
|
16682
16781
|
if (nodes.length > 0) {
|
|
16683
16782
|
const cheerioElement = new _CheerioElement(nodes[0]);
|
|
16684
16783
|
return cheerioElement;
|
|
@@ -16686,10 +16785,13 @@ var CheerioElement = class _CheerioElement {
|
|
|
16686
16785
|
}
|
|
16687
16786
|
return null;
|
|
16688
16787
|
}
|
|
16689
|
-
async findElements(selectorOrXpath) {
|
|
16788
|
+
async findElements(selectorOrXpath, iframeOptions = [], absolute = false) {
|
|
16789
|
+
if (!iframeOptions) {
|
|
16790
|
+
return [];
|
|
16791
|
+
}
|
|
16690
16792
|
const selectors = typeof selectorOrXpath === "string" ? [selectorOrXpath] : selectorOrXpath;
|
|
16691
16793
|
for (const selector of selectors) {
|
|
16692
|
-
const nodes = this.#findNodes(selector);
|
|
16794
|
+
const nodes = this.#findNodes(selector, absolute);
|
|
16693
16795
|
if (nodes.length > 0) {
|
|
16694
16796
|
const cheerioElements = nodes.map((node) => new _CheerioElement(node));
|
|
16695
16797
|
return cheerioElements;
|
|
@@ -16738,19 +16840,13 @@ var CheerioElement = class _CheerioElement {
|
|
|
16738
16840
|
async screenshot() {
|
|
16739
16841
|
throw new Error("Not supported in CheerioElement.");
|
|
16740
16842
|
}
|
|
16741
|
-
async scrollBy() {
|
|
16742
|
-
throw new Error("Not supported in CheerioElement.");
|
|
16743
|
-
}
|
|
16744
16843
|
async scrollIntoView() {
|
|
16745
16844
|
throw new Error("Not supported in CheerioElement.");
|
|
16746
16845
|
}
|
|
16747
|
-
async scrollTo() {
|
|
16748
|
-
throw new Error("Not supported in CheerioElement.");
|
|
16749
|
-
}
|
|
16750
16846
|
};
|
|
16751
16847
|
|
|
16752
16848
|
// src/cheerio/page.ts
|
|
16753
|
-
var CheerioPage = class extends
|
|
16849
|
+
var CheerioPage = class extends import_node_events7.default {
|
|
16754
16850
|
#document;
|
|
16755
16851
|
constructor(html3 = "") {
|
|
16756
16852
|
super();
|
|
@@ -16867,6 +16963,12 @@ var CheerioPage = class extends EventEmitter7 {
|
|
|
16867
16963
|
async screenshot() {
|
|
16868
16964
|
throw new Error("Not supported in CheerioPage.");
|
|
16869
16965
|
}
|
|
16966
|
+
async scrollBy() {
|
|
16967
|
+
throw new Error("Not supported in CheerioElement.");
|
|
16968
|
+
}
|
|
16969
|
+
async scrollTo() {
|
|
16970
|
+
throw new Error("Not supported in CheerioElement.");
|
|
16971
|
+
}
|
|
16870
16972
|
async setCookies() {
|
|
16871
16973
|
throw new Error("Not supported in CheerioPage.");
|
|
16872
16974
|
}
|
|
@@ -16909,16 +17011,22 @@ var CheerioPage = class extends EventEmitter7 {
|
|
|
16909
17011
|
use() {
|
|
16910
17012
|
throw new Error("Not supported in CheerioPage.");
|
|
16911
17013
|
}
|
|
17014
|
+
waitForElement() {
|
|
17015
|
+
throw new Error("Not supported in CheerioPage.");
|
|
17016
|
+
}
|
|
17017
|
+
waitForNavigation() {
|
|
17018
|
+
throw new Error("Not supported in CheerioPage.");
|
|
17019
|
+
}
|
|
16912
17020
|
async windowMember() {
|
|
16913
17021
|
throw new Error("Not supported in CheerioPage.");
|
|
16914
17022
|
}
|
|
16915
17023
|
};
|
|
16916
17024
|
|
|
16917
17025
|
// src/controller/controller.ts
|
|
16918
|
-
|
|
16919
|
-
|
|
16920
|
-
|
|
16921
|
-
|
|
17026
|
+
var import_os = __toESM(require("os"), 1);
|
|
17027
|
+
var import_puppeteer = __toESM(require("puppeteer"), 1);
|
|
17028
|
+
var import_playwright = __toESM(require("playwright"), 1);
|
|
17029
|
+
var import_utils15 = require("@letsscrapedata/utils");
|
|
16922
17030
|
var LsdBrowserController = class _LsdBrowserController {
|
|
16923
17031
|
static #forbidConstructor = false;
|
|
16924
17032
|
#nextBrowserIdx;
|
|
@@ -16930,19 +17038,19 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
16930
17038
|
if (_LsdBrowserController.#forbidConstructor) {
|
|
16931
17039
|
throw new Error("Only one LsdBrowserController instance can be created!");
|
|
16932
17040
|
}
|
|
16933
|
-
this.#osPlatform =
|
|
17041
|
+
this.#osPlatform = import_os.default.platform();
|
|
16934
17042
|
this.#nextBrowserIdx = 1;
|
|
16935
17043
|
_LsdBrowserController.#forbidConstructor = true;
|
|
16936
17044
|
}
|
|
16937
17045
|
#playwrightBrowserType(browserType, connectFlag = false) {
|
|
16938
17046
|
if (browserType === "chromium") {
|
|
16939
|
-
return
|
|
17047
|
+
return import_playwright.default.chromium;
|
|
16940
17048
|
} else if (connectFlag) {
|
|
16941
17049
|
throw new Error(`playwright only can connect to chromium browser, not support ${browserType} browser`);
|
|
16942
17050
|
} else if (browserType === "firefox") {
|
|
16943
|
-
return
|
|
17051
|
+
return import_playwright.default.firefox;
|
|
16944
17052
|
} else if (browserType === "webkit") {
|
|
16945
|
-
return
|
|
17053
|
+
return import_playwright.default.webkit;
|
|
16946
17054
|
} else {
|
|
16947
17055
|
throw new Error(`Invalid playwright browserType ${browserType}`);
|
|
16948
17056
|
}
|
|
@@ -16974,17 +17082,17 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
16974
17082
|
const actOptions = { closeFreePagesIntervalSeconds, maxBrowserContextsPerBrowser, maxPagesPerBrowserContext, maxPageFreeSeconds, timeout, args, executablePath, headless, incognito, proxy, proxyPerBrowserContext, userDataDir, userAgent };
|
|
16975
17083
|
let idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--incoginto"));
|
|
16976
17084
|
if (idx >= 0) {
|
|
16977
|
-
|
|
17085
|
+
(0, import_utils15.logwarn)(`Please use options.incognito instead when launching new browser.`);
|
|
16978
17086
|
args.splice(idx, 1);
|
|
16979
17087
|
}
|
|
16980
17088
|
idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--proxy-server"));
|
|
16981
17089
|
if (idx >= 0) {
|
|
16982
|
-
|
|
17090
|
+
(0, import_utils15.logwarn)(`Please use options.proxy instead when launching new browser.`);
|
|
16983
17091
|
args.splice(idx, 1);
|
|
16984
17092
|
}
|
|
16985
17093
|
idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--user-data-dir"));
|
|
16986
17094
|
if (idx >= 0) {
|
|
16987
|
-
|
|
17095
|
+
(0, import_utils15.logwarn)(`Please use options.userDataDir instead when launching new browser.`);
|
|
16988
17096
|
args.splice(idx, 1);
|
|
16989
17097
|
}
|
|
16990
17098
|
if (browserControllerType === "playwright") {
|
|
@@ -17036,9 +17144,9 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
17036
17144
|
launchOptions.args = args;
|
|
17037
17145
|
}
|
|
17038
17146
|
if (!actOptions.executablePath) {
|
|
17039
|
-
actOptions.executablePath =
|
|
17147
|
+
actOptions.executablePath = import_puppeteer.default.executablePath();
|
|
17040
17148
|
}
|
|
17041
|
-
const browser = await
|
|
17149
|
+
const browser = await import_puppeteer.default.launch(launchOptions);
|
|
17042
17150
|
const lsdBrowser = new PuppeteerBrowser(browser, browserType, "launch", actOptions, this.#nextBrowserIdx++);
|
|
17043
17151
|
return lsdBrowser;
|
|
17044
17152
|
} else {
|
|
@@ -17057,7 +17165,7 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
17057
17165
|
return lsdBrowser;
|
|
17058
17166
|
} else if (browserControllerType === "puppeteer") {
|
|
17059
17167
|
this.#puppeteerProduct(browserType);
|
|
17060
|
-
const browser = await
|
|
17168
|
+
const browser = await import_puppeteer.default.connect({ browserURL: browserUrl });
|
|
17061
17169
|
const lsdBrowser = new PuppeteerBrowser(browser, browserType, "connect", options, this.#nextBrowserIdx++);
|
|
17062
17170
|
;
|
|
17063
17171
|
return lsdBrowser;
|
|
@@ -17067,7 +17175,8 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
17067
17175
|
}
|
|
17068
17176
|
};
|
|
17069
17177
|
var controller = new LsdBrowserController();
|
|
17070
|
-
export
|
|
17178
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
17179
|
+
0 && (module.exports = {
|
|
17071
17180
|
CheerioElement,
|
|
17072
17181
|
CheerioPage,
|
|
17073
17182
|
PlaywrightBrowser,
|
|
@@ -17079,4 +17188,4 @@ export {
|
|
|
17079
17188
|
PuppeteerElement,
|
|
17080
17189
|
PuppeteerPage,
|
|
17081
17190
|
defaultProxy
|
|
17082
|
-
};
|
|
17191
|
+
});
|