@letsscrapedata/controller 0.0.35 → 0.0.37
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 +62 -11
- package/dist/index.d.cts +37 -9
- package/dist/index.d.ts +37 -9
- package/dist/index.js +65 -14
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1375,10 +1375,10 @@ var PlaywrightBrowserContext = class extends import_node_events2.default {
|
|
|
1375
1375
|
return null;
|
|
1376
1376
|
}
|
|
1377
1377
|
}
|
|
1378
|
-
|
|
1378
|
+
hasFreePage(pageNum = 1) {
|
|
1379
1379
|
if (this.#maxPagesPerBrowserContext - this.#lsdPages.length > pageNum) {
|
|
1380
1380
|
return true;
|
|
1381
|
-
} else if (this.#maxPagesPerBrowserContext - this.#lsdPages.filter((p) => p.isFree()).length > pageNum) {
|
|
1381
|
+
} else if (this.#maxPagesPerBrowserContext - this.#lsdPages.filter((p) => !p.isFree()).length > pageNum) {
|
|
1382
1382
|
return true;
|
|
1383
1383
|
} else {
|
|
1384
1384
|
return false;
|
|
@@ -1446,6 +1446,7 @@ var import_utils4 = require("@letsscrapedata/utils");
|
|
|
1446
1446
|
var PlaywrightBrowser = class extends import_node_events3.default {
|
|
1447
1447
|
#browser;
|
|
1448
1448
|
#browserIdx;
|
|
1449
|
+
#pid;
|
|
1449
1450
|
#lsdBrowserContexts;
|
|
1450
1451
|
#browserControllerType;
|
|
1451
1452
|
#browserType;
|
|
@@ -1470,7 +1471,7 @@ var PlaywrightBrowser = class extends import_node_events3.default {
|
|
|
1470
1471
|
return this.#options.maxPageFreeSeconds ? this.#options.maxPageFreeSeconds : 900;
|
|
1471
1472
|
}
|
|
1472
1473
|
// 构造函数:缺省只能由LsdBrowserController.launch/connect调用创建实例!!!
|
|
1473
|
-
constructor(browser, browerType, browserCreateMethod, options, browserIdx = 0) {
|
|
1474
|
+
constructor(browser, browerType, browserCreateMethod, options, browserIdx = 0, pid = 0) {
|
|
1474
1475
|
if (!browser || typeof browser.contexts !== "function") {
|
|
1475
1476
|
throw new Error(`Invalid playwright browser parameter`);
|
|
1476
1477
|
}
|
|
@@ -1478,6 +1479,7 @@ var PlaywrightBrowser = class extends import_node_events3.default {
|
|
|
1478
1479
|
const { closeFreePagesIntervalSeconds = 300, maxPageFreeSeconds = 900, maxViewportOfNewPage = true, headless = false, executablePath = "" } = options;
|
|
1479
1480
|
this.#browser = browser;
|
|
1480
1481
|
this.#browserIdx = browserIdx;
|
|
1482
|
+
this.#pid = pid;
|
|
1481
1483
|
this.#lsdBrowserContexts = [];
|
|
1482
1484
|
this.#browserControllerType = "playwright";
|
|
1483
1485
|
this.#browserType = browerType;
|
|
@@ -1597,6 +1599,17 @@ var PlaywrightBrowser = class extends import_node_events3.default {
|
|
|
1597
1599
|
options() {
|
|
1598
1600
|
return this.#options;
|
|
1599
1601
|
}
|
|
1602
|
+
pid() {
|
|
1603
|
+
return this.#pid;
|
|
1604
|
+
}
|
|
1605
|
+
async pidUsage() {
|
|
1606
|
+
if (this.#pid > 0) {
|
|
1607
|
+
const usage = await (0, import_utils4.getPerformanceOfPidTree)(this.#pid, "MB");
|
|
1608
|
+
return usage;
|
|
1609
|
+
} else {
|
|
1610
|
+
return { cpu: 0, memory: 0 };
|
|
1611
|
+
}
|
|
1612
|
+
}
|
|
1600
1613
|
async version() {
|
|
1601
1614
|
const version = await this.#browser.version();
|
|
1602
1615
|
return version;
|
|
@@ -2882,10 +2895,10 @@ var PuppeteerBrowserContext = class extends import_node_events5.default {
|
|
|
2882
2895
|
return null;
|
|
2883
2896
|
}
|
|
2884
2897
|
}
|
|
2885
|
-
|
|
2898
|
+
hasFreePage(pageNum = 1) {
|
|
2886
2899
|
if (this.#maxPagesPerBrowserContext - this.#lsdPages.length > pageNum) {
|
|
2887
2900
|
return true;
|
|
2888
|
-
} else if (this.#maxPagesPerBrowserContext - this.#lsdPages.filter((p) => p.isFree()).length > pageNum) {
|
|
2901
|
+
} else if (this.#maxPagesPerBrowserContext - this.#lsdPages.filter((p) => !p.isFree()).length > pageNum) {
|
|
2889
2902
|
return true;
|
|
2890
2903
|
} else {
|
|
2891
2904
|
return false;
|
|
@@ -2953,6 +2966,7 @@ var import_utils8 = require("@letsscrapedata/utils");
|
|
|
2953
2966
|
var PuppeteerBrowser = class extends import_node_events6.default {
|
|
2954
2967
|
#browser;
|
|
2955
2968
|
#browserIdx;
|
|
2969
|
+
#pid;
|
|
2956
2970
|
#lsdBrowserContexts;
|
|
2957
2971
|
#browserControllerType;
|
|
2958
2972
|
#browserType;
|
|
@@ -2980,7 +2994,7 @@ var PuppeteerBrowser = class extends import_node_events6.default {
|
|
|
2980
2994
|
return this.#options.userAgent ? this.#options.userAgent : "";
|
|
2981
2995
|
}
|
|
2982
2996
|
// 构造函数:缺省只能由LsdBrowserController.launch/connect调用创建实例!!!
|
|
2983
|
-
constructor(browser, browerType, browserCreateMethod, options, browserIdx = 0) {
|
|
2997
|
+
constructor(browser, browerType, browserCreateMethod, options, browserIdx = 0, pid = 0) {
|
|
2984
2998
|
if (!browser || typeof browser.browserContexts !== "function") {
|
|
2985
2999
|
throw new Error(`Invalid puppeteer browser parameter`);
|
|
2986
3000
|
}
|
|
@@ -2988,6 +3002,7 @@ var PuppeteerBrowser = class extends import_node_events6.default {
|
|
|
2988
3002
|
const { closeFreePagesIntervalSeconds = 300, maxPageFreeSeconds = 900, maxViewportOfNewPage = true, headless = false, executablePath = "" } = options;
|
|
2989
3003
|
this.#browser = browser;
|
|
2990
3004
|
this.#browserIdx = browserIdx;
|
|
3005
|
+
this.#pid = pid;
|
|
2991
3006
|
this.#lsdBrowserContexts = [];
|
|
2992
3007
|
this.#browserControllerType = "puppeteer";
|
|
2993
3008
|
this.#browserType = browerType;
|
|
@@ -3100,6 +3115,17 @@ var PuppeteerBrowser = class extends import_node_events6.default {
|
|
|
3100
3115
|
options() {
|
|
3101
3116
|
return this.#options;
|
|
3102
3117
|
}
|
|
3118
|
+
pid() {
|
|
3119
|
+
return this.#pid;
|
|
3120
|
+
}
|
|
3121
|
+
async pidUsage() {
|
|
3122
|
+
if (this.#pid > 0) {
|
|
3123
|
+
const usage = await (0, import_utils8.getPerformanceOfPidTree)(this.#pid, "MB");
|
|
3124
|
+
return usage;
|
|
3125
|
+
} else {
|
|
3126
|
+
return { cpu: 0, memory: 0 };
|
|
3127
|
+
}
|
|
3128
|
+
}
|
|
3103
3129
|
async version() {
|
|
3104
3130
|
const version = await this.#browser.version();
|
|
3105
3131
|
return version;
|
|
@@ -17382,6 +17408,7 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
17382
17408
|
userDataDir = "",
|
|
17383
17409
|
userAgent = ""
|
|
17384
17410
|
} = options ? options : {};
|
|
17411
|
+
let browserPid = 0;
|
|
17385
17412
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : browserControllerType === "puppeteer" ? false : true;
|
|
17386
17413
|
const actOptions = { closeFreePagesIntervalSeconds, maxBrowserContextsPerBrowser, maxPagesPerBrowserContext, maxPageFreeSeconds, maxViewportOfNewPage, proxy, timeout, args, executablePath, maxWindowSize, headless, minBrowserContexts, incognito, proxyPerBrowserContext, userDataDir, userAgent };
|
|
17387
17414
|
let idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--incoginto"));
|
|
@@ -17433,8 +17460,19 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
17433
17460
|
if (!actOptions.executablePath) {
|
|
17434
17461
|
actOptions.executablePath = playwrightBrowserType.executablePath();
|
|
17435
17462
|
}
|
|
17436
|
-
|
|
17437
|
-
|
|
17463
|
+
if (options.launchMethod === "launchServer") {
|
|
17464
|
+
const browserServer = await playwrightBrowserType.launchServer(launchOptions);
|
|
17465
|
+
const process = browserServer.process();
|
|
17466
|
+
if (process?.pid) {
|
|
17467
|
+
browserPid = process.pid;
|
|
17468
|
+
}
|
|
17469
|
+
const wsEndpoint = browserServer.wsEndpoint();
|
|
17470
|
+
const browser = await playwrightBrowserType.connect(wsEndpoint);
|
|
17471
|
+
lsdBrowser = new PlaywrightBrowser(browser, browserType, "launch", actOptions, this.#nextBrowserIdx++, browserPid);
|
|
17472
|
+
} else {
|
|
17473
|
+
const browser = await playwrightBrowserType.launch(launchOptions);
|
|
17474
|
+
lsdBrowser = new PlaywrightBrowser(browser, browserType, "launch", actOptions, this.#nextBrowserIdx++, browserPid);
|
|
17475
|
+
}
|
|
17438
17476
|
} else if (browserControllerType === "puppeteer") {
|
|
17439
17477
|
const product = this.#puppeteerProduct(browserType);
|
|
17440
17478
|
const launchOptions = { headless, timeout, product };
|
|
@@ -17467,7 +17505,11 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
17467
17505
|
actOptions.executablePath = this.#puppeteer.executablePath();
|
|
17468
17506
|
}
|
|
17469
17507
|
const browser = await this.#puppeteer.launch(launchOptions);
|
|
17470
|
-
|
|
17508
|
+
const browserProcess = browser.process();
|
|
17509
|
+
if (browserProcess?.pid) {
|
|
17510
|
+
browserPid = browserProcess.pid;
|
|
17511
|
+
}
|
|
17512
|
+
lsdBrowser = new PuppeteerBrowser(browser, browserType, "launch", actOptions, this.#nextBrowserIdx++, browserPid);
|
|
17471
17513
|
} else {
|
|
17472
17514
|
throw new Error(`Invalid browserControllerType: ${browserControllerType} in launch`);
|
|
17473
17515
|
}
|
|
@@ -17494,16 +17536,25 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
17494
17536
|
if (typeof browserUrl !== "string" || !browserUrl.toLowerCase().startsWith("http://")) {
|
|
17495
17537
|
throw new Error(`Invalid browserUrl ${browserUrl} in connect`);
|
|
17496
17538
|
}
|
|
17539
|
+
const u = new URL(browserUrl);
|
|
17540
|
+
const port = u.port ? parseInt(u.port) : 80;
|
|
17541
|
+
const pids = await (0, import_utils15.getPidsListeningOnPort)(port);
|
|
17542
|
+
let browserPid = 0;
|
|
17543
|
+
if (pids.length !== 1) {
|
|
17544
|
+
(0, import_utils15.logerr)(`##browser pids.length ${pids.length} is not 1 when trying to connect to browserUrl ${browserUrl}`);
|
|
17545
|
+
} else {
|
|
17546
|
+
browserPid = pids[0];
|
|
17547
|
+
}
|
|
17497
17548
|
const actOptions = { closeFreePagesIntervalSeconds, maxBrowserContextsPerBrowser, maxPagesPerBrowserContext, maxPageFreeSeconds, maxViewportOfNewPage, proxy, timeout, browserUrl, executablePath, headless, incognito, userAgent };
|
|
17498
17549
|
if (browserControllerType === "playwright") {
|
|
17499
17550
|
const playwrightBrowserType = this.#playwrightBrowserType(browserType, true);
|
|
17500
17551
|
const browser = await playwrightBrowserType.connectOverCDP(browserUrl);
|
|
17501
|
-
const lsdBrowser = new PlaywrightBrowser(browser, browserType, "connect", actOptions, this.#nextBrowserIdx
|
|
17552
|
+
const lsdBrowser = new PlaywrightBrowser(browser, browserType, "connect", actOptions, this.#nextBrowserIdx++, browserPid);
|
|
17502
17553
|
return lsdBrowser;
|
|
17503
17554
|
} else if (browserControllerType === "puppeteer") {
|
|
17504
17555
|
this.#puppeteerProduct(browserType);
|
|
17505
17556
|
const browser = await this.#puppeteer.connect({ browserURL: browserUrl });
|
|
17506
|
-
const lsdBrowser = new PuppeteerBrowser(browser, browserType, "connect", options, this.#nextBrowserIdx
|
|
17557
|
+
const lsdBrowser = new PuppeteerBrowser(browser, browserType, "connect", options, this.#nextBrowserIdx++, browserPid);
|
|
17507
17558
|
;
|
|
17508
17559
|
return lsdBrowser;
|
|
17509
17560
|
} else {
|
package/dist/index.d.cts
CHANGED
|
@@ -31,9 +31,6 @@ interface PlaywrightBrowserTypes {
|
|
|
31
31
|
firefox: BrowserType;
|
|
32
32
|
webkit: BrowserType;
|
|
33
33
|
}
|
|
34
|
-
type BrowserControllerOptions = {
|
|
35
|
-
browserControllerType: BrowserControllerType;
|
|
36
|
-
};
|
|
37
34
|
interface BrowserOptions {
|
|
38
35
|
/**
|
|
39
36
|
* Interval between closing free pages (seconds) if greater than 0
|
|
@@ -71,6 +68,11 @@ interface BrowserOptions {
|
|
|
71
68
|
*/
|
|
72
69
|
timeout?: number;
|
|
73
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* * puppeteer: launchServer is the same as launch
|
|
73
|
+
* * playwright: use "launchServer" if it's necessary to call LsdBrowser.pid()/pidUsage()
|
|
74
|
+
*/
|
|
75
|
+
type BrowserLaunchMethod = "launch" | "launchServer";
|
|
74
76
|
interface LsdLaunchOptions extends BrowserOptions {
|
|
75
77
|
args?: string[];
|
|
76
78
|
executablePath?: string;
|
|
@@ -102,6 +104,10 @@ interface LsdLaunchOptions extends BrowserOptions {
|
|
|
102
104
|
*/
|
|
103
105
|
userAgent?: string;
|
|
104
106
|
userDataDir?: string;
|
|
107
|
+
/**
|
|
108
|
+
* @default "launch"
|
|
109
|
+
*/
|
|
110
|
+
launchMethod?: BrowserLaunchMethod;
|
|
105
111
|
}
|
|
106
112
|
interface LsdConnectOptions extends BrowserOptions {
|
|
107
113
|
/**
|
|
@@ -927,7 +933,7 @@ interface LsdBrowserContext extends EventEmitter {
|
|
|
927
933
|
* * refer to getPage()
|
|
928
934
|
* @param pageNum default 1, the number of free pages
|
|
929
935
|
*/
|
|
930
|
-
|
|
936
|
+
hasFreePage(pageNum?: number): boolean;
|
|
931
937
|
id(): string;
|
|
932
938
|
isIncognito(): boolean;
|
|
933
939
|
page(pageIdx: number): LsdPage | null;
|
|
@@ -962,6 +968,18 @@ interface LsdBrowser extends EventEmitter {
|
|
|
962
968
|
isConnected(): boolean;
|
|
963
969
|
isHeadless(): boolean;
|
|
964
970
|
options(): LsdLaunchOptions | LsdConnectOptions;
|
|
971
|
+
/**
|
|
972
|
+
* * puppeteer: return pid of connected or launched browser
|
|
973
|
+
* * playwright: return pid of connected browser that is launched manually or using launchServer, or else return 0
|
|
974
|
+
*/
|
|
975
|
+
pid(): number;
|
|
976
|
+
/**
|
|
977
|
+
* get the cpu utility(%) and memory usage(MB) of browser processes if pid is greater than 0 (refer to pid())
|
|
978
|
+
*/
|
|
979
|
+
pidUsage(): Promise<{
|
|
980
|
+
cpu: number;
|
|
981
|
+
memory: number;
|
|
982
|
+
}>;
|
|
965
983
|
version(): Promise<string>;
|
|
966
984
|
_origBrowser(): AllBrowser;
|
|
967
985
|
}
|
|
@@ -1025,7 +1043,7 @@ interface BrowserManager {
|
|
|
1025
1043
|
|
|
1026
1044
|
declare class PlaywrightBrowser extends EventEmitter implements LsdBrowser {
|
|
1027
1045
|
#private;
|
|
1028
|
-
constructor(browser: Browser, browerType: LsdBrowserType, browserCreateMethod: BrowserCreationMethod, options: LsdLaunchOptions | LsdConnectOptions, browserIdx?: number);
|
|
1046
|
+
constructor(browser: Browser, browerType: LsdBrowserType, browserCreateMethod: BrowserCreationMethod, options: LsdLaunchOptions | LsdConnectOptions, browserIdx?: number, pid?: number);
|
|
1029
1047
|
newBrowserContext(options?: LsdBrowserContextOptions): Promise<LsdBrowserContext | null>;
|
|
1030
1048
|
close(): Promise<boolean>;
|
|
1031
1049
|
browserContexts(): LsdBrowserContext[];
|
|
@@ -1037,6 +1055,11 @@ declare class PlaywrightBrowser extends EventEmitter implements LsdBrowser {
|
|
|
1037
1055
|
isConnected(): boolean;
|
|
1038
1056
|
isHeadless(): boolean;
|
|
1039
1057
|
options(): LsdLaunchOptions | LsdConnectOptions;
|
|
1058
|
+
pid(): number;
|
|
1059
|
+
pidUsage(): Promise<{
|
|
1060
|
+
cpu: number;
|
|
1061
|
+
memory: number;
|
|
1062
|
+
}>;
|
|
1040
1063
|
version(): Promise<string>;
|
|
1041
1064
|
_origBrowser(): AllBrowser;
|
|
1042
1065
|
}
|
|
@@ -1048,7 +1071,7 @@ declare class PlaywrightBrowserContext extends EventEmitter implements LsdBrowse
|
|
|
1048
1071
|
close(): Promise<boolean>;
|
|
1049
1072
|
closeFreePages(maxPageFreeSeconds?: number): Promise<boolean>;
|
|
1050
1073
|
getPage(always?: boolean): Promise<LsdPage | null>;
|
|
1051
|
-
|
|
1074
|
+
hasFreePage(pageNum?: number): boolean;
|
|
1052
1075
|
id(): string;
|
|
1053
1076
|
isIncognito(): boolean;
|
|
1054
1077
|
page(pageIdx: number): LsdPage | null;
|
|
@@ -1136,7 +1159,7 @@ declare class PlaywrightElement implements LsdElement {
|
|
|
1136
1159
|
|
|
1137
1160
|
declare class PuppeteerBrowser extends EventEmitter implements LsdBrowser {
|
|
1138
1161
|
#private;
|
|
1139
|
-
constructor(browser: Browser$1, browerType: LsdBrowserType, browserCreateMethod: BrowserCreationMethod, options: LsdLaunchOptions | LsdConnectOptions, browserIdx?: number);
|
|
1162
|
+
constructor(browser: Browser$1, browerType: LsdBrowserType, browserCreateMethod: BrowserCreationMethod, options: LsdLaunchOptions | LsdConnectOptions, browserIdx?: number, pid?: number);
|
|
1140
1163
|
newBrowserContext(options?: LsdBrowserContextOptions | undefined): Promise<LsdBrowserContext | null>;
|
|
1141
1164
|
close(): Promise<boolean>;
|
|
1142
1165
|
browserContexts(): LsdBrowserContext[];
|
|
@@ -1148,6 +1171,11 @@ declare class PuppeteerBrowser extends EventEmitter implements LsdBrowser {
|
|
|
1148
1171
|
isConnected(): boolean;
|
|
1149
1172
|
isHeadless(): boolean;
|
|
1150
1173
|
options(): LsdLaunchOptions | LsdConnectOptions;
|
|
1174
|
+
pid(): number;
|
|
1175
|
+
pidUsage(): Promise<{
|
|
1176
|
+
cpu: number;
|
|
1177
|
+
memory: number;
|
|
1178
|
+
}>;
|
|
1151
1179
|
version(): Promise<string>;
|
|
1152
1180
|
_origBrowser(): AllBrowser;
|
|
1153
1181
|
}
|
|
@@ -1159,7 +1187,7 @@ declare class PuppeteerBrowserContext extends EventEmitter implements LsdBrowser
|
|
|
1159
1187
|
close(): Promise<boolean>;
|
|
1160
1188
|
closeFreePages(maxPageFreeSeconds?: number): Promise<boolean>;
|
|
1161
1189
|
getPage(always?: boolean): Promise<LsdPage | null>;
|
|
1162
|
-
|
|
1190
|
+
hasFreePage(pageNum?: number): boolean;
|
|
1163
1191
|
id(): string;
|
|
1164
1192
|
isIncognito(): boolean;
|
|
1165
1193
|
page(pageIdx: number): LsdPage | null;
|
|
@@ -1336,4 +1364,4 @@ declare class LsdBrowserController implements LsdBrowserController$1 {
|
|
|
1336
1364
|
}
|
|
1337
1365
|
declare const controller: LsdBrowserController;
|
|
1338
1366
|
|
|
1339
|
-
export { type AllApiRequestContext, type AllBrowser, type AllBrowserContext, type AllFrame, type AllPage, type AllResponse, type
|
|
1367
|
+
export { type AllApiRequestContext, type AllBrowser, type AllBrowserContext, type AllFrame, type AllPage, type AllResponse, type BrowserControllerType, type BrowserCreationMethod, type BrowserLaunchMethod, type BrowserManager, type BrowserStateData, CheerioElement, type CheerioNode, CheerioPage, type CookieItem, type GotoOptions, type IframeOption, type InputOptions, type KeyInput, type KeyPressOptions, type LocalStorageItem, type LocalStorageOrigin, type LowerCasePaperFormat, type LsdBrowser, type LsdBrowserContext, type LsdBrowserContextOptions, type LsdBrowserController$1 as LsdBrowserController, type LsdBrowserType, type LsdConnectOptions, type LsdElement, type LsdLaunchOptions, type LsdPage, type MouseClickOptions, type MouseClickType, type NavigationWaitUntil, type PDFMargin, type PDFOptions, type PageEvent, type PageExtInPlaywright, type PageExtInPuppeteer, type PageInfo, type PageOpenType, type PageStatus, type PaperFormat, PlaywrightBrowser, PlaywrightBrowserContext, type PlaywrightBrowserTypes, PlaywrightElement, PlaywrightPage, type ProxyInController, PuppeteerBrowser, PuppeteerBrowserContext, PuppeteerElement, PuppeteerPage, type RequestInterceptionAction, type RequestInterceptionOption, type RequestMatch, type RequestMethod, type RequestResourceType, type ResponseHandler, type ResponseHandlerOptions, type ResponseInterceptionItem, type ResponseInterceptionOption, type ResponseMatch, type ResponsePageData, type ScreenshotOptions, type SelectOptions, type UpdatablePageInfo, type ViewportSize, type WaitElementOptions, type WaitElementState, type WaitNavigationOptions, controller };
|
package/dist/index.d.ts
CHANGED
|
@@ -31,9 +31,6 @@ interface PlaywrightBrowserTypes {
|
|
|
31
31
|
firefox: BrowserType;
|
|
32
32
|
webkit: BrowserType;
|
|
33
33
|
}
|
|
34
|
-
type BrowserControllerOptions = {
|
|
35
|
-
browserControllerType: BrowserControllerType;
|
|
36
|
-
};
|
|
37
34
|
interface BrowserOptions {
|
|
38
35
|
/**
|
|
39
36
|
* Interval between closing free pages (seconds) if greater than 0
|
|
@@ -71,6 +68,11 @@ interface BrowserOptions {
|
|
|
71
68
|
*/
|
|
72
69
|
timeout?: number;
|
|
73
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* * puppeteer: launchServer is the same as launch
|
|
73
|
+
* * playwright: use "launchServer" if it's necessary to call LsdBrowser.pid()/pidUsage()
|
|
74
|
+
*/
|
|
75
|
+
type BrowserLaunchMethod = "launch" | "launchServer";
|
|
74
76
|
interface LsdLaunchOptions extends BrowserOptions {
|
|
75
77
|
args?: string[];
|
|
76
78
|
executablePath?: string;
|
|
@@ -102,6 +104,10 @@ interface LsdLaunchOptions extends BrowserOptions {
|
|
|
102
104
|
*/
|
|
103
105
|
userAgent?: string;
|
|
104
106
|
userDataDir?: string;
|
|
107
|
+
/**
|
|
108
|
+
* @default "launch"
|
|
109
|
+
*/
|
|
110
|
+
launchMethod?: BrowserLaunchMethod;
|
|
105
111
|
}
|
|
106
112
|
interface LsdConnectOptions extends BrowserOptions {
|
|
107
113
|
/**
|
|
@@ -927,7 +933,7 @@ interface LsdBrowserContext extends EventEmitter {
|
|
|
927
933
|
* * refer to getPage()
|
|
928
934
|
* @param pageNum default 1, the number of free pages
|
|
929
935
|
*/
|
|
930
|
-
|
|
936
|
+
hasFreePage(pageNum?: number): boolean;
|
|
931
937
|
id(): string;
|
|
932
938
|
isIncognito(): boolean;
|
|
933
939
|
page(pageIdx: number): LsdPage | null;
|
|
@@ -962,6 +968,18 @@ interface LsdBrowser extends EventEmitter {
|
|
|
962
968
|
isConnected(): boolean;
|
|
963
969
|
isHeadless(): boolean;
|
|
964
970
|
options(): LsdLaunchOptions | LsdConnectOptions;
|
|
971
|
+
/**
|
|
972
|
+
* * puppeteer: return pid of connected or launched browser
|
|
973
|
+
* * playwright: return pid of connected browser that is launched manually or using launchServer, or else return 0
|
|
974
|
+
*/
|
|
975
|
+
pid(): number;
|
|
976
|
+
/**
|
|
977
|
+
* get the cpu utility(%) and memory usage(MB) of browser processes if pid is greater than 0 (refer to pid())
|
|
978
|
+
*/
|
|
979
|
+
pidUsage(): Promise<{
|
|
980
|
+
cpu: number;
|
|
981
|
+
memory: number;
|
|
982
|
+
}>;
|
|
965
983
|
version(): Promise<string>;
|
|
966
984
|
_origBrowser(): AllBrowser;
|
|
967
985
|
}
|
|
@@ -1025,7 +1043,7 @@ interface BrowserManager {
|
|
|
1025
1043
|
|
|
1026
1044
|
declare class PlaywrightBrowser extends EventEmitter implements LsdBrowser {
|
|
1027
1045
|
#private;
|
|
1028
|
-
constructor(browser: Browser, browerType: LsdBrowserType, browserCreateMethod: BrowserCreationMethod, options: LsdLaunchOptions | LsdConnectOptions, browserIdx?: number);
|
|
1046
|
+
constructor(browser: Browser, browerType: LsdBrowserType, browserCreateMethod: BrowserCreationMethod, options: LsdLaunchOptions | LsdConnectOptions, browserIdx?: number, pid?: number);
|
|
1029
1047
|
newBrowserContext(options?: LsdBrowserContextOptions): Promise<LsdBrowserContext | null>;
|
|
1030
1048
|
close(): Promise<boolean>;
|
|
1031
1049
|
browserContexts(): LsdBrowserContext[];
|
|
@@ -1037,6 +1055,11 @@ declare class PlaywrightBrowser extends EventEmitter implements LsdBrowser {
|
|
|
1037
1055
|
isConnected(): boolean;
|
|
1038
1056
|
isHeadless(): boolean;
|
|
1039
1057
|
options(): LsdLaunchOptions | LsdConnectOptions;
|
|
1058
|
+
pid(): number;
|
|
1059
|
+
pidUsage(): Promise<{
|
|
1060
|
+
cpu: number;
|
|
1061
|
+
memory: number;
|
|
1062
|
+
}>;
|
|
1040
1063
|
version(): Promise<string>;
|
|
1041
1064
|
_origBrowser(): AllBrowser;
|
|
1042
1065
|
}
|
|
@@ -1048,7 +1071,7 @@ declare class PlaywrightBrowserContext extends EventEmitter implements LsdBrowse
|
|
|
1048
1071
|
close(): Promise<boolean>;
|
|
1049
1072
|
closeFreePages(maxPageFreeSeconds?: number): Promise<boolean>;
|
|
1050
1073
|
getPage(always?: boolean): Promise<LsdPage | null>;
|
|
1051
|
-
|
|
1074
|
+
hasFreePage(pageNum?: number): boolean;
|
|
1052
1075
|
id(): string;
|
|
1053
1076
|
isIncognito(): boolean;
|
|
1054
1077
|
page(pageIdx: number): LsdPage | null;
|
|
@@ -1136,7 +1159,7 @@ declare class PlaywrightElement implements LsdElement {
|
|
|
1136
1159
|
|
|
1137
1160
|
declare class PuppeteerBrowser extends EventEmitter implements LsdBrowser {
|
|
1138
1161
|
#private;
|
|
1139
|
-
constructor(browser: Browser$1, browerType: LsdBrowserType, browserCreateMethod: BrowserCreationMethod, options: LsdLaunchOptions | LsdConnectOptions, browserIdx?: number);
|
|
1162
|
+
constructor(browser: Browser$1, browerType: LsdBrowserType, browserCreateMethod: BrowserCreationMethod, options: LsdLaunchOptions | LsdConnectOptions, browserIdx?: number, pid?: number);
|
|
1140
1163
|
newBrowserContext(options?: LsdBrowserContextOptions | undefined): Promise<LsdBrowserContext | null>;
|
|
1141
1164
|
close(): Promise<boolean>;
|
|
1142
1165
|
browserContexts(): LsdBrowserContext[];
|
|
@@ -1148,6 +1171,11 @@ declare class PuppeteerBrowser extends EventEmitter implements LsdBrowser {
|
|
|
1148
1171
|
isConnected(): boolean;
|
|
1149
1172
|
isHeadless(): boolean;
|
|
1150
1173
|
options(): LsdLaunchOptions | LsdConnectOptions;
|
|
1174
|
+
pid(): number;
|
|
1175
|
+
pidUsage(): Promise<{
|
|
1176
|
+
cpu: number;
|
|
1177
|
+
memory: number;
|
|
1178
|
+
}>;
|
|
1151
1179
|
version(): Promise<string>;
|
|
1152
1180
|
_origBrowser(): AllBrowser;
|
|
1153
1181
|
}
|
|
@@ -1159,7 +1187,7 @@ declare class PuppeteerBrowserContext extends EventEmitter implements LsdBrowser
|
|
|
1159
1187
|
close(): Promise<boolean>;
|
|
1160
1188
|
closeFreePages(maxPageFreeSeconds?: number): Promise<boolean>;
|
|
1161
1189
|
getPage(always?: boolean): Promise<LsdPage | null>;
|
|
1162
|
-
|
|
1190
|
+
hasFreePage(pageNum?: number): boolean;
|
|
1163
1191
|
id(): string;
|
|
1164
1192
|
isIncognito(): boolean;
|
|
1165
1193
|
page(pageIdx: number): LsdPage | null;
|
|
@@ -1336,4 +1364,4 @@ declare class LsdBrowserController implements LsdBrowserController$1 {
|
|
|
1336
1364
|
}
|
|
1337
1365
|
declare const controller: LsdBrowserController;
|
|
1338
1366
|
|
|
1339
|
-
export { type AllApiRequestContext, type AllBrowser, type AllBrowserContext, type AllFrame, type AllPage, type AllResponse, type
|
|
1367
|
+
export { type AllApiRequestContext, type AllBrowser, type AllBrowserContext, type AllFrame, type AllPage, type AllResponse, type BrowserControllerType, type BrowserCreationMethod, type BrowserLaunchMethod, type BrowserManager, type BrowserStateData, CheerioElement, type CheerioNode, CheerioPage, type CookieItem, type GotoOptions, type IframeOption, type InputOptions, type KeyInput, type KeyPressOptions, type LocalStorageItem, type LocalStorageOrigin, type LowerCasePaperFormat, type LsdBrowser, type LsdBrowserContext, type LsdBrowserContextOptions, type LsdBrowserController$1 as LsdBrowserController, type LsdBrowserType, type LsdConnectOptions, type LsdElement, type LsdLaunchOptions, type LsdPage, type MouseClickOptions, type MouseClickType, type NavigationWaitUntil, type PDFMargin, type PDFOptions, type PageEvent, type PageExtInPlaywright, type PageExtInPuppeteer, type PageInfo, type PageOpenType, type PageStatus, type PaperFormat, PlaywrightBrowser, PlaywrightBrowserContext, type PlaywrightBrowserTypes, PlaywrightElement, PlaywrightPage, type ProxyInController, PuppeteerBrowser, PuppeteerBrowserContext, PuppeteerElement, PuppeteerPage, type RequestInterceptionAction, type RequestInterceptionOption, type RequestMatch, type RequestMethod, type RequestResourceType, type ResponseHandler, type ResponseHandlerOptions, type ResponseInterceptionItem, type ResponseInterceptionOption, type ResponseMatch, type ResponsePageData, type ScreenshotOptions, type SelectOptions, type UpdatablePageInfo, type ViewportSize, type WaitElementOptions, type WaitElementState, type WaitNavigationOptions, controller };
|
package/dist/index.js
CHANGED
|
@@ -1356,10 +1356,10 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1356
1356
|
return null;
|
|
1357
1357
|
}
|
|
1358
1358
|
}
|
|
1359
|
-
|
|
1359
|
+
hasFreePage(pageNum = 1) {
|
|
1360
1360
|
if (this.#maxPagesPerBrowserContext - this.#lsdPages.length > pageNum) {
|
|
1361
1361
|
return true;
|
|
1362
|
-
} else if (this.#maxPagesPerBrowserContext - this.#lsdPages.filter((p) => p.isFree()).length > pageNum) {
|
|
1362
|
+
} else if (this.#maxPagesPerBrowserContext - this.#lsdPages.filter((p) => !p.isFree()).length > pageNum) {
|
|
1363
1363
|
return true;
|
|
1364
1364
|
} else {
|
|
1365
1365
|
return false;
|
|
@@ -1423,10 +1423,11 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1423
1423
|
};
|
|
1424
1424
|
|
|
1425
1425
|
// src/playwright/browser.ts
|
|
1426
|
-
import { logerr as logerr3, loginfo as loginfo4, logwarn as logwarn3 } from "@letsscrapedata/utils";
|
|
1426
|
+
import { getPerformanceOfPidTree, logerr as logerr3, loginfo as loginfo4, logwarn as logwarn3 } from "@letsscrapedata/utils";
|
|
1427
1427
|
var PlaywrightBrowser = class extends EventEmitter3 {
|
|
1428
1428
|
#browser;
|
|
1429
1429
|
#browserIdx;
|
|
1430
|
+
#pid;
|
|
1430
1431
|
#lsdBrowserContexts;
|
|
1431
1432
|
#browserControllerType;
|
|
1432
1433
|
#browserType;
|
|
@@ -1451,7 +1452,7 @@ var PlaywrightBrowser = class extends EventEmitter3 {
|
|
|
1451
1452
|
return this.#options.maxPageFreeSeconds ? this.#options.maxPageFreeSeconds : 900;
|
|
1452
1453
|
}
|
|
1453
1454
|
// 构造函数:缺省只能由LsdBrowserController.launch/connect调用创建实例!!!
|
|
1454
|
-
constructor(browser, browerType, browserCreateMethod, options, browserIdx = 0) {
|
|
1455
|
+
constructor(browser, browerType, browserCreateMethod, options, browserIdx = 0, pid = 0) {
|
|
1455
1456
|
if (!browser || typeof browser.contexts !== "function") {
|
|
1456
1457
|
throw new Error(`Invalid playwright browser parameter`);
|
|
1457
1458
|
}
|
|
@@ -1459,6 +1460,7 @@ var PlaywrightBrowser = class extends EventEmitter3 {
|
|
|
1459
1460
|
const { closeFreePagesIntervalSeconds = 300, maxPageFreeSeconds = 900, maxViewportOfNewPage = true, headless = false, executablePath = "" } = options;
|
|
1460
1461
|
this.#browser = browser;
|
|
1461
1462
|
this.#browserIdx = browserIdx;
|
|
1463
|
+
this.#pid = pid;
|
|
1462
1464
|
this.#lsdBrowserContexts = [];
|
|
1463
1465
|
this.#browserControllerType = "playwright";
|
|
1464
1466
|
this.#browserType = browerType;
|
|
@@ -1578,6 +1580,17 @@ var PlaywrightBrowser = class extends EventEmitter3 {
|
|
|
1578
1580
|
options() {
|
|
1579
1581
|
return this.#options;
|
|
1580
1582
|
}
|
|
1583
|
+
pid() {
|
|
1584
|
+
return this.#pid;
|
|
1585
|
+
}
|
|
1586
|
+
async pidUsage() {
|
|
1587
|
+
if (this.#pid > 0) {
|
|
1588
|
+
const usage = await getPerformanceOfPidTree(this.#pid, "MB");
|
|
1589
|
+
return usage;
|
|
1590
|
+
} else {
|
|
1591
|
+
return { cpu: 0, memory: 0 };
|
|
1592
|
+
}
|
|
1593
|
+
}
|
|
1581
1594
|
async version() {
|
|
1582
1595
|
const version = await this.#browser.version();
|
|
1583
1596
|
return version;
|
|
@@ -2863,10 +2876,10 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2863
2876
|
return null;
|
|
2864
2877
|
}
|
|
2865
2878
|
}
|
|
2866
|
-
|
|
2879
|
+
hasFreePage(pageNum = 1) {
|
|
2867
2880
|
if (this.#maxPagesPerBrowserContext - this.#lsdPages.length > pageNum) {
|
|
2868
2881
|
return true;
|
|
2869
|
-
} else if (this.#maxPagesPerBrowserContext - this.#lsdPages.filter((p) => p.isFree()).length > pageNum) {
|
|
2882
|
+
} else if (this.#maxPagesPerBrowserContext - this.#lsdPages.filter((p) => !p.isFree()).length > pageNum) {
|
|
2870
2883
|
return true;
|
|
2871
2884
|
} else {
|
|
2872
2885
|
return false;
|
|
@@ -2930,10 +2943,11 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2930
2943
|
};
|
|
2931
2944
|
|
|
2932
2945
|
// src/puppeteer/browser.ts
|
|
2933
|
-
import { logerr as logerr7, loginfo as loginfo7, logwarn as logwarn5 } from "@letsscrapedata/utils";
|
|
2946
|
+
import { getPerformanceOfPidTree as getPerformanceOfPidTree2, logerr as logerr7, loginfo as loginfo7, logwarn as logwarn5 } from "@letsscrapedata/utils";
|
|
2934
2947
|
var PuppeteerBrowser = class extends EventEmitter6 {
|
|
2935
2948
|
#browser;
|
|
2936
2949
|
#browserIdx;
|
|
2950
|
+
#pid;
|
|
2937
2951
|
#lsdBrowserContexts;
|
|
2938
2952
|
#browserControllerType;
|
|
2939
2953
|
#browserType;
|
|
@@ -2961,7 +2975,7 @@ var PuppeteerBrowser = class extends EventEmitter6 {
|
|
|
2961
2975
|
return this.#options.userAgent ? this.#options.userAgent : "";
|
|
2962
2976
|
}
|
|
2963
2977
|
// 构造函数:缺省只能由LsdBrowserController.launch/connect调用创建实例!!!
|
|
2964
|
-
constructor(browser, browerType, browserCreateMethod, options, browserIdx = 0) {
|
|
2978
|
+
constructor(browser, browerType, browserCreateMethod, options, browserIdx = 0, pid = 0) {
|
|
2965
2979
|
if (!browser || typeof browser.browserContexts !== "function") {
|
|
2966
2980
|
throw new Error(`Invalid puppeteer browser parameter`);
|
|
2967
2981
|
}
|
|
@@ -2969,6 +2983,7 @@ var PuppeteerBrowser = class extends EventEmitter6 {
|
|
|
2969
2983
|
const { closeFreePagesIntervalSeconds = 300, maxPageFreeSeconds = 900, maxViewportOfNewPage = true, headless = false, executablePath = "" } = options;
|
|
2970
2984
|
this.#browser = browser;
|
|
2971
2985
|
this.#browserIdx = browserIdx;
|
|
2986
|
+
this.#pid = pid;
|
|
2972
2987
|
this.#lsdBrowserContexts = [];
|
|
2973
2988
|
this.#browserControllerType = "puppeteer";
|
|
2974
2989
|
this.#browserType = browerType;
|
|
@@ -3081,6 +3096,17 @@ var PuppeteerBrowser = class extends EventEmitter6 {
|
|
|
3081
3096
|
options() {
|
|
3082
3097
|
return this.#options;
|
|
3083
3098
|
}
|
|
3099
|
+
pid() {
|
|
3100
|
+
return this.#pid;
|
|
3101
|
+
}
|
|
3102
|
+
async pidUsage() {
|
|
3103
|
+
if (this.#pid > 0) {
|
|
3104
|
+
const usage = await getPerformanceOfPidTree2(this.#pid, "MB");
|
|
3105
|
+
return usage;
|
|
3106
|
+
} else {
|
|
3107
|
+
return { cpu: 0, memory: 0 };
|
|
3108
|
+
}
|
|
3109
|
+
}
|
|
3084
3110
|
async version() {
|
|
3085
3111
|
const version = await this.#browser.version();
|
|
3086
3112
|
return version;
|
|
@@ -17264,7 +17290,7 @@ var CheerioPage = class extends EventEmitter7 {
|
|
|
17264
17290
|
import os from "os";
|
|
17265
17291
|
import puppeteer from "puppeteer";
|
|
17266
17292
|
import playwright, { request as apiRequest } from "playwright";
|
|
17267
|
-
import { logwarn as logwarn6, unreachable as unreachable5 } from "@letsscrapedata/utils";
|
|
17293
|
+
import { getPidsListeningOnPort, logerr as logerr8, logwarn as logwarn6, unreachable as unreachable5 } from "@letsscrapedata/utils";
|
|
17268
17294
|
import puppeteerExtra from "puppeteer-extra";
|
|
17269
17295
|
import * as playwrightExtra from "playwright-extra";
|
|
17270
17296
|
import StealthPlugin from "puppeteer-extra-plugin-stealth";
|
|
@@ -17363,6 +17389,7 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
17363
17389
|
userDataDir = "",
|
|
17364
17390
|
userAgent = ""
|
|
17365
17391
|
} = options ? options : {};
|
|
17392
|
+
let browserPid = 0;
|
|
17366
17393
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : browserControllerType === "puppeteer" ? false : true;
|
|
17367
17394
|
const actOptions = { closeFreePagesIntervalSeconds, maxBrowserContextsPerBrowser, maxPagesPerBrowserContext, maxPageFreeSeconds, maxViewportOfNewPage, proxy, timeout, args, executablePath, maxWindowSize, headless, minBrowserContexts, incognito, proxyPerBrowserContext, userDataDir, userAgent };
|
|
17368
17395
|
let idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--incoginto"));
|
|
@@ -17414,8 +17441,19 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
17414
17441
|
if (!actOptions.executablePath) {
|
|
17415
17442
|
actOptions.executablePath = playwrightBrowserType.executablePath();
|
|
17416
17443
|
}
|
|
17417
|
-
|
|
17418
|
-
|
|
17444
|
+
if (options.launchMethod === "launchServer") {
|
|
17445
|
+
const browserServer = await playwrightBrowserType.launchServer(launchOptions);
|
|
17446
|
+
const process = browserServer.process();
|
|
17447
|
+
if (process?.pid) {
|
|
17448
|
+
browserPid = process.pid;
|
|
17449
|
+
}
|
|
17450
|
+
const wsEndpoint = browserServer.wsEndpoint();
|
|
17451
|
+
const browser = await playwrightBrowserType.connect(wsEndpoint);
|
|
17452
|
+
lsdBrowser = new PlaywrightBrowser(browser, browserType, "launch", actOptions, this.#nextBrowserIdx++, browserPid);
|
|
17453
|
+
} else {
|
|
17454
|
+
const browser = await playwrightBrowserType.launch(launchOptions);
|
|
17455
|
+
lsdBrowser = new PlaywrightBrowser(browser, browserType, "launch", actOptions, this.#nextBrowserIdx++, browserPid);
|
|
17456
|
+
}
|
|
17419
17457
|
} else if (browserControllerType === "puppeteer") {
|
|
17420
17458
|
const product = this.#puppeteerProduct(browserType);
|
|
17421
17459
|
const launchOptions = { headless, timeout, product };
|
|
@@ -17448,7 +17486,11 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
17448
17486
|
actOptions.executablePath = this.#puppeteer.executablePath();
|
|
17449
17487
|
}
|
|
17450
17488
|
const browser = await this.#puppeteer.launch(launchOptions);
|
|
17451
|
-
|
|
17489
|
+
const browserProcess = browser.process();
|
|
17490
|
+
if (browserProcess?.pid) {
|
|
17491
|
+
browserPid = browserProcess.pid;
|
|
17492
|
+
}
|
|
17493
|
+
lsdBrowser = new PuppeteerBrowser(browser, browserType, "launch", actOptions, this.#nextBrowserIdx++, browserPid);
|
|
17452
17494
|
} else {
|
|
17453
17495
|
throw new Error(`Invalid browserControllerType: ${browserControllerType} in launch`);
|
|
17454
17496
|
}
|
|
@@ -17475,16 +17517,25 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
17475
17517
|
if (typeof browserUrl !== "string" || !browserUrl.toLowerCase().startsWith("http://")) {
|
|
17476
17518
|
throw new Error(`Invalid browserUrl ${browserUrl} in connect`);
|
|
17477
17519
|
}
|
|
17520
|
+
const u = new URL(browserUrl);
|
|
17521
|
+
const port = u.port ? parseInt(u.port) : 80;
|
|
17522
|
+
const pids = await getPidsListeningOnPort(port);
|
|
17523
|
+
let browserPid = 0;
|
|
17524
|
+
if (pids.length !== 1) {
|
|
17525
|
+
logerr8(`##browser pids.length ${pids.length} is not 1 when trying to connect to browserUrl ${browserUrl}`);
|
|
17526
|
+
} else {
|
|
17527
|
+
browserPid = pids[0];
|
|
17528
|
+
}
|
|
17478
17529
|
const actOptions = { closeFreePagesIntervalSeconds, maxBrowserContextsPerBrowser, maxPagesPerBrowserContext, maxPageFreeSeconds, maxViewportOfNewPage, proxy, timeout, browserUrl, executablePath, headless, incognito, userAgent };
|
|
17479
17530
|
if (browserControllerType === "playwright") {
|
|
17480
17531
|
const playwrightBrowserType = this.#playwrightBrowserType(browserType, true);
|
|
17481
17532
|
const browser = await playwrightBrowserType.connectOverCDP(browserUrl);
|
|
17482
|
-
const lsdBrowser = new PlaywrightBrowser(browser, browserType, "connect", actOptions, this.#nextBrowserIdx
|
|
17533
|
+
const lsdBrowser = new PlaywrightBrowser(browser, browserType, "connect", actOptions, this.#nextBrowserIdx++, browserPid);
|
|
17483
17534
|
return lsdBrowser;
|
|
17484
17535
|
} else if (browserControllerType === "puppeteer") {
|
|
17485
17536
|
this.#puppeteerProduct(browserType);
|
|
17486
17537
|
const browser = await this.#puppeteer.connect({ browserURL: browserUrl });
|
|
17487
|
-
const lsdBrowser = new PuppeteerBrowser(browser, browserType, "connect", options, this.#nextBrowserIdx
|
|
17538
|
+
const lsdBrowser = new PuppeteerBrowser(browser, browserType, "connect", options, this.#nextBrowserIdx++, browserPid);
|
|
17488
17539
|
;
|
|
17489
17540
|
return lsdBrowser;
|
|
17490
17541
|
} else {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@letsscrapedata/controller",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.37",
|
|
4
4
|
"description": "Unified browser / HTML controller interfaces that support playwright, puppeteer and cheerio",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.mjs",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"license": "Apache-2.0",
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@letsscrapedata/utils": "^0.0.
|
|
37
|
+
"@letsscrapedata/utils": "^0.0.12",
|
|
38
38
|
"playwright": "^1.43.0",
|
|
39
39
|
"playwright-extra": "^4.3.6",
|
|
40
40
|
"puppeteer": "^22.6.3",
|