chore: 更新学生档案数据

This commit is contained in:
chengzi
2026-07-05 20:33:53 +08:00
parent b0574cc700
commit c49ace5ca1
2698 changed files with 489801 additions and 61355 deletions

78
node_modules/puppeteer/README.md generated vendored Normal file
View File

@@ -0,0 +1,78 @@
# Puppeteer
[![build](https://github.com/puppeteer/puppeteer/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/puppeteer/puppeteer/actions/workflows/ci.yml)
[![npm puppeteer package](https://img.shields.io/npm/v/puppeteer.svg)](https://npmjs.org/package/puppeteer)
<img src="https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png" height="200" align="right"/>
> Puppeteer is a JavaScript library which provides a high-level API to control
> Chrome or Firefox over the
> [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) or [WebDriver BiDi](https://pptr.dev/webdriver-bidi).
> Puppeteer runs in the headless (no visible UI) by default
## [Get started](https://pptr.dev/docs) | [API](https://pptr.dev/api) | [FAQ](https://pptr.dev/faq) | [Contributing](https://pptr.dev/contributing) | [Troubleshooting](https://pptr.dev/troubleshooting)
## Installation
```bash npm2yarn
npm i puppeteer # Downloads compatible Chrome during installation.
npm i puppeteer-core # Alternatively, install as a library, without downloading Chrome.
```
:::note
Modern package managers (including npm (see the [RFC](https://github.com/npm/rfcs/pull/868)), pnpm, Yarn, Bun, and Deno) block dependency install scripts by default. If the install script is blocked, Puppeteer will not download the browser during installation, leading to runtime errors.
You can manually download the required browsers after installation by running:
```bash npm2yarn
npx puppeteer browsers install
```
Alternatively, you can configure your package manager to allow the install script to run (for example, with npm, by adding `"puppeteer"` to `"allowScripts"` in your `package.json`).
:::
## MCP
Install [`chrome-devtools-mcp`](https://github.com/ChromeDevTools/chrome-devtools-mcp),
a Puppeteer-based MCP server for browser automation and debugging.
Puppeteer also supports the experimental [WebMCP](https://pptr.dev/guides/webmcp) API.
## Example
```ts
import puppeteer from 'puppeteer';
// Or import puppeteer from 'puppeteer-core';
// Launch the browser and open a new blank page.
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Navigate the page to a URL.
await page.goto('https://developer.chrome.com/');
// Set the screen size.
await page.setViewport({width: 1080, height: 1024});
// Open the search menu using the keyboard.
await page.keyboard.press('/');
// Type into search box using accessible input name.
await page.locator('::-p-aria(Search)').fill('automate beyond recorder');
// Wait and click on first result.
await page.locator('.devsite-result-item-link').click();
// Locate the full title with a unique string.
const textSelector = await page
.locator('::-p-text(Customize and automate)')
.waitHandle();
const fullTitle = await textSelector?.evaluate(el => el.textContent);
// Print the full title.
console.log('The title of this blog post is "%s".', fullTitle);
await browser.close();
```

43
node_modules/puppeteer/install.mjs generated vendored Normal file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/env node
/**
* @license
* Copyright 2017 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
/**
* This file is part of public API.
*
* By default, the `puppeteer` package runs this script during the installation
* process unless one of the env flags is provided.
* `puppeteer-core` package doesn't include this step at all. However, it's
* still possible to install a supported browser using this script when
* necessary.
*/
/**
* @returns {import("puppeteer/internal/node/install.js")}
*/
async function importInstaller() {
try {
return await import('puppeteer/internal/node/install.js');
} catch (error) {
// Add more logging when the GitHub Action Debugging option is set
// https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
if (process.env['RUNNER_DEBUG']) {
console.error(error);
}
console.warn(
'Skipping browser installation because the Puppeteer build is not available. Run `npm install` again after you have re-built Puppeteer.',
);
process.exit(0);
}
}
try {
const {downloadBrowsers} = await importInstaller();
downloadBrowsers();
} catch (error) {
console.warn('Browser download failed', error);
}

View File

@@ -0,0 +1,15 @@
/**
* @license
* Copyright 2023 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
import type { ChromeHeadlessShellSettings, ChromeSettings, Configuration, FirefoxSettings } from 'puppeteer-core';
/**
* @internal
*/
export declare function getBrowserSetting(browser: 'chrome' | 'chrome-headless-shell' | 'firefox', configuration: Configuration, defaultConfig?: ChromeSettings | ChromeHeadlessShellSettings | FirefoxSettings): ChromeSettings | ChromeHeadlessShellSettings | FirefoxSettings;
/**
* @internal
*/
export declare const getConfiguration: () => Promise<Configuration>;
//# sourceMappingURL=getConfiguration.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"getConfiguration.d.ts","sourceRoot":"","sources":["../../src/getConfiguration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EACV,2BAA2B,EAC3B,cAAc,EACd,aAAa,EACb,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AA0DxB;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,QAAQ,GAAG,uBAAuB,GAAG,SAAS,EACvD,aAAa,EAAE,aAAa,EAC5B,aAAa,GACT,cAAc,GACd,2BAA2B,GAC3B,eAAoB,GACvB,cAAc,GAAG,2BAA2B,GAAG,eAAe,CAyBhE;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,aAAa,CA8D9D,CAAC"}

View File

@@ -0,0 +1,132 @@
/**
* @license
* Copyright 2023 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
import { homedir } from 'node:os';
import { join } from 'node:path';
import { lilconfig } from 'lilconfig';
function getBooleanEnvVar(name) {
const env = process.env[name];
if (env === undefined) {
return;
}
switch (env.toLowerCase()) {
case '':
case '0':
case 'false':
case 'off':
return false;
default:
return true;
}
}
/**
* @internal
*/
function isSupportedBrowser(product) {
switch (product) {
case 'chrome':
case 'firefox':
return true;
default:
return false;
}
}
/**
* @internal
*/
function getDefaultBrowser(browser) {
if (!browser) {
return 'chrome';
}
if (!isSupportedBrowser(browser)) {
throw new Error(`Unsupported browser ${browser}`);
}
return browser;
}
/**
* @internal
*/
function getLogLevel(logLevel) {
switch (logLevel) {
case 'silent':
return 'silent';
case 'error':
return 'error';
default:
return 'warn';
}
}
/**
* @internal
*/
export function getBrowserSetting(browser, configuration, defaultConfig = {}) {
const browserSetting = {};
const browserEnvName = browser.replaceAll('-', '_').toUpperCase();
browserSetting.version =
process.env[`PUPPETEER_${browserEnvName}_VERSION`] ??
configuration[browser]?.version ??
defaultConfig.version;
browserSetting.downloadBaseUrl =
process.env[`PUPPETEER_${browserEnvName}_DOWNLOAD_BASE_URL`] ??
configuration[browser]?.downloadBaseUrl ??
defaultConfig.downloadBaseUrl;
browserSetting.skipDownload =
getBooleanEnvVar(`PUPPETEER_${browserEnvName}_SKIP_DOWNLOAD`) ??
getBooleanEnvVar(`PUPPETEER_SKIP_${browserEnvName}_DOWNLOAD`) ??
configuration[browser]?.skipDownload ??
configuration.skipDownload ??
defaultConfig.skipDownload;
return browserSetting;
}
/**
* @internal
*/
export const getConfiguration = async () => {
const result = await lilconfig('puppeteer', {
searchPlaces: [
'package.json',
'.config/puppeteer.config.cjs',
'.config/puppeteer.config.js',
'.config/puppeteerrc.cjs',
'.config/puppeteerrc.js',
'.config/puppeteerrc.json',
'.config/puppeteerrc',
'.puppeteerrc.cjs',
'.puppeteerrc.js',
'.puppeteerrc.json',
'.puppeteerrc',
'puppeteer.config.cjs',
'puppeteer.config.js',
],
}).search();
const configuration = result ? { ...result.config } : {};
configuration.logLevel = getLogLevel(process.env['PUPPETEER_LOGLEVEL'] ?? configuration.logLevel);
// Merging environment variables.
configuration.defaultBrowser = getDefaultBrowser(process.env['PUPPETEER_BROWSER'] ?? configuration.defaultBrowser);
configuration.executablePath =
process.env['PUPPETEER_EXECUTABLE_PATH'] ?? configuration.executablePath;
// Default to skipDownload if executablePath is set
if (configuration.executablePath) {
configuration.skipDownload = true;
}
// Set skipDownload explicitly or from default
configuration.skipDownload =
getBooleanEnvVar('PUPPETEER_SKIP_DOWNLOAD') ?? configuration.skipDownload;
// Prepare variables used in browser downloading
configuration.chrome = getBrowserSetting('chrome', configuration);
configuration['chrome-headless-shell'] = getBrowserSetting('chrome-headless-shell', configuration);
configuration.firefox = getBrowserSetting('firefox', configuration, {
skipDownload: true,
});
configuration.cacheDirectory =
process.env['PUPPETEER_CACHE_DIR'] ??
configuration.cacheDirectory ??
join(homedir(), '.cache', 'puppeteer');
configuration.temporaryDirectory =
process.env['PUPPETEER_TMP_DIR'] ?? configuration.temporaryDirectory;
configuration.experiments ??= {};
return configuration;
};
//# sourceMappingURL=getConfiguration.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"getConfiguration.js","sourceRoot":"","sources":["../../src/getConfiguration.ts"],"names":[],"mappings":"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"}

8
node_modules/puppeteer/lib/puppeteer/node/cli.d.ts generated vendored Normal file
View File

@@ -0,0 +1,8 @@
#!/usr/bin/env node
/**
* @license
* Copyright 2023 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
export {};
//# sourceMappingURL=cli.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/node/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}

38
node_modules/puppeteer/lib/puppeteer/node/cli.js generated vendored Normal file
View File

@@ -0,0 +1,38 @@
#!/usr/bin/env node
/**
* @license
* Copyright 2023 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
import { CLI, Browser } from '@puppeteer/browsers';
import { PUPPETEER_REVISIONS } from 'puppeteer-core/internal/revisions.js';
import { packageVersion } from 'puppeteer-core/internal/util/version.js';
import puppeteer from '../puppeteer.js';
const config = await puppeteer.configuration();
void new CLI({
cachePath: config.cacheDirectory,
scriptName: 'puppeteer',
version: packageVersion,
prefixCommand: {
cmd: 'browsers',
description: 'Manage browsers of this Puppeteer installation',
},
allowCachePathOverride: false,
pinnedBrowsers: {
[Browser.CHROME]: {
buildId: config.chrome?.version || PUPPETEER_REVISIONS['chrome'] || 'latest',
skipDownload: config.chrome?.skipDownload ?? false,
},
[Browser.FIREFOX]: {
buildId: config.firefox?.version || PUPPETEER_REVISIONS['firefox'] || 'latest',
skipDownload: config.firefox?.skipDownload ?? true,
},
[Browser.CHROMEHEADLESSSHELL]: {
buildId: config['chrome-headless-shell']?.version ||
PUPPETEER_REVISIONS['chrome-headless-shell'] ||
'latest',
skipDownload: config['chrome-headless-shell']?.skipDownload ?? false,
},
},
}).run(process.argv);
//# sourceMappingURL=cli.js.map

1
node_modules/puppeteer/lib/puppeteer/node/cli.js.map generated vendored Normal file
View File

@@ -0,0 +1 @@
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/node/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAC,GAAG,EAAE,OAAO,EAAC,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAC,cAAc,EAAC,MAAM,yCAAyC,CAAC;AAEvE,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,MAAM,MAAM,GAAG,MAAO,SAAsC,CAAC,aAAa,EAAE,CAAC;AAE7E,KAAK,IAAI,GAAG,CAAC;IACX,SAAS,EAAE,MAAM,CAAC,cAAe;IACjC,UAAU,EAAE,WAAW;IACvB,OAAO,EAAE,cAAc;IACvB,aAAa,EAAE;QACb,GAAG,EAAE,UAAU;QACf,WAAW,EAAE,gDAAgD;KAC9D;IACD,sBAAsB,EAAE,KAAK;IAC7B,cAAc,EAAE;QACd,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAChB,OAAO,EACL,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,IAAI,QAAQ;YACrE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,IAAI,KAAK;SACnD;QACD,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACjB,OAAO,EACL,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,mBAAmB,CAAC,SAAS,CAAC,IAAI,QAAQ;YACvE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,IAAI,IAAI;SACnD;QACD,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;YAC7B,OAAO,EACL,MAAM,CAAC,uBAAuB,CAAC,EAAE,OAAO;gBACxC,mBAAmB,CAAC,uBAAuB,CAAC;gBAC5C,QAAQ;YACV,YAAY,EAAE,MAAM,CAAC,uBAAuB,CAAC,EAAE,YAAY,IAAI,KAAK;SACrE;KACF;CACF,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}

10
node_modules/puppeteer/lib/puppeteer/node/install.d.ts generated vendored Normal file
View File

@@ -0,0 +1,10 @@
/**
* @license
* Copyright 2020 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @internal
*/
export declare function downloadBrowsers(): Promise<void>;
//# sourceMappingURL=install.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/node/install.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2DH;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+EtD"}

129
node_modules/puppeteer/lib/puppeteer/node/install.js generated vendored Normal file
View File

@@ -0,0 +1,129 @@
/**
* @license
* Copyright 2020 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
import { install, Browser, resolveBuildId, detectBrowserPlatform, } from '@puppeteer/browsers';
import { PUPPETEER_REVISIONS } from 'puppeteer-core/internal/revisions.js';
import { getConfiguration } from '../getConfiguration.js';
async function downloadBrowser({ browser, configuration, cacheDir, platform, }) {
const unresolvedBuildId = configuration?.version || PUPPETEER_REVISIONS[browser] || 'latest';
const baseUrl = configuration?.downloadBaseUrl;
const buildId = await resolveBuildId(browser, platform, unresolvedBuildId);
try {
const result = await install({
browser,
cacheDir,
platform,
buildId,
downloadProgressCallback: 'default',
baseUrl,
buildIdAlias: buildId !== unresolvedBuildId ? unresolvedBuildId : undefined,
});
return `${browser} (${result.buildId}) downloaded to ${result.path}`;
}
catch (error) {
throw new Error(`ERROR: Failed to set up ${browser} v${buildId}! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to skip download.`, {
cause: error,
});
}
}
/**
* @internal
*/
export async function downloadBrowsers() {
overrideProxy();
const configuration = await getConfiguration();
if (configuration.skipDownload) {
logPolitely('**INFO** Skipping downloading browsers as instructed.');
return;
}
const platform = detectBrowserPlatform();
if (!platform) {
throw new Error('The current platform is not supported.');
}
const cacheDir = configuration.cacheDirectory;
const installationJobs = [];
if (configuration.chrome?.skipDownload) {
logPolitely('**INFO** Skipping Chrome download as instructed.');
}
else {
const browser = Browser.CHROME;
installationJobs.push(downloadBrowser({
browser,
configuration: configuration[browser] ?? {},
cacheDir,
platform,
}));
}
if (configuration['chrome-headless-shell']?.skipDownload) {
logPolitely('**INFO** Skipping Chrome download as instructed.');
}
else {
const browser = Browser.CHROMEHEADLESSSHELL;
installationJobs.push(downloadBrowser({
browser,
configuration: configuration[browser] ?? {},
cacheDir,
platform,
}));
}
if (configuration.firefox?.skipDownload) {
logPolitely('**INFO** Skipping Firefox download as instructed.');
}
else {
const browser = Browser.FIREFOX;
installationJobs.push(downloadBrowser({
browser,
configuration: configuration[browser] ?? {},
cacheDir,
platform,
}));
}
const results = await Promise.allSettled(installationJobs);
// Log success messages only after all downloads+extraction complete so they
// never land mid-progress-bar while the cursor is on a bar line.
for (const result of results) {
if (result.status === 'fulfilled') {
logPolitely(result.value);
}
}
const failures = results.filter(r => {
return r.status === 'rejected';
});
if (failures.length > 0) {
for (const failure of failures) {
console.error(failure.reason);
}
process.exit(1);
}
}
/**
* @internal
*/
function logPolitely(toBeLogged) {
const logLevel = process.env['npm_config_loglevel'] || '';
const logLevelDisplay = ['silent', 'error', 'warn'].indexOf(logLevel) > -1;
if (!logLevelDisplay) {
console.log(toBeLogged);
}
}
/**
* @internal
*/
function overrideProxy() {
// Override current environment proxy settings with npm configuration, if any.
const NPM_HTTPS_PROXY = process.env['npm_config_https_proxy'] || process.env['npm_config_proxy'];
const NPM_HTTP_PROXY = process.env['npm_config_http_proxy'] || process.env['npm_config_proxy'];
const NPM_NO_PROXY = process.env['npm_config_no_proxy'];
if (NPM_HTTPS_PROXY) {
process.env['HTTPS_PROXY'] = NPM_HTTPS_PROXY;
}
if (NPM_HTTP_PROXY) {
process.env['HTTP_PROXY'] = NPM_HTTP_PROXY;
}
if (NPM_NO_PROXY) {
process.env['NO_PROXY'] = NPM_NO_PROXY;
}
}
//# sourceMappingURL=install.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/node/install.ts"],"names":[],"mappings":"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"}

38
node_modules/puppeteer/lib/puppeteer/puppeteer.d.ts generated vendored Normal file
View File

@@ -0,0 +1,38 @@
/**
* @license
* Copyright 2017 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
export * from 'puppeteer-core';
import { PuppeteerNode } from 'puppeteer-core';
/**
* @public
*/
declare const puppeteer: PuppeteerNode;
export declare const
/**
* @public
*/
connect: (options: import("puppeteer-core").ConnectOptions) => Promise<import("puppeteer-core").Browser>,
/**
* @public
*/
defaultArgs: (options?: import("puppeteer-core").LaunchOptions) => Promise<string[]>,
/**
* @public
*/
executablePath: {
(channel: import("puppeteer-core").ChromeReleaseChannel): Promise<string>;
(options: import("puppeteer-core").LaunchOptions): Promise<string>;
(): Promise<string>;
},
/**
* @public
*/
launch: (options?: import("puppeteer-core").LaunchOptions) => Promise<import("puppeteer-core").Browser>,
/**
* @public
*/
trimCache: () => Promise<void>;
export default puppeteer;
//# sourceMappingURL=puppeteer.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"puppeteer.d.ts","sourceRoot":"","sources":["../../src/puppeteer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAI7C;;GAEG;AAEH,QAAA,MAAM,SAAS,eAGb,CAAC;AAEH,eAAO;AACL;;GAEG;AACH,OAAO;AACP;;GAEG;AACH,WAAW;AACX;;GAEG;AACH,cAAc;;;;;AACd;;GAEG;AACH,MAAM;AACN;;GAEG;AACH,SAAS,qBACE,CAAC;AAEd,eAAe,SAAS,CAAC"}

39
node_modules/puppeteer/lib/puppeteer/puppeteer.js generated vendored Normal file
View File

@@ -0,0 +1,39 @@
/**
* @license
* Copyright 2017 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
export * from 'puppeteer-core';
import { PuppeteerNode } from 'puppeteer-core';
import { getConfiguration } from './getConfiguration.js';
/**
* @public
*/
// @ts-expect-error using internal API.
const puppeteer = new PuppeteerNode({
isPuppeteerCore: false,
configuration: getConfiguration,
});
export const {
/**
* @public
*/
connect,
/**
* @public
*/
defaultArgs,
/**
* @public
*/
executablePath,
/**
* @public
*/
launch,
/**
* @public
*/
trimCache, } = puppeteer;
export default puppeteer;
//# sourceMappingURL=puppeteer.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"puppeteer.js","sourceRoot":"","sources":["../../src/puppeteer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAEvD;;GAEG;AACH,uCAAuC;AACvC,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC;IAClC,eAAe,EAAE,KAAK;IACtB,aAAa,EAAE,gBAAgB;CAChC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM;AACX;;GAEG;AACH,OAAO;AACP;;GAEG;AACH,WAAW;AACX;;GAEG;AACH,cAAc;AACd;;GAEG;AACH,MAAM;AACN;;GAEG;AACH,SAAS,GACV,GAAG,SAAS,CAAC;AAEd,eAAe,SAAS,CAAC"}

79
node_modules/puppeteer/lib/types.d.ts generated vendored Normal file
View File

@@ -0,0 +1,79 @@
/**
* @license
* Copyright 2026 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
import type {Browser} from 'puppeteer-core';
import type {ChromeReleaseChannel} from 'puppeteer-core';
import type {ConnectOptions} from 'puppeteer-core';
import type {LaunchOptions} from 'puppeteer-core';
import type {PuppeteerNode} from 'puppeteer-core';
/**
* @public
*/
export declare const /**
* @public
*/
/**
* @public
*/
connect: (options: ConnectOptions) => Promise<Browser>;
/**
* @public
*/
export declare const /**
* @public
*/
/**
* @public
*/
defaultArgs: (options?: LaunchOptions) => Promise<string[]>;
/**
* @public
*/
export declare const /**
* @public
*/
/**
* @public
*/
executablePath: {
(channel: ChromeReleaseChannel): Promise<string>;
(options: LaunchOptions): Promise<string>;
(): Promise<string>;
};
/**
* @public
*/
export declare const /**
* @public
*/
/**
* @public
*/
launch: (options?: LaunchOptions) => Promise<Browser>;
/**
* @public
*/
declare const puppeteer: PuppeteerNode;
export default puppeteer;
/**
* @public
*/
export declare const /**
* @public
*/
/**
* @public
*/
trimCache: () => Promise<void>;
export * from 'puppeteer-core';
export {};

145
node_modules/puppeteer/package.json generated vendored Normal file
View File

@@ -0,0 +1,145 @@
{
"name": "puppeteer",
"version": "25.2.1",
"description": "A high-level API to control headless Chrome over the DevTools Protocol",
"keywords": [
"puppeteer",
"chrome",
"headless",
"automation"
],
"type": "module",
"bin": "./lib/puppeteer/node/cli.js",
"main": "./lib/puppeteer/puppeteer.js",
"module": "./lib/puppeteer/puppeteer.js",
"types": "./lib/types.d.ts",
"exports": {
".": {
"types": "./lib/types.d.ts",
"import": "./lib/puppeteer/puppeteer.js",
"require": "./lib/puppeteer/puppeteer.js"
},
"./internal/*": {
"import": "./lib/puppeteer/*",
"require": "./lib/puppeteer/*"
},
"./*": {
"import": "./*",
"require": "./*"
}
},
"repository": {
"type": "git",
"url": "https://github.com/puppeteer/puppeteer/tree/main/packages/puppeteer"
},
"engines": {
"node": ">=22.12.0"
},
"scripts": {
"build:docs": "wireit",
"build": "wireit",
"clean": "../../tools/clean.mjs",
"postinstall": "node install.mjs",
"prepack": "wireit",
"unit": "wireit",
"unit:only": "wireit"
},
"wireit": {
"prepack": {
"command": "node --experimental-strip-types ../../tools/cp.ts ../../README.md README.md",
"files": [
"../../README.md"
],
"output": [
"README.md"
]
},
"build": {
"dependencies": [
"build:tsc",
"build:types"
]
},
"build:docs": {
"command": "api-extractor run --local --config \"./api-extractor.docs.json\"",
"files": [
"api-extractor.docs.json",
"lib/puppeteer/puppeteer.docs.d.ts",
"tsconfig.json"
],
"dependencies": [
"build:tsc"
]
},
"build:tsc": {
"command": "tsc -b && node --experimental-strip-types ../../tools/chmod.ts 755 lib/puppeteer/node/cli.js",
"clean": "if-file-deleted",
"dependencies": [
"../puppeteer-core:build",
"../browsers:build"
],
"files": [
"src/**"
],
"output": [
"lib/**",
"!lib/package.json"
]
},
"build:types": {
"command": "api-extractor run --local && eslint --fix lib/types.d.ts --no-ignore",
"files": [
"api-extractor.json",
"lib/puppeteer/types.d.ts",
"tsconfig.json"
],
"output": [
"lib/types.d.ts"
],
"dependencies": [
"build:tsc"
]
},
"unit": {
"command": "node --test --test-reporter=spec \"lib/**/*.test.js\"",
"dependencies": [
"build"
]
},
"unit:only": {
"command": "node --test --test-only --test-reporter=spec \"lib/**/*.test.js\"",
"dependencies": [
"build"
]
}
},
"files": [
"lib",
"src",
"install.mjs",
"!*.test.ts",
"!*.test.js",
"!*.test.d.ts",
"!*.test.js.map",
"!*.test.d.ts.map",
"!*.docs.ts",
"!*.docs.js",
"!*.docs.d.ts",
"!*.docs.js.map",
"!*.docs.d.ts.map",
"!*.tsbuildinfo"
],
"author": "The Chromium Authors",
"license": "Apache-2.0",
"dependencies": {
"@puppeteer/browsers": "3.0.5",
"chromium-bidi": "16.0.1",
"devtools-protocol": "0.0.1638949",
"lilconfig": "^3.1.3",
"puppeteer-core": "25.2.1",
"typed-query-selector": "^2.12.2"
},
"devDependencies": {
"@types/node": "^18.17.15"
}
}

177
node_modules/puppeteer/src/getConfiguration.ts generated vendored Normal file
View File

@@ -0,0 +1,177 @@
/**
* @license
* Copyright 2023 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
import {homedir} from 'node:os';
import {join} from 'node:path';
import {lilconfig} from 'lilconfig';
import type {
ChromeHeadlessShellSettings,
ChromeSettings,
Configuration,
FirefoxSettings,
SupportedBrowser,
} from 'puppeteer-core';
function getBooleanEnvVar(name: string): boolean | undefined {
const env = process.env[name];
if (env === undefined) {
return;
}
switch (env.toLowerCase()) {
case '':
case '0':
case 'false':
case 'off':
return false;
default:
return true;
}
}
/**
* @internal
*/
function isSupportedBrowser(product: unknown): product is SupportedBrowser {
switch (product) {
case 'chrome':
case 'firefox':
return true;
default:
return false;
}
}
/**
* @internal
*/
function getDefaultBrowser(browser?: unknown): SupportedBrowser {
if (!browser) {
return 'chrome';
}
if (!isSupportedBrowser(browser)) {
throw new Error(`Unsupported browser ${browser}`);
}
return browser;
}
/**
* @internal
*/
function getLogLevel(logLevel: unknown): 'silent' | 'error' | 'warn' {
switch (logLevel) {
case 'silent':
return 'silent';
case 'error':
return 'error';
default:
return 'warn';
}
}
/**
* @internal
*/
export function getBrowserSetting(
browser: 'chrome' | 'chrome-headless-shell' | 'firefox',
configuration: Configuration,
defaultConfig:
| ChromeSettings
| ChromeHeadlessShellSettings
| FirefoxSettings = {},
): ChromeSettings | ChromeHeadlessShellSettings | FirefoxSettings {
const browserSetting:
| ChromeSettings
| ChromeHeadlessShellSettings
| FirefoxSettings = {};
const browserEnvName = browser.replaceAll('-', '_').toUpperCase();
browserSetting.version =
process.env[`PUPPETEER_${browserEnvName}_VERSION`] ??
configuration[browser]?.version ??
defaultConfig.version;
browserSetting.downloadBaseUrl =
process.env[`PUPPETEER_${browserEnvName}_DOWNLOAD_BASE_URL`] ??
configuration[browser]?.downloadBaseUrl ??
defaultConfig.downloadBaseUrl;
browserSetting.skipDownload =
getBooleanEnvVar(`PUPPETEER_${browserEnvName}_SKIP_DOWNLOAD`) ??
getBooleanEnvVar(`PUPPETEER_SKIP_${browserEnvName}_DOWNLOAD`) ??
configuration[browser]?.skipDownload ??
configuration.skipDownload ??
defaultConfig.skipDownload;
return browserSetting;
}
/**
* @internal
*/
export const getConfiguration = async (): Promise<Configuration> => {
const result = await lilconfig('puppeteer', {
searchPlaces: [
'package.json',
'.config/puppeteer.config.cjs',
'.config/puppeteer.config.js',
'.config/puppeteerrc.cjs',
'.config/puppeteerrc.js',
'.config/puppeteerrc.json',
'.config/puppeteerrc',
'.puppeteerrc.cjs',
'.puppeteerrc.js',
'.puppeteerrc.json',
'.puppeteerrc',
'puppeteer.config.cjs',
'puppeteer.config.js',
],
}).search();
const configuration: Configuration = result ? {...result.config} : {};
configuration.logLevel = getLogLevel(
process.env['PUPPETEER_LOGLEVEL'] ?? configuration.logLevel,
);
// Merging environment variables.
configuration.defaultBrowser = getDefaultBrowser(
process.env['PUPPETEER_BROWSER'] ?? configuration.defaultBrowser,
);
configuration.executablePath =
process.env['PUPPETEER_EXECUTABLE_PATH'] ?? configuration.executablePath;
// Default to skipDownload if executablePath is set
if (configuration.executablePath) {
configuration.skipDownload = true;
}
// Set skipDownload explicitly or from default
configuration.skipDownload =
getBooleanEnvVar('PUPPETEER_SKIP_DOWNLOAD') ?? configuration.skipDownload;
// Prepare variables used in browser downloading
configuration.chrome = getBrowserSetting('chrome', configuration);
configuration['chrome-headless-shell'] = getBrowserSetting(
'chrome-headless-shell',
configuration,
);
configuration.firefox = getBrowserSetting('firefox', configuration, {
skipDownload: true,
});
configuration.cacheDirectory =
process.env['PUPPETEER_CACHE_DIR'] ??
configuration.cacheDirectory ??
join(homedir(), '.cache', 'puppeteer');
configuration.temporaryDirectory =
process.env['PUPPETEER_TMP_DIR'] ?? configuration.temporaryDirectory;
configuration.experiments ??= {};
return configuration;
};

46
node_modules/puppeteer/src/node/cli.ts generated vendored Normal file
View File

@@ -0,0 +1,46 @@
#!/usr/bin/env node
/**
* @license
* Copyright 2023 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
import {CLI, Browser} from '@puppeteer/browsers';
import type {PuppeteerNode} from 'puppeteer-core/internal/node/PuppeteerNode.js';
import {PUPPETEER_REVISIONS} from 'puppeteer-core/internal/revisions.js';
import {packageVersion} from 'puppeteer-core/internal/util/version.js';
import puppeteer from '../puppeteer.js';
const config = await (puppeteer as unknown as PuppeteerNode).configuration();
void new CLI({
cachePath: config.cacheDirectory!,
scriptName: 'puppeteer',
version: packageVersion,
prefixCommand: {
cmd: 'browsers',
description: 'Manage browsers of this Puppeteer installation',
},
allowCachePathOverride: false,
pinnedBrowsers: {
[Browser.CHROME]: {
buildId:
config.chrome?.version || PUPPETEER_REVISIONS['chrome'] || 'latest',
skipDownload: config.chrome?.skipDownload ?? false,
},
[Browser.FIREFOX]: {
buildId:
config.firefox?.version || PUPPETEER_REVISIONS['firefox'] || 'latest',
skipDownload: config.firefox?.skipDownload ?? true,
},
[Browser.CHROMEHEADLESSSHELL]: {
buildId:
config['chrome-headless-shell']?.version ||
PUPPETEER_REVISIONS['chrome-headless-shell'] ||
'latest',
skipDownload: config['chrome-headless-shell']?.skipDownload ?? false,
},
},
}).run(process.argv);

180
node_modules/puppeteer/src/node/install.ts generated vendored Normal file
View File

@@ -0,0 +1,180 @@
/**
* @license
* Copyright 2020 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
import type {BrowserPlatform} from '@puppeteer/browsers';
import {
install,
Browser,
resolveBuildId,
detectBrowserPlatform,
} from '@puppeteer/browsers';
import type {
ChromeHeadlessShellSettings,
ChromeSettings,
FirefoxSettings,
} from 'puppeteer-core';
import {PUPPETEER_REVISIONS} from 'puppeteer-core/internal/revisions.js';
import {getConfiguration} from '../getConfiguration.js';
async function downloadBrowser({
browser,
configuration,
cacheDir,
platform,
}: {
browser: Extract<
Browser,
Browser.CHROME | Browser.CHROMEHEADLESSSHELL | Browser.FIREFOX
>;
configuration: ChromeSettings | ChromeHeadlessShellSettings | FirefoxSettings;
platform: BrowserPlatform;
cacheDir: string;
}): Promise<string> {
const unresolvedBuildId =
configuration?.version || PUPPETEER_REVISIONS[browser] || 'latest';
const baseUrl = configuration?.downloadBaseUrl;
const buildId = await resolveBuildId(browser, platform, unresolvedBuildId);
try {
const result = await install({
browser,
cacheDir,
platform,
buildId,
downloadProgressCallback: 'default',
baseUrl,
buildIdAlias:
buildId !== unresolvedBuildId ? unresolvedBuildId : undefined,
});
return `${browser} (${result.buildId}) downloaded to ${result.path}`;
} catch (error) {
throw new Error(
`ERROR: Failed to set up ${browser} v${buildId}! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to skip download.`,
{
cause: error,
},
);
}
}
/**
* @internal
*/
export async function downloadBrowsers(): Promise<void> {
overrideProxy();
const configuration = await getConfiguration();
if (configuration.skipDownload) {
logPolitely('**INFO** Skipping downloading browsers as instructed.');
return;
}
const platform = detectBrowserPlatform();
if (!platform) {
throw new Error('The current platform is not supported.');
}
const cacheDir = configuration.cacheDirectory!;
const installationJobs = [];
if (configuration.chrome?.skipDownload) {
logPolitely('**INFO** Skipping Chrome download as instructed.');
} else {
const browser = Browser.CHROME;
installationJobs.push(
downloadBrowser({
browser,
configuration: configuration[browser] ?? {},
cacheDir,
platform,
}),
);
}
if (configuration['chrome-headless-shell']?.skipDownload) {
logPolitely('**INFO** Skipping Chrome download as instructed.');
} else {
const browser = Browser.CHROMEHEADLESSSHELL;
installationJobs.push(
downloadBrowser({
browser,
configuration: configuration[browser] ?? {},
cacheDir,
platform,
}),
);
}
if (configuration.firefox?.skipDownload) {
logPolitely('**INFO** Skipping Firefox download as instructed.');
} else {
const browser = Browser.FIREFOX;
installationJobs.push(
downloadBrowser({
browser,
configuration: configuration[browser] ?? {},
cacheDir,
platform,
}),
);
}
const results = await Promise.allSettled(installationJobs);
// Log success messages only after all downloads+extraction complete so they
// never land mid-progress-bar while the cursor is on a bar line.
for (const result of results) {
if (result.status === 'fulfilled') {
logPolitely(result.value);
}
}
const failures = results.filter(r => {
return r.status === 'rejected';
});
if (failures.length > 0) {
for (const failure of failures) {
console.error(failure.reason);
}
process.exit(1);
}
}
/**
* @internal
*/
function logPolitely(toBeLogged: unknown): void {
const logLevel = process.env['npm_config_loglevel'] || '';
const logLevelDisplay = ['silent', 'error', 'warn'].indexOf(logLevel) > -1;
if (!logLevelDisplay) {
console.log(toBeLogged);
}
}
/**
* @internal
*/
function overrideProxy() {
// Override current environment proxy settings with npm configuration, if any.
const NPM_HTTPS_PROXY =
process.env['npm_config_https_proxy'] || process.env['npm_config_proxy'];
const NPM_HTTP_PROXY =
process.env['npm_config_http_proxy'] || process.env['npm_config_proxy'];
const NPM_NO_PROXY = process.env['npm_config_no_proxy'];
if (NPM_HTTPS_PROXY) {
process.env['HTTPS_PROXY'] = NPM_HTTPS_PROXY;
}
if (NPM_HTTP_PROXY) {
process.env['HTTP_PROXY'] = NPM_HTTP_PROXY;
}
if (NPM_NO_PROXY) {
process.env['NO_PROXY'] = NPM_NO_PROXY;
}
}

45
node_modules/puppeteer/src/puppeteer.ts generated vendored Normal file
View File

@@ -0,0 +1,45 @@
/**
* @license
* Copyright 2017 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
export * from 'puppeteer-core';
import {PuppeteerNode} from 'puppeteer-core';
import {getConfiguration} from './getConfiguration.js';
/**
* @public
*/
// @ts-expect-error using internal API.
const puppeteer = new PuppeteerNode({
isPuppeteerCore: false,
configuration: getConfiguration,
});
export const {
/**
* @public
*/
connect,
/**
* @public
*/
defaultArgs,
/**
* @public
*/
executablePath,
/**
* @public
*/
launch,
/**
* @public
*/
trimCache,
} = puppeteer;
export default puppeteer;