@letsscrapedata/controller 0.0.49 → 0.0.51
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 +141 -118
- package/dist/index.d.cts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +93 -71
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import EventEmitter from 'node:events';
|
|
2
2
|
import { Browser as Browser$1, BrowserContext as BrowserContext$1, Frame as Frame$1, Page as Page$1, ElementHandle, HTTPResponse, PuppeteerNode } from 'puppeteer';
|
|
3
3
|
import { Browser, BrowserContext, Frame, Page, Locator, Response, APIRequestContext, BrowserType, FrameLocator } from 'playwright';
|
|
4
|
+
import { LogFunction } from '@letsscrapedata/utils';
|
|
4
5
|
|
|
5
6
|
type AllBrowser = Browser | Browser$1;
|
|
6
7
|
type AllBrowserContext = BrowserContext | BrowserContext$1;
|
|
@@ -982,6 +983,11 @@ interface LsdBrowserContext extends EventEmitter {
|
|
|
982
983
|
*/
|
|
983
984
|
apiContext(): LsdApiContext;
|
|
984
985
|
browser(): LsdBrowser;
|
|
986
|
+
/**
|
|
987
|
+
* close this BrowserContext
|
|
988
|
+
* * For BrowserContext that cannot be closed directly, it is only marked as closed; it will be closed when browser is closed.
|
|
989
|
+
* * refer to " Error: Non-incognito profiles cannot be closed" in puppeteer
|
|
990
|
+
*/
|
|
985
991
|
close(): Promise<boolean>;
|
|
986
992
|
/**
|
|
987
993
|
* close pages that are free more than maxPageFreeSeconds if maxPageFreeSeconds > 0
|
|
@@ -1103,6 +1109,8 @@ interface LsdBrowserController$1 {
|
|
|
1103
1109
|
newApiContext(options?: LsdApiContextOptions): Promise<LsdApiContext>;
|
|
1104
1110
|
}
|
|
1105
1111
|
|
|
1112
|
+
declare function setControllerLogFun(logFun: LogFunction): boolean;
|
|
1113
|
+
|
|
1106
1114
|
declare class PlaywrightBrowser extends EventEmitter implements LsdBrowser {
|
|
1107
1115
|
#private;
|
|
1108
1116
|
constructor(browser: Browser, browerType: LsdBrowserType, browserCreateMethod: BrowserCreationMethod, options: LsdLaunchOptions | LsdConnectOptions, browserIdx?: number, pid?: number);
|
|
@@ -1452,4 +1460,4 @@ declare class LsdBrowserController implements LsdBrowserController$1 {
|
|
|
1452
1460
|
}
|
|
1453
1461
|
declare const controller: LsdBrowserController;
|
|
1454
1462
|
|
|
1455
|
-
export { type AllApiRequestContext, type AllBrowser, type AllBrowserContext, type AllElement, type AllFrame, type AllPage, type AllResponse, type BrowserContextCreationMethod, type BrowserContextRequirements, type BrowserContextStatus, type BrowserControllerType, type BrowserCreationMethod, type BrowserLaunchMethod, type BrowserStateData, CheerioElement, type CheerioNode, CheerioPage, type ClientCertificate, type CookieItem, type GotoOptions, type IframeOption, type InputOptions, type KeyInput, type KeyPressOptions, type LocalStorageItem, type LocalStorageOrigin, type LowerCasePaperFormat, type LsdApiContext, type LsdApiContextOptions, type LsdApiResponse, type LsdBrowser, type LsdBrowserContext, type LsdBrowserContextOptions, type LsdBrowserController$1 as LsdBrowserController, type LsdBrowserType, type LsdConnectOptions, type LsdElement, type LsdFetchOptions, 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 };
|
|
1463
|
+
export { type AllApiRequestContext, type AllBrowser, type AllBrowserContext, type AllElement, type AllFrame, type AllPage, type AllResponse, type BrowserContextCreationMethod, type BrowserContextRequirements, type BrowserContextStatus, type BrowserControllerType, type BrowserCreationMethod, type BrowserLaunchMethod, type BrowserStateData, CheerioElement, type CheerioNode, CheerioPage, type ClientCertificate, type CookieItem, type GotoOptions, type IframeOption, type InputOptions, type KeyInput, type KeyPressOptions, type LocalStorageItem, type LocalStorageOrigin, type LowerCasePaperFormat, type LsdApiContext, type LsdApiContextOptions, type LsdApiResponse, type LsdBrowser, type LsdBrowserContext, type LsdBrowserContextOptions, type LsdBrowserController$1 as LsdBrowserController, type LsdBrowserType, type LsdConnectOptions, type LsdElement, type LsdFetchOptions, 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, setControllerLogFun };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import EventEmitter from 'node:events';
|
|
2
2
|
import { Browser as Browser$1, BrowserContext as BrowserContext$1, Frame as Frame$1, Page as Page$1, ElementHandle, HTTPResponse, PuppeteerNode } from 'puppeteer';
|
|
3
3
|
import { Browser, BrowserContext, Frame, Page, Locator, Response, APIRequestContext, BrowserType, FrameLocator } from 'playwright';
|
|
4
|
+
import { LogFunction } from '@letsscrapedata/utils';
|
|
4
5
|
|
|
5
6
|
type AllBrowser = Browser | Browser$1;
|
|
6
7
|
type AllBrowserContext = BrowserContext | BrowserContext$1;
|
|
@@ -982,6 +983,11 @@ interface LsdBrowserContext extends EventEmitter {
|
|
|
982
983
|
*/
|
|
983
984
|
apiContext(): LsdApiContext;
|
|
984
985
|
browser(): LsdBrowser;
|
|
986
|
+
/**
|
|
987
|
+
* close this BrowserContext
|
|
988
|
+
* * For BrowserContext that cannot be closed directly, it is only marked as closed; it will be closed when browser is closed.
|
|
989
|
+
* * refer to " Error: Non-incognito profiles cannot be closed" in puppeteer
|
|
990
|
+
*/
|
|
985
991
|
close(): Promise<boolean>;
|
|
986
992
|
/**
|
|
987
993
|
* close pages that are free more than maxPageFreeSeconds if maxPageFreeSeconds > 0
|
|
@@ -1103,6 +1109,8 @@ interface LsdBrowserController$1 {
|
|
|
1103
1109
|
newApiContext(options?: LsdApiContextOptions): Promise<LsdApiContext>;
|
|
1104
1110
|
}
|
|
1105
1111
|
|
|
1112
|
+
declare function setControllerLogFun(logFun: LogFunction): boolean;
|
|
1113
|
+
|
|
1106
1114
|
declare class PlaywrightBrowser extends EventEmitter implements LsdBrowser {
|
|
1107
1115
|
#private;
|
|
1108
1116
|
constructor(browser: Browser, browerType: LsdBrowserType, browserCreateMethod: BrowserCreationMethod, options: LsdLaunchOptions | LsdConnectOptions, browserIdx?: number, pid?: number);
|
|
@@ -1452,4 +1460,4 @@ declare class LsdBrowserController implements LsdBrowserController$1 {
|
|
|
1452
1460
|
}
|
|
1453
1461
|
declare const controller: LsdBrowserController;
|
|
1454
1462
|
|
|
1455
|
-
export { type AllApiRequestContext, type AllBrowser, type AllBrowserContext, type AllElement, type AllFrame, type AllPage, type AllResponse, type BrowserContextCreationMethod, type BrowserContextRequirements, type BrowserContextStatus, type BrowserControllerType, type BrowserCreationMethod, type BrowserLaunchMethod, type BrowserStateData, CheerioElement, type CheerioNode, CheerioPage, type ClientCertificate, type CookieItem, type GotoOptions, type IframeOption, type InputOptions, type KeyInput, type KeyPressOptions, type LocalStorageItem, type LocalStorageOrigin, type LowerCasePaperFormat, type LsdApiContext, type LsdApiContextOptions, type LsdApiResponse, type LsdBrowser, type LsdBrowserContext, type LsdBrowserContextOptions, type LsdBrowserController$1 as LsdBrowserController, type LsdBrowserType, type LsdConnectOptions, type LsdElement, type LsdFetchOptions, 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 };
|
|
1463
|
+
export { type AllApiRequestContext, type AllBrowser, type AllBrowserContext, type AllElement, type AllFrame, type AllPage, type AllResponse, type BrowserContextCreationMethod, type BrowserContextRequirements, type BrowserContextStatus, type BrowserControllerType, type BrowserCreationMethod, type BrowserLaunchMethod, type BrowserStateData, CheerioElement, type CheerioNode, CheerioPage, type ClientCertificate, type CookieItem, type GotoOptions, type IframeOption, type InputOptions, type KeyInput, type KeyPressOptions, type LocalStorageItem, type LocalStorageOrigin, type LowerCasePaperFormat, type LsdApiContext, type LsdApiContextOptions, type LsdApiResponse, type LsdBrowser, type LsdBrowserContext, type LsdBrowserContextOptions, type LsdBrowserController$1 as LsdBrowserController, type LsdBrowserType, type LsdConnectOptions, type LsdElement, type LsdFetchOptions, 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, setControllerLogFun };
|
package/dist/index.js
CHANGED
|
@@ -1,16 +1,38 @@
|
|
|
1
|
+
// src/utils/log.ts
|
|
2
|
+
import { log, LogLevel } from "@letsscrapedata/utils";
|
|
3
|
+
var pkgLog = log;
|
|
4
|
+
function setControllerLogFun(logFun) {
|
|
5
|
+
if (typeof logFun === "function") {
|
|
6
|
+
pkgLog = logFun;
|
|
7
|
+
return true;
|
|
8
|
+
} else {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
async function loginfo(...args) {
|
|
13
|
+
await pkgLog(LogLevel.INF, ...args);
|
|
14
|
+
}
|
|
15
|
+
async function logwarn(...args) {
|
|
16
|
+
await pkgLog(LogLevel.WRN, ...args);
|
|
17
|
+
}
|
|
18
|
+
async function logerr(...args) {
|
|
19
|
+
await pkgLog(LogLevel.ERR, ...args);
|
|
20
|
+
}
|
|
21
|
+
|
|
1
22
|
// src/playwright/browser.ts
|
|
2
23
|
import EventEmitter3 from "events";
|
|
24
|
+
import { getCurrentUnixTime as getCurrentUnixTime3, getPerformanceOfPidTree } from "@letsscrapedata/utils";
|
|
3
25
|
|
|
4
26
|
// src/playwright/context.ts
|
|
5
27
|
import EventEmitter2 from "events";
|
|
6
|
-
import { getCurrentUnixTime as getCurrentUnixTime2,
|
|
28
|
+
import { getCurrentUnixTime as getCurrentUnixTime2, sleep } from "@letsscrapedata/utils";
|
|
7
29
|
|
|
8
30
|
// src/playwright/page.ts
|
|
9
31
|
import EventEmitter from "events";
|
|
10
|
-
import { getCurrentUnixTime,
|
|
32
|
+
import { getCurrentUnixTime, unreachable as unreachable2 } from "@letsscrapedata/utils";
|
|
11
33
|
|
|
12
34
|
// src/playwright/element.ts
|
|
13
|
-
import {
|
|
35
|
+
import { unreachable } from "@letsscrapedata/utils";
|
|
14
36
|
var PlaywrightElement = class _PlaywrightElement {
|
|
15
37
|
#frame;
|
|
16
38
|
#locator;
|
|
@@ -468,7 +490,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
468
490
|
retObj.locators = locators;
|
|
469
491
|
return retObj;
|
|
470
492
|
} catch (err) {
|
|
471
|
-
|
|
493
|
+
loginfo(err);
|
|
472
494
|
return retObj;
|
|
473
495
|
}
|
|
474
496
|
}
|
|
@@ -479,7 +501,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
479
501
|
const page = this.#page;
|
|
480
502
|
const pageId = this.#pageId;
|
|
481
503
|
page.on("close", async () => {
|
|
482
|
-
|
|
504
|
+
loginfo(`##browser ${pageId} closed`);
|
|
483
505
|
if (!page.pageInfo) {
|
|
484
506
|
logerr(`Logic error in page.on("close")`);
|
|
485
507
|
}
|
|
@@ -502,7 +524,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
502
524
|
} else {
|
|
503
525
|
logerr(`##browser ${pageId} has popup without page.pageInfo`);
|
|
504
526
|
}
|
|
505
|
-
|
|
527
|
+
loginfo(`##browser ${pageId} has popup ${popupPageId}`);
|
|
506
528
|
this.emit("pagePopup", evtData);
|
|
507
529
|
} else {
|
|
508
530
|
logerr(`##browser ${pageId} has popup page with null page`);
|
|
@@ -973,7 +995,7 @@ var PlaywrightPage = class extends EventEmitter {
|
|
|
973
995
|
requestData,
|
|
974
996
|
responseData
|
|
975
997
|
});
|
|
976
|
-
|
|
998
|
+
loginfo(`##browser cache matched response: ${requestUrl}`);
|
|
977
999
|
}
|
|
978
1000
|
if (typeof handler === "function") {
|
|
979
1001
|
const pageData = { pageUrl, cookies: "" };
|
|
@@ -1195,7 +1217,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1195
1217
|
await lsdPage.maximizeViewport();
|
|
1196
1218
|
}
|
|
1197
1219
|
this.#lsdPages.push(lsdPage);
|
|
1198
|
-
|
|
1220
|
+
loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
1199
1221
|
}
|
|
1200
1222
|
}
|
|
1201
1223
|
constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, maxViewportOfNewPage = true) {
|
|
@@ -1230,7 +1252,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1230
1252
|
const pageInfo = page.pageInfo;
|
|
1231
1253
|
if (pageInfo) {
|
|
1232
1254
|
const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
|
|
1233
|
-
|
|
1255
|
+
logwarn(`##browser page-${browserIdx2}-${browserContextIdx2}-${pageIdx} has been already created`);
|
|
1234
1256
|
} else {
|
|
1235
1257
|
const currentTime2 = getCurrentUnixTime2();
|
|
1236
1258
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
|
|
@@ -1239,23 +1261,23 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1239
1261
|
await lsdPage.maximizeViewport();
|
|
1240
1262
|
}
|
|
1241
1263
|
this.#lsdPages.push(lsdPage);
|
|
1242
|
-
|
|
1264
|
+
loginfo(`##page ${lsdPage.id()} created`);
|
|
1243
1265
|
}
|
|
1244
1266
|
});
|
|
1245
1267
|
browserContext.on("close", (bc) => {
|
|
1246
1268
|
if (browserContext !== bc) {
|
|
1247
|
-
|
|
1269
|
+
logerr(`##browser different browserContext in browserContext.on("close")`);
|
|
1248
1270
|
}
|
|
1249
1271
|
this.#lsdBrowser.emit("browserContextClose", this);
|
|
1250
1272
|
});
|
|
1251
1273
|
this.on("pageClose", (lsdPage) => {
|
|
1252
1274
|
if (!(lsdPage instanceof PlaywrightPage)) {
|
|
1253
|
-
|
|
1275
|
+
logerr(`Invalid data in LsdBrowserContext.on("pageClose)`);
|
|
1254
1276
|
return;
|
|
1255
1277
|
}
|
|
1256
1278
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
1257
1279
|
if (idx < 0) {
|
|
1258
|
-
|
|
1280
|
+
logerr(`Invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
1259
1281
|
return;
|
|
1260
1282
|
}
|
|
1261
1283
|
this.#lsdPages.splice(idx, 1);
|
|
@@ -1272,7 +1294,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1272
1294
|
if (this.#browserContext) {
|
|
1273
1295
|
this.#status = "closed";
|
|
1274
1296
|
this.#lastStatusUpdateTime = getCurrentUnixTime2();
|
|
1275
|
-
|
|
1297
|
+
loginfo(`browserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
|
|
1276
1298
|
await this.#browserContext.close();
|
|
1277
1299
|
}
|
|
1278
1300
|
return true;
|
|
@@ -1287,12 +1309,12 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1287
1309
|
await sleep(200);
|
|
1288
1310
|
}
|
|
1289
1311
|
}
|
|
1290
|
-
|
|
1312
|
+
logwarn(`Cannot get the gettingLock.`);
|
|
1291
1313
|
return false;
|
|
1292
1314
|
}
|
|
1293
1315
|
#freeGettingLock() {
|
|
1294
1316
|
if (!this.#gettingPage) {
|
|
1295
|
-
|
|
1317
|
+
logwarn(`Getting lock is already free now.`);
|
|
1296
1318
|
}
|
|
1297
1319
|
this.#gettingPage = false;
|
|
1298
1320
|
}
|
|
@@ -1301,7 +1323,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1301
1323
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
1302
1324
|
}
|
|
1303
1325
|
if (maxPageFreeSeconds <= 0) {
|
|
1304
|
-
|
|
1326
|
+
logwarn(`Please set valid maxPageFreeSeconds to close free pages`);
|
|
1305
1327
|
return false;
|
|
1306
1328
|
}
|
|
1307
1329
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -1320,7 +1342,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1320
1342
|
this.#freeGettingLock();
|
|
1321
1343
|
return true;
|
|
1322
1344
|
} catch (err) {
|
|
1323
|
-
|
|
1345
|
+
logerr(err);
|
|
1324
1346
|
this.#freeGettingLock();
|
|
1325
1347
|
return false;
|
|
1326
1348
|
}
|
|
@@ -1372,7 +1394,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1372
1394
|
return null;
|
|
1373
1395
|
}
|
|
1374
1396
|
} catch (err) {
|
|
1375
|
-
|
|
1397
|
+
logerr(err);
|
|
1376
1398
|
this.#freeGettingLock();
|
|
1377
1399
|
return null;
|
|
1378
1400
|
}
|
|
@@ -1454,7 +1476,7 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1454
1476
|
await page.free();
|
|
1455
1477
|
return true;
|
|
1456
1478
|
} catch (err) {
|
|
1457
|
-
|
|
1479
|
+
logerr(err);
|
|
1458
1480
|
return false;
|
|
1459
1481
|
}
|
|
1460
1482
|
}
|
|
@@ -1476,7 +1498,6 @@ var PlaywrightBrowserContext = class extends EventEmitter2 {
|
|
|
1476
1498
|
};
|
|
1477
1499
|
|
|
1478
1500
|
// src/playwright/browser.ts
|
|
1479
|
-
import { getCurrentUnixTime as getCurrentUnixTime3, getPerformanceOfPidTree, logerr as logerr3, loginfo as loginfo4, logwarn as logwarn3 } from "@letsscrapedata/utils";
|
|
1480
1501
|
var PlaywrightBrowser = class extends EventEmitter3 {
|
|
1481
1502
|
#browser;
|
|
1482
1503
|
#browserIdx;
|
|
@@ -1526,38 +1547,38 @@ var PlaywrightBrowser = class extends EventEmitter3 {
|
|
|
1526
1547
|
this.#executablePath = executablePath;
|
|
1527
1548
|
this.#nextBrowserContextIdx = 1;
|
|
1528
1549
|
this.#closeFreePagesIntervalId = null;
|
|
1529
|
-
|
|
1550
|
+
loginfo(`##browser ${this.id()} ${this.#browserCreationMethod}ed by ${this.#browserControllerType}`);
|
|
1530
1551
|
const browserContexts = browser.contexts();
|
|
1531
1552
|
if (browserContexts.length > 0) {
|
|
1532
|
-
|
|
1553
|
+
logwarn(`There are ${browserContexts.length} new browserContexts when playwright launches new browser`);
|
|
1533
1554
|
}
|
|
1534
1555
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : true;
|
|
1535
1556
|
for (const browserContext of browserContexts) {
|
|
1536
1557
|
const lsdBrowserContext = new PlaywrightBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
1537
1558
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
1538
|
-
|
|
1559
|
+
loginfo(`##browserContext ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
1539
1560
|
}
|
|
1540
1561
|
browser.on("disconnected", () => {
|
|
1541
|
-
|
|
1562
|
+
loginfo(`##browser ${this.id()} disconnected`);
|
|
1542
1563
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
1543
|
-
|
|
1564
|
+
logerr(`${this.id()} has browserContexts when disconnected`);
|
|
1544
1565
|
}
|
|
1545
1566
|
});
|
|
1546
1567
|
this.on("browserContextClose", (lsdBrowserContext) => {
|
|
1547
1568
|
if (!(lsdBrowserContext instanceof PlaywrightBrowserContext)) {
|
|
1548
|
-
|
|
1569
|
+
logerr(`Invalid data in LsdBrowser.on("browserContextClose)`);
|
|
1549
1570
|
return;
|
|
1550
1571
|
}
|
|
1551
1572
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
1552
1573
|
if (idx < 0) {
|
|
1553
|
-
|
|
1574
|
+
logerr(`Invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
1554
1575
|
return;
|
|
1555
1576
|
}
|
|
1556
|
-
|
|
1577
|
+
loginfo(`##browserContext ${lsdBrowserContext.id()} closed
|
|
1557
1578
|
`);
|
|
1558
1579
|
this.#lsdBrowserContexts.splice(idx, 1);
|
|
1559
1580
|
if (this.#lsdBrowserContexts.length === 0) {
|
|
1560
|
-
|
|
1581
|
+
loginfo(`##browser ${this.id()} has no browserContexts now`);
|
|
1561
1582
|
}
|
|
1562
1583
|
return;
|
|
1563
1584
|
});
|
|
@@ -1574,7 +1595,7 @@ var PlaywrightBrowser = class extends EventEmitter3 {
|
|
|
1574
1595
|
}
|
|
1575
1596
|
async newBrowserContext(options) {
|
|
1576
1597
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
1577
|
-
|
|
1598
|
+
logwarn(`##browser ${this.id()} can not create more new browserContext`);
|
|
1578
1599
|
return null;
|
|
1579
1600
|
}
|
|
1580
1601
|
const browserContextOptions = {};
|
|
@@ -1593,7 +1614,7 @@ var PlaywrightBrowser = class extends EventEmitter3 {
|
|
|
1593
1614
|
const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
|
|
1594
1615
|
const lsdBrowserContext = new PlaywrightBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), maxViewportOfNewPage);
|
|
1595
1616
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
1596
|
-
|
|
1617
|
+
loginfo(`##browser ${lsdBrowserContext.id()} created`);
|
|
1597
1618
|
return lsdBrowserContext;
|
|
1598
1619
|
}
|
|
1599
1620
|
async close() {
|
|
@@ -1665,15 +1686,18 @@ var PlaywrightBrowser = class extends EventEmitter3 {
|
|
|
1665
1686
|
|
|
1666
1687
|
// src/puppeteer/browser.ts
|
|
1667
1688
|
import EventEmitter6 from "events";
|
|
1689
|
+
import { getCurrentUnixTime as getCurrentUnixTime6, getPerformanceOfPidTree as getPerformanceOfPidTree2 } from "@letsscrapedata/utils";
|
|
1668
1690
|
|
|
1669
1691
|
// src/puppeteer/context.ts
|
|
1670
1692
|
import EventEmitter5 from "events";
|
|
1693
|
+
import { getCurrentUnixTime as getCurrentUnixTime5, sleep as sleep2 } from "@letsscrapedata/utils";
|
|
1671
1694
|
|
|
1672
1695
|
// src/puppeteer/page.ts
|
|
1673
1696
|
import EventEmitter4 from "events";
|
|
1697
|
+
import { getCurrentUnixTime as getCurrentUnixTime4, unreachable as unreachable4 } from "@letsscrapedata/utils";
|
|
1674
1698
|
|
|
1675
1699
|
// src/puppeteer/element.ts
|
|
1676
|
-
import {
|
|
1700
|
+
import { unreachable as unreachable3 } from "@letsscrapedata/utils";
|
|
1677
1701
|
var PuppeteerElement = class _PuppeteerElement {
|
|
1678
1702
|
#frame;
|
|
1679
1703
|
#$ele;
|
|
@@ -1762,7 +1786,7 @@ var PuppeteerElement = class _PuppeteerElement {
|
|
|
1762
1786
|
}
|
|
1763
1787
|
return retObj;
|
|
1764
1788
|
} catch (err) {
|
|
1765
|
-
|
|
1789
|
+
logerr(err);
|
|
1766
1790
|
return retObj;
|
|
1767
1791
|
}
|
|
1768
1792
|
}
|
|
@@ -1944,7 +1968,6 @@ var PuppeteerElement = class _PuppeteerElement {
|
|
|
1944
1968
|
};
|
|
1945
1969
|
|
|
1946
1970
|
// src/puppeteer/page.ts
|
|
1947
|
-
import { getCurrentUnixTime as getCurrentUnixTime4, logerr as logerr5, loginfo as loginfo5, unreachable as unreachable4 } from "@letsscrapedata/utils";
|
|
1948
1971
|
var PuppeteerPage = class extends EventEmitter4 {
|
|
1949
1972
|
#lsdBrowserContext;
|
|
1950
1973
|
#page;
|
|
@@ -2104,9 +2127,9 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2104
2127
|
const page = this.#page;
|
|
2105
2128
|
const pageId = this.#pageId;
|
|
2106
2129
|
page.on("close", async () => {
|
|
2107
|
-
|
|
2130
|
+
loginfo(`##browser ${pageId} closed`);
|
|
2108
2131
|
if (!page.pageInfo) {
|
|
2109
|
-
|
|
2132
|
+
logerr(`Logic error in page.on("close")`);
|
|
2110
2133
|
}
|
|
2111
2134
|
this.emit("pageClose");
|
|
2112
2135
|
this.#lsdBrowserContext.emit("pageClose", this);
|
|
@@ -2125,12 +2148,12 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2125
2148
|
pageInfo.relatedId = page.pageInfo.taskId;
|
|
2126
2149
|
}
|
|
2127
2150
|
} else {
|
|
2128
|
-
|
|
2151
|
+
logerr(`##browser ${pageId} has popup without page.pageInfo`);
|
|
2129
2152
|
}
|
|
2130
|
-
|
|
2153
|
+
loginfo(`##browser ${pageId} has popup ${popupPageId}`);
|
|
2131
2154
|
this.emit("pagePopup", evtData);
|
|
2132
2155
|
} else {
|
|
2133
|
-
|
|
2156
|
+
logerr(`##browser ${pageId} has popup page with null page`);
|
|
2134
2157
|
}
|
|
2135
2158
|
});
|
|
2136
2159
|
}
|
|
@@ -2740,7 +2763,6 @@ var PuppeteerPage = class extends EventEmitter4 {
|
|
|
2740
2763
|
};
|
|
2741
2764
|
|
|
2742
2765
|
// src/puppeteer/context.ts
|
|
2743
|
-
import { getCurrentUnixTime as getCurrentUnixTime5, logerr as logerr6, loginfo as loginfo6, logwarn as logwarn4, sleep as sleep2 } from "@letsscrapedata/utils";
|
|
2744
2766
|
var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
2745
2767
|
#lsdBrowser;
|
|
2746
2768
|
#browserIdx;
|
|
@@ -2780,7 +2802,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2780
2802
|
await lsdPage.setUserAgent(this.#userAgent);
|
|
2781
2803
|
}
|
|
2782
2804
|
this.#lsdPages.push(lsdPage);
|
|
2783
|
-
|
|
2805
|
+
loginfo(`##browser ${lsdPage.id()} ${openType}ed`);
|
|
2784
2806
|
}
|
|
2785
2807
|
}
|
|
2786
2808
|
constructor(lsdBrowser, browserContext, browserContextCreationMethod, incognito = false, proxy = null, browserIdx = 0, browserContextIdx = 0, maxPagesPerBrowserContext = 20, maxPageFreeSeconds = 0, userAgent = "", maxViewportOfNewPage = true) {
|
|
@@ -2819,7 +2841,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2819
2841
|
const pageInfo = page.pageInfo;
|
|
2820
2842
|
if (pageInfo) {
|
|
2821
2843
|
const { browserIdx: browserIdx2, browserContextIdx: browserContextIdx2, pageIdx } = pageInfo;
|
|
2822
|
-
|
|
2844
|
+
logwarn(`##browser page-${browserIdx2}-${browserContextIdx2}-${pageIdx} has been already created`);
|
|
2823
2845
|
} else {
|
|
2824
2846
|
const currentTime2 = getCurrentUnixTime5();
|
|
2825
2847
|
const pageInfo2 = { browserIdx: this.#browserIdx, browserContextIdx: this.#browserContextIdx, pageIdx: this.#nextPageIdx++, openType: "other", openTime: currentTime2, lastStatusUpdateTime: currentTime2, taskId: 0, relatedId: 0, misc: {} };
|
|
@@ -2831,18 +2853,18 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2831
2853
|
await lsdPage.setUserAgent(this.#userAgent);
|
|
2832
2854
|
}
|
|
2833
2855
|
this.#lsdPages.push(lsdPage);
|
|
2834
|
-
|
|
2856
|
+
loginfo(`##page ${lsdPage.id()} created`);
|
|
2835
2857
|
}
|
|
2836
2858
|
}
|
|
2837
2859
|
});
|
|
2838
2860
|
this.on("pageClose", (lsdPage) => {
|
|
2839
2861
|
if (!(lsdPage instanceof PuppeteerPage)) {
|
|
2840
|
-
|
|
2862
|
+
logerr(`Invalid data in LsdBrowserContext.on("pageClose)`);
|
|
2841
2863
|
return;
|
|
2842
2864
|
}
|
|
2843
2865
|
const idx = this.#lsdPages.findIndex((p) => p === lsdPage);
|
|
2844
2866
|
if (idx < 0) {
|
|
2845
|
-
|
|
2867
|
+
logerr(`Invalid lsdPage in LsdBrowserContext.on("pageClose)`);
|
|
2846
2868
|
return;
|
|
2847
2869
|
}
|
|
2848
2870
|
this.#lsdPages.splice(idx, 1);
|
|
@@ -2862,7 +2884,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2862
2884
|
if (this.#browserContext) {
|
|
2863
2885
|
this.#status = "closed";
|
|
2864
2886
|
this.#lastStatusUpdateTime = getCurrentUnixTime5();
|
|
2865
|
-
|
|
2887
|
+
loginfo(`browserContext ${this.id()} closed at ${this.#lastStatusUpdateTime}`);
|
|
2866
2888
|
if (this.#browserContextCreationMethod !== "launch") {
|
|
2867
2889
|
await this.#browserContext.close();
|
|
2868
2890
|
}
|
|
@@ -2879,12 +2901,12 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2879
2901
|
await sleep2(200);
|
|
2880
2902
|
}
|
|
2881
2903
|
}
|
|
2882
|
-
|
|
2904
|
+
logwarn(`Cannot get the gettingLock.`);
|
|
2883
2905
|
return false;
|
|
2884
2906
|
}
|
|
2885
2907
|
#freeGettingLock() {
|
|
2886
2908
|
if (!this.#gettingPage) {
|
|
2887
|
-
|
|
2909
|
+
logwarn(`Getting lock is already free now.`);
|
|
2888
2910
|
}
|
|
2889
2911
|
this.#gettingPage = false;
|
|
2890
2912
|
}
|
|
@@ -2893,7 +2915,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2893
2915
|
maxPageFreeSeconds = this.#maxPageFreeSeconds;
|
|
2894
2916
|
}
|
|
2895
2917
|
if (maxPageFreeSeconds <= 0) {
|
|
2896
|
-
|
|
2918
|
+
logwarn(`Please set valid maxPageFreeSeconds to close free pages`);
|
|
2897
2919
|
return false;
|
|
2898
2920
|
}
|
|
2899
2921
|
const gotLock = await this.#tryToGetGettingLock();
|
|
@@ -2912,7 +2934,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2912
2934
|
this.#freeGettingLock();
|
|
2913
2935
|
return true;
|
|
2914
2936
|
} catch (err) {
|
|
2915
|
-
|
|
2937
|
+
logerr(err);
|
|
2916
2938
|
this.#freeGettingLock();
|
|
2917
2939
|
return false;
|
|
2918
2940
|
}
|
|
@@ -2966,7 +2988,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
2966
2988
|
return null;
|
|
2967
2989
|
}
|
|
2968
2990
|
} catch (err) {
|
|
2969
|
-
|
|
2991
|
+
logerr(err);
|
|
2970
2992
|
this.#freeGettingLock();
|
|
2971
2993
|
return null;
|
|
2972
2994
|
}
|
|
@@ -3048,7 +3070,7 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
3048
3070
|
await page.free();
|
|
3049
3071
|
return true;
|
|
3050
3072
|
} catch (err) {
|
|
3051
|
-
|
|
3073
|
+
logerr(err);
|
|
3052
3074
|
return false;
|
|
3053
3075
|
}
|
|
3054
3076
|
}
|
|
@@ -3070,7 +3092,6 @@ var PuppeteerBrowserContext = class extends EventEmitter5 {
|
|
|
3070
3092
|
};
|
|
3071
3093
|
|
|
3072
3094
|
// src/puppeteer/browser.ts
|
|
3073
|
-
import { getCurrentUnixTime as getCurrentUnixTime6, getPerformanceOfPidTree as getPerformanceOfPidTree2, logerr as logerr7, loginfo as loginfo7, logwarn as logwarn5 } from "@letsscrapedata/utils";
|
|
3074
3095
|
var PuppeteerBrowser = class extends EventEmitter6 {
|
|
3075
3096
|
#browser;
|
|
3076
3097
|
#browserIdx;
|
|
@@ -3123,35 +3144,35 @@ var PuppeteerBrowser = class extends EventEmitter6 {
|
|
|
3123
3144
|
this.#executablePath = executablePath;
|
|
3124
3145
|
this.#nextBrowserContextIdx = 1;
|
|
3125
3146
|
this.#closeFreePagesIntervalId = null;
|
|
3126
|
-
|
|
3147
|
+
loginfo(`##browser ${this.#browserType} ${this.id()} ${this.#browserCreationMethod}ed by ${this.#browserControllerType}`);
|
|
3127
3148
|
const browserContexts = browser.browserContexts();
|
|
3128
3149
|
const incognito = typeof options?.incognito === "boolean" ? options.incognito : false;
|
|
3129
3150
|
for (const browserContext of browserContexts) {
|
|
3130
3151
|
const lsdBrowserContext = new PuppeteerBrowserContext(this, browserContext, "launch", incognito, this.#proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), this.#userAgent(), maxViewportOfNewPage);
|
|
3131
3152
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
3132
|
-
|
|
3153
|
+
loginfo(`##browser ${lsdBrowserContext.id()} ${this.#browserCreationMethod}ed`);
|
|
3133
3154
|
}
|
|
3134
3155
|
browser.on("disconnected", () => {
|
|
3135
|
-
|
|
3156
|
+
loginfo(`##browser ${this.id()} disconnected`);
|
|
3136
3157
|
if (this.#lsdBrowserContexts.length > 0) {
|
|
3137
|
-
|
|
3158
|
+
logerr(`${this.id()} has browserContexts when disconnected`);
|
|
3138
3159
|
}
|
|
3139
3160
|
});
|
|
3140
3161
|
this.on("browserContextClose", (lsdBrowserContext) => {
|
|
3141
3162
|
if (!(lsdBrowserContext instanceof PuppeteerBrowserContext)) {
|
|
3142
|
-
|
|
3163
|
+
logerr(`Invalid data in LsdBrowser.on("browserContextClose)`);
|
|
3143
3164
|
return;
|
|
3144
3165
|
}
|
|
3145
3166
|
const idx = this.#lsdBrowserContexts.findIndex((bc) => bc === lsdBrowserContext);
|
|
3146
3167
|
if (idx < 0) {
|
|
3147
|
-
|
|
3168
|
+
logerr(`Invalid lsdBrowserContext in LsdBrowser.on("browserContextClose)`);
|
|
3148
3169
|
return;
|
|
3149
3170
|
}
|
|
3150
|
-
|
|
3171
|
+
loginfo(`##browser ${lsdBrowserContext.id()} closed
|
|
3151
3172
|
`);
|
|
3152
3173
|
this.#lsdBrowserContexts.splice(idx, 1);
|
|
3153
3174
|
if (this.#lsdBrowserContexts.length === 0) {
|
|
3154
|
-
|
|
3175
|
+
loginfo(`##browser ${this.id()} has no browserContexts now`);
|
|
3155
3176
|
}
|
|
3156
3177
|
return;
|
|
3157
3178
|
});
|
|
@@ -3168,7 +3189,7 @@ var PuppeteerBrowser = class extends EventEmitter6 {
|
|
|
3168
3189
|
}
|
|
3169
3190
|
async newBrowserContext(options) {
|
|
3170
3191
|
if (this.#lsdBrowserContexts.length >= this.#maxBrowserContextsPerBrowser()) {
|
|
3171
|
-
|
|
3192
|
+
logwarn(`##browser ${this.id()} can not create more new browserContext`);
|
|
3172
3193
|
return null;
|
|
3173
3194
|
}
|
|
3174
3195
|
const browserContextOptions = {};
|
|
@@ -3181,7 +3202,7 @@ var PuppeteerBrowser = class extends EventEmitter6 {
|
|
|
3181
3202
|
const { maxViewportOfNewPage = this.#options.maxViewportOfNewPage } = options ? options : {};
|
|
3182
3203
|
const lsdBrowserContext = new PuppeteerBrowserContext(this, browserContext, "new", true, proxy, this.#browserIdx, this.#nextBrowserContextIdx++, this.#maxPagesPerBrowserContext(), this.#maxPageFreeSeconds(), userAgent, maxViewportOfNewPage);
|
|
3183
3204
|
this.#lsdBrowserContexts.push(lsdBrowserContext);
|
|
3184
|
-
|
|
3205
|
+
loginfo(`##browser ${lsdBrowserContext.id()} created`);
|
|
3185
3206
|
return lsdBrowserContext;
|
|
3186
3207
|
}
|
|
3187
3208
|
async close() {
|
|
@@ -3580,10 +3601,10 @@ var CheerioPage = class extends EventEmitter7 {
|
|
|
3580
3601
|
import os from "os";
|
|
3581
3602
|
import puppeteer from "puppeteer";
|
|
3582
3603
|
import playwright, { request as apiRequest } from "playwright";
|
|
3583
|
-
import { getPidsListeningOnPort, logerr as logerr8, logwarn as logwarn6, unreachable as unreachable5 } from "@letsscrapedata/utils";
|
|
3584
3604
|
import puppeteerExtra from "puppeteer-extra";
|
|
3585
3605
|
import * as playwrightExtra from "playwright-extra";
|
|
3586
3606
|
import StealthPlugin from "puppeteer-extra-plugin-stealth";
|
|
3607
|
+
import { getPidsListeningOnPort, unreachable as unreachable5 } from "@letsscrapedata/utils";
|
|
3587
3608
|
var LsdBrowserController = class _LsdBrowserController {
|
|
3588
3609
|
static #forbidConstructor = false;
|
|
3589
3610
|
#puppeteer;
|
|
@@ -3684,22 +3705,22 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
3684
3705
|
const actOptions = { closeFreePagesIntervalSeconds, maxBrowserContextsPerBrowser, maxPagesPerBrowserContext, maxPageFreeSeconds, maxViewportOfNewPage, proxy, timeout, args, executablePath, maxWindowSize, headless, minBrowserContexts, incognito, proxyPerBrowserContext, userDataDir, userAgent };
|
|
3685
3706
|
let idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--incoginto"));
|
|
3686
3707
|
if (idx >= 0) {
|
|
3687
|
-
|
|
3708
|
+
logwarn(`Please use options.incognito instead when launching new browser.`);
|
|
3688
3709
|
args.splice(idx, 1);
|
|
3689
3710
|
}
|
|
3690
3711
|
idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--proxy-server"));
|
|
3691
3712
|
if (idx >= 0) {
|
|
3692
|
-
|
|
3713
|
+
logwarn(`Please use options.proxy instead when launching new browser.`);
|
|
3693
3714
|
args.splice(idx, 1);
|
|
3694
3715
|
}
|
|
3695
3716
|
idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--user-data-dir"));
|
|
3696
3717
|
if (idx >= 0) {
|
|
3697
|
-
|
|
3718
|
+
logwarn(`Please use options.userDataDir instead when launching new browser.`);
|
|
3698
3719
|
args.splice(idx, 1);
|
|
3699
3720
|
}
|
|
3700
3721
|
idx = args.findIndex((arg) => arg.toLowerCase().startsWith("--start-maximized"));
|
|
3701
3722
|
if (idx >= 0) {
|
|
3702
|
-
|
|
3723
|
+
logwarn(`Please use options.maxWindowSize instead when launching new browser.`);
|
|
3703
3724
|
args.splice(idx, 1);
|
|
3704
3725
|
}
|
|
3705
3726
|
let lsdBrowser;
|
|
@@ -3812,7 +3833,7 @@ var LsdBrowserController = class _LsdBrowserController {
|
|
|
3812
3833
|
const pids = await getPidsListeningOnPort(port);
|
|
3813
3834
|
let browserPid = 0;
|
|
3814
3835
|
if (pids.length !== 1) {
|
|
3815
|
-
|
|
3836
|
+
logerr(`##browser pids.length ${pids.length} is not 1 when trying to connect to browserUrl ${browserUrl}`);
|
|
3816
3837
|
} else {
|
|
3817
3838
|
browserPid = pids[0];
|
|
3818
3839
|
}
|
|
@@ -3859,5 +3880,6 @@ export {
|
|
|
3859
3880
|
PuppeteerBrowserContext,
|
|
3860
3881
|
PuppeteerElement,
|
|
3861
3882
|
PuppeteerPage,
|
|
3862
|
-
controller
|
|
3883
|
+
controller,
|
|
3884
|
+
setControllerLogFun
|
|
3863
3885
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@letsscrapedata/controller",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.51",
|
|
4
4
|
"description": "Unified browser / HTML controller interfaces that support playwright, puppeteer and cheerio",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"apify"
|
|
47
47
|
],
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@letsscrapedata/utils": "^0.0.
|
|
49
|
+
"@letsscrapedata/utils": "^0.0.26",
|
|
50
50
|
"cheerio": "^1.0.0",
|
|
51
51
|
"playwright": "^1.43.0",
|
|
52
52
|
"playwright-extra": "^4.3.6",
|