BREAKING!!!! Start using puppeteer.defaultArgs instead of just including them in this package
browser = await puppeteer.launch({
- args: chromium.args,
+ args: puppeteer.defaultArgs({
+ args: chromium.args,
+ }),
This commit is contained in:
parent
3e6aa79fb8
commit
9f3b102e5e
|
|
@ -8,7 +8,9 @@ exports.handler = async (event, context) => {
|
|||
|
||||
try {
|
||||
browser = await puppeteer.launch({
|
||||
args: chromium.args,
|
||||
args: puppeteer.defaultArgs({
|
||||
args: chromium.args,
|
||||
}),
|
||||
defaultViewport: chromium.defaultViewport,
|
||||
dumpio: true,
|
||||
executablePath: await chromium.executablePath(),
|
||||
|
|
|
|||
102
source/index.ts
102
source/index.ts
|
|
@ -169,110 +169,60 @@ class Chromium {
|
|||
/**
|
||||
* Returns a list of additional Chromium flags recommended for serverless environments.
|
||||
* The canonical list of flags can be found on https://peter.sh/experiments/chromium-command-line-switches/.
|
||||
* Most of below can be found here: https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md
|
||||
*/
|
||||
static get args(): string[] {
|
||||
/**
|
||||
* These are the default args in puppeteer.
|
||||
* https://github.com/puppeteer/puppeteer/blob/3a31070d054fa3cd8116ca31c578807ed8d6f987/packages/puppeteer-core/src/node/ChromeLauncher.ts#L185
|
||||
*/
|
||||
const puppeteerFlags = [
|
||||
"--allow-pre-commit-input",
|
||||
"--disable-background-networking",
|
||||
"--disable-background-timer-throttling",
|
||||
"--disable-backgrounding-occluded-windows",
|
||||
"--disable-breakpad",
|
||||
"--disable-client-side-phishing-detection",
|
||||
"--disable-component-extensions-with-background-pages",
|
||||
"--disable-component-update",
|
||||
"--disable-default-apps",
|
||||
"--disable-dev-shm-usage",
|
||||
"--disable-extensions",
|
||||
"--disable-hang-monitor",
|
||||
"--disable-ipc-flooding-protection",
|
||||
"--disable-popup-blocking",
|
||||
"--disable-prompt-on-repost",
|
||||
"--disable-renderer-backgrounding",
|
||||
"--disable-sync",
|
||||
"--enable-automation",
|
||||
// TODO(sadym): remove '--enable-blink-features=IdleDetection' once
|
||||
// IdleDetection is turned on by default.
|
||||
"--enable-blink-features=IdleDetection",
|
||||
"--export-tagged-pdf",
|
||||
"--force-color-profile=srgb",
|
||||
"--metrics-recording-only",
|
||||
"--no-first-run",
|
||||
"--password-store=basic",
|
||||
"--use-mock-keychain",
|
||||
];
|
||||
const puppeteerDisableFeatures = [
|
||||
"Translate",
|
||||
"BackForwardCache",
|
||||
// AcceptCHFrame disabled because of crbug.com/1348106.
|
||||
"AcceptCHFrame",
|
||||
"MediaRouter",
|
||||
"OptimizationHints",
|
||||
];
|
||||
const puppeteerEnableFeatures = ["NetworkServiceInProcess2"];
|
||||
|
||||
const chromiumFlags = [
|
||||
"--disable-domain-reliability", // https://github.com/GoogleChrome/chrome-launcher/blob/main/docs/chrome-flags-for-tools.md#background-networking
|
||||
"--ash-no-nudges", // Avoids blue bubble "user education" nudges (eg., "… give your browser a new look", Memory Saver)
|
||||
"--disable-domain-reliability", // Disables Domain Reliability Monitoring, which tracks whether the browser has difficulty contacting Google-owned sites and uploads reports to Google.
|
||||
"--disable-print-preview", // https://source.chromium.org/search?q=lang:cpp+symbol:kDisablePrintPreview&ss=chromium
|
||||
"--disable-speech-api", // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSpeechAPI&ss=chromium
|
||||
// "--disable-speech-api", // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSpeechAPI&ss=chromium
|
||||
"--disk-cache-size=33554432", // https://source.chromium.org/search?q=lang:cpp+symbol:kDiskCacheSize&ss=chromium
|
||||
"--mute-audio", // https://source.chromium.org/search?q=lang:cpp+symbol:kMuteAudio&ss=chromium
|
||||
"--no-default-browser-check", // https://source.chromium.org/search?q=lang:cpp+symbol:kNoDefaultBrowserCheck&ss=chromium
|
||||
"--no-pings", // https://source.chromium.org/search?q=lang:cpp+symbol:kNoPings&ss=chromium
|
||||
"--single-process", // Needs to be single-process to avoid `prctl(PR_SET_NO_NEW_PRIVS) failed` error
|
||||
"--no-default-browser-check", // Disable the default browser check, do not prompt to set it as such
|
||||
"--no-pings", // Don't send hyperlink auditing pings
|
||||
"--single-process", // Runs the renderer and plugins in the same process as the browser. NOTES: Needs to be single-process to avoid `prctl(PR_SET_NO_NEW_PRIVS) failed` error
|
||||
"--font-render-hinting=none", // https://github.com/puppeteer/puppeteer/issues/2410#issuecomment-560573612
|
||||
];
|
||||
const chromiumDisableFeatures = [
|
||||
// "AutofillServerCommunication", // Disables autofill server communication. This feature isn't disabled via other 'parent' flags.
|
||||
"AudioServiceOutOfProcess",
|
||||
// "DestroyProfileOnBrowserClose", // Disable the feature of: Destroy profiles when their last browser window is closed, instead of when the browser exits.
|
||||
// "InterestFeedContentSuggestions", // Disables the Discover feed on NTP
|
||||
"IsolateOrigins",
|
||||
"site-per-process",
|
||||
"site-per-process", // Disables OOPIF. https://www.chromium.org/Home/chromium-security/site-isolation
|
||||
];
|
||||
const chromiumEnableFeatures = ["SharedArrayBuffer"];
|
||||
|
||||
const graphicsFlags = [
|
||||
"--hide-scrollbars", // https://source.chromium.org/search?q=lang:cpp+symbol:kHideScrollbars&ss=chromium
|
||||
"--ignore-gpu-blocklist", // https://source.chromium.org/search?q=lang:cpp+symbol:kIgnoreGpuBlocklist&ss=chromium
|
||||
"--in-process-gpu", // https://source.chromium.org/search?q=lang:cpp+symbol:kInProcessGPU&ss=chromium
|
||||
"--window-size=1920,1080", // https://source.chromium.org/search?q=lang:cpp+symbol:kWindowSize&ss=chromium
|
||||
"--in-process-gpu", // Saves some memory by moving GPU process into a browser process thread
|
||||
"--window-size=1920,1080", // Sets the initial window size. Provided as string in the format "800,600".
|
||||
];
|
||||
|
||||
// https://chromium.googlesource.com/chromium/src/+/main/docs/gpu/swiftshader.md
|
||||
// Blocked by https://github.com/Sparticuz/chromium/issues/247
|
||||
//this.graphics
|
||||
// ? graphicsFlags.push("--use-gl=angle", "--use-angle=swiftshader")
|
||||
// : graphicsFlags.push("--disable-webgl");
|
||||
graphicsFlags.push("--use-gl=angle", "--use-angle=swiftshader");
|
||||
// https://developer.chrome.com/blog/supercharge-web-ai-testing
|
||||
// https://www.browserless.io/blog/2023/08/31/browserless-gpu-instances/
|
||||
this.graphics &&
|
||||
graphicsFlags.push(
|
||||
"--enable-gpu",
|
||||
"--use-gl=angle",
|
||||
"--use-angle=swiftshader"
|
||||
);
|
||||
|
||||
const insecureFlags = [
|
||||
"--allow-running-insecure-content", // https://source.chromium.org/search?q=lang:cpp+symbol:kAllowRunningInsecureContent&ss=chromium
|
||||
"--disable-setuid-sandbox", // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSetuidSandbox&ss=chromium
|
||||
"--disable-setuid-sandbox", // Lambda runs as root, so this is required to allow Chromium to run as root
|
||||
"--disable-site-isolation-trials", // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSiteIsolation&ss=chromium
|
||||
"--disable-web-security", // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableWebSecurity&ss=chromium
|
||||
"--no-sandbox", // https://source.chromium.org/search?q=lang:cpp+symbol:kNoSandbox&ss=chromium
|
||||
"--no-zygote", // https://source.chromium.org/search?q=lang:cpp+symbol:kNoZygote&ss=chromium
|
||||
];
|
||||
|
||||
const headlessFlags = [
|
||||
this.headless === "shell" ? "--headless='shell'" : "--headless",
|
||||
"--no-sandbox", // Lambda runs as root, so this is required to allow Chromium to run as root
|
||||
"--no-zygote", // https://codereview.chromium.org/2384163002
|
||||
];
|
||||
|
||||
return [
|
||||
...puppeteerFlags,
|
||||
...chromiumFlags,
|
||||
`--disable-features=${[
|
||||
...puppeteerDisableFeatures,
|
||||
...chromiumDisableFeatures,
|
||||
].join(",")}`,
|
||||
`--enable-features=${[
|
||||
...puppeteerEnableFeatures,
|
||||
...chromiumEnableFeatures,
|
||||
].join(",")}`,
|
||||
`--disable-features=${[...chromiumDisableFeatures].join(",")}`,
|
||||
`--enable-features=${[...chromiumEnableFeatures].join(",")}`,
|
||||
...graphicsFlags,
|
||||
...insecureFlags,
|
||||
...headlessFlags,
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue