mirror of
https://github.com/CloakHQ/CloakBrowser.git
synced 2026-06-23 11:41:46 +02:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5d35fb9e4c | ||
|
|
c966e046e7 |
@@ -59,6 +59,9 @@ jobs:
|
|||||||
needs: [test, validate-version]
|
needs: [test, validate-version]
|
||||||
if: always() && needs.test.result == 'success' && (needs.validate-version.result == 'success' || needs.validate-version.result == 'skipped')
|
if: always() && needs.test.result == 'success' && (needs.validate-version.result == 'success' || needs.validate-version.result == 'skipped')
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
environment:
|
||||||
|
name: pypi
|
||||||
|
url: https://pypi.org/p/cloakbrowser
|
||||||
permissions:
|
permissions:
|
||||||
id-token: write # OIDC trusted publishing — no PYPI_TOKEN needed
|
id-token: write # OIDC trusted publishing — no PYPI_TOKEN needed
|
||||||
steps:
|
steps:
|
||||||
@@ -77,6 +80,9 @@ jobs:
|
|||||||
needs: [test, validate-version]
|
needs: [test, validate-version]
|
||||||
if: always() && needs.test.result == 'success' && (needs.validate-version.result == 'success' || needs.validate-version.result == 'skipped')
|
if: always() && needs.test.result == 'success' && (needs.validate-version.result == 'success' || needs.validate-version.result == 'skipped')
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
environment:
|
||||||
|
name: npm
|
||||||
|
url: https://www.npmjs.com/package/cloakbrowser
|
||||||
permissions:
|
permissions:
|
||||||
id-token: write # OIDC trusted publishing + provenance — no NPM_TOKEN needed
|
id-token: write # OIDC trusted publishing + provenance — no NPM_TOKEN needed
|
||||||
steps:
|
steps:
|
||||||
@@ -96,6 +102,9 @@ jobs:
|
|||||||
needs: [test, validate-version]
|
needs: [test, validate-version]
|
||||||
if: always() && needs.test.result == 'success' && (needs.validate-version.result == 'success' || needs.validate-version.result == 'skipped')
|
if: always() && needs.test.result == 'success' && (needs.validate-version.result == 'success' || needs.validate-version.result == 'skipped')
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
environment:
|
||||||
|
name: docker
|
||||||
|
url: https://hub.docker.com/r/cloakhq/cloakbrowser
|
||||||
permissions:
|
permissions:
|
||||||
id-token: write # Cosign keyless signing + attestations
|
id-token: write # Cosign keyless signing + attestations
|
||||||
contents: read
|
contents: read
|
||||||
|
|||||||
@@ -6,6 +6,11 @@ Changes are tagged: **[wrapper]** for Python/JS wrapper, **[binary]** for Chromi
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## [0.3.13] — 2026-03-10
|
||||||
|
|
||||||
|
- **[wrapper]** Suppress Playwright's `--enable-unsafe-swiftshader` default arg — eliminates SwiftShader software renderer detection signal, letting the binary's GPU spoofing work cleanly
|
||||||
|
- **[binary]** Upgrade Linux build to 145.0.7632.159.5 — fix WebGPU adapter limits and features for NVIDIA profiles
|
||||||
|
|
||||||
## [0.3.12] — 2026-03-10
|
## [0.3.12] — 2026-03-10
|
||||||
|
|
||||||
- **[binary]** Upgrade Linux build to 145.0.7632.159.4
|
- **[binary]** Upgrade Linux build to 145.0.7632.159.4
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ page.goto("https://example.com")
|
|||||||
|
|
||||||
> ⭐ **Star** to show support — **[Watch releases](https://github.com/CloakHQ/CloakBrowser/subscription)** to get notified when new builds drop.
|
> ⭐ **Star** to show support — **[Watch releases](https://github.com/CloakHQ/CloakBrowser/subscription)** to get notified when new builds drop.
|
||||||
|
|
||||||
## Latest: v0.3.12 (Chromium 145.0.7632.159.4)
|
## Latest: v0.3.13 (Chromium 145.0.7632.159.5)
|
||||||
|
|
||||||
- **`humanize=True`** — one flag makes all mouse, keyboard, and scroll interactions behave like a real user. Bézier curves, per-character typing, realistic scroll patterns. Two presets: `default` and `careful`
|
- **`humanize=True`** — one flag makes all mouse, keyboard, and scroll interactions behave like a real user. Bézier curves, per-character typing, realistic scroll patterns. Two presets: `default` and `careful`
|
||||||
- **CDP input behavior mimicking** — input events sent via CDP now produce the same signals as real user interactions. 5 new source-level patches covering pointer, keyboard, and mouse behavior
|
- **CDP input behavior mimicking** — input events sent via CDP now produce the same signals as real user interactions. 5 new source-level patches covering pointer, keyboard, and mouse behavior
|
||||||
@@ -718,7 +718,9 @@ CloakBrowser works identically local, in Docker, and on VPS. No environment-spec
|
|||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
**Still getting blocked on aggressive sites (DataDome, Turnstile)?**
|
---
|
||||||
|
|
||||||
|
### Still getting blocked on aggressive sites (DataDome, Turnstile)?
|
||||||
|
|
||||||
Some sites detect headless mode even with our C++ patches. Run in **headed mode** with a virtual display:
|
Some sites detect headless mode even with our C++ patches. Run in **headed mode** with a virtual display:
|
||||||
|
|
||||||
@@ -743,7 +745,9 @@ browser.close()
|
|||||||
|
|
||||||
This runs a real headed browser rendered on a virtual display — no physical monitor needed. Combined with a residential proxy, this passes even the most aggressive detection services. Datacenter IPs are often flagged by IP reputation regardless of browser fingerprint — a residential proxy makes the difference.
|
This runs a real headed browser rendered on a virtual display — no physical monitor needed. Combined with a residential proxy, this passes even the most aggressive detection services. Datacenter IPs are often flagged by IP reputation regardless of browser fingerprint — a residential proxy makes the difference.
|
||||||
|
|
||||||
**Sites challenge fresh sessions but work after first visit**
|
---
|
||||||
|
|
||||||
|
### Sites challenge fresh sessions but work after first visit
|
||||||
|
|
||||||
Some sites challenge first-time visitors with no cookies over HTTP/2. This affects all Chromium browsers, not just CloakBrowser. Use a persistent profile to warm up cookies once, then reuse across sessions:
|
Some sites challenge first-time visitors with no cookies over HTTP/2. This affects all Chromium browsers, not just CloakBrowser. Use a persistent profile to warm up cookies once, then reuse across sessions:
|
||||||
|
|
||||||
@@ -777,7 +781,10 @@ ctx = await launchPersistentContext({ userDataDir: './profile' });
|
|||||||
|
|
||||||
For stateless/ephemeral use cases, `launch(args=["--disable-http2"])` forces HTTP/1.1 which bypasses the check. Only use this flag for sites that require it — most work fine with HTTP/2.
|
For stateless/ephemeral use cases, `launch(args=["--disable-http2"])` forces HTTP/1.1 which bypasses the check. Only use this flag for sites that require it — most work fine with HTTP/2.
|
||||||
|
|
||||||
**Something not working? Make sure you're on the latest version**
|
---
|
||||||
|
|
||||||
|
### Something not working? Make sure you're on the latest version
|
||||||
|
|
||||||
Older versions may use outdated stealth args or download an older binary:
|
Older versions may use outdated stealth args or download an older binary:
|
||||||
```bash
|
```bash
|
||||||
pip install -U cloakbrowser # Python
|
pip install -U cloakbrowser # Python
|
||||||
@@ -785,13 +792,19 @@ npm install cloakbrowser@latest # JavaScript
|
|||||||
docker pull cloakhq/cloakbrowser:latest # Docker
|
docker pull cloakhq/cloakbrowser:latest # Docker
|
||||||
```
|
```
|
||||||
|
|
||||||
**Binary download fails / timeout**
|
---
|
||||||
|
|
||||||
|
### Binary download fails / timeout
|
||||||
|
|
||||||
Set a custom download URL or use a local binary:
|
Set a custom download URL or use a local binary:
|
||||||
```bash
|
```bash
|
||||||
export CLOAKBROWSER_BINARY_PATH=/path/to/your/chrome
|
export CLOAKBROWSER_BINARY_PATH=/path/to/your/chrome
|
||||||
```
|
```
|
||||||
|
|
||||||
**New update broke something? Roll back to the previous version**
|
---
|
||||||
|
|
||||||
|
### New update broke something? Roll back to the previous version
|
||||||
|
|
||||||
Install a specific wrapper version to downgrade both the wrapper and the binary it downloads:
|
Install a specific wrapper version to downgrade both the wrapper and the binary it downloads:
|
||||||
```bash
|
```bash
|
||||||
pip install cloakbrowser==0.3.11 # Python
|
pip install cloakbrowser==0.3.11 # Python
|
||||||
@@ -800,23 +813,33 @@ docker pull cloakhq/cloakbrowser:0.3.11 # Docker
|
|||||||
```
|
```
|
||||||
Each wrapper version pins its own binary version, so downgrading the wrapper automatically gets you the matching binary on next launch.
|
Each wrapper version pins its own binary version, so downgrading the wrapper automatically gets you the matching binary on next launch.
|
||||||
|
|
||||||
**macOS: "App is damaged" or Gatekeeper blocks launch**
|
---
|
||||||
|
|
||||||
|
### macOS: "App is damaged" or Gatekeeper blocks launch
|
||||||
|
|
||||||
The binary is ad-hoc signed. macOS quarantines downloaded files. Run once to clear it:
|
The binary is ad-hoc signed. macOS quarantines downloaded files. Run once to clear it:
|
||||||
```bash
|
```bash
|
||||||
xattr -cr ~/.cloakbrowser/chromium-*/Chromium.app
|
xattr -cr ~/.cloakbrowser/chromium-*/Chromium.app
|
||||||
```
|
```
|
||||||
|
|
||||||
**"playwright install" vs CloakBrowser binary**
|
---
|
||||||
|
|
||||||
|
### "playwright install" vs CloakBrowser binary
|
||||||
|
|
||||||
You do NOT need `playwright install chromium`. CloakBrowser downloads its own binary. You only need Playwright's system deps:
|
You do NOT need `playwright install chromium`. CloakBrowser downloads its own binary. You only need Playwright's system deps:
|
||||||
```bash
|
```bash
|
||||||
playwright install-deps chromium
|
playwright install-deps chromium
|
||||||
```
|
```
|
||||||
|
|
||||||
**macOS: Blocked on some sites that pass on Linux**
|
---
|
||||||
|
|
||||||
|
### macOS: Blocked on some sites that pass on Linux
|
||||||
|
|
||||||
The macOS fingerprint profile has known inconsistencies that aggressive bot detection catches. If a site blocks you on macOS but works on Linux, switch to a Windows fingerprint profile by passing `stealth_args=False` and manually setting `--fingerprint-platform=windows` with matching GPU flags (see [Fingerprint Management](#fingerprint-management) for the full flag list).
|
The macOS fingerprint profile has known inconsistencies that aggressive bot detection catches. If a site blocks you on macOS but works on Linux, switch to a Windows fingerprint profile by passing `stealth_args=False` and manually setting `--fingerprint-platform=windows` with matching GPU flags (see [Fingerprint Management](#fingerprint-management) for the full flag list).
|
||||||
|
|
||||||
**Site detects incognito / private browsing mode**
|
---
|
||||||
|
|
||||||
|
### Site detects incognito / private browsing mode
|
||||||
|
|
||||||
By default, `launch()` opens an incognito context. Some sites (like BrowserScan) detect this. Use `launch_persistent_context()` instead — it runs with a real user profile, so incognito detection passes:
|
By default, `launch()` opens an incognito context. Some sites (like BrowserScan) detect this. Use `launch_persistent_context()` instead — it runs with a real user profile, so incognito detection passes:
|
||||||
|
|
||||||
@@ -838,7 +861,9 @@ const ctx = await launchPersistentContext({
|
|||||||
|
|
||||||
This also gives you cookie and localStorage persistence across sessions.
|
This also gives you cookie and localStorage persistence across sessions.
|
||||||
|
|
||||||
**reCAPTCHA v3 scores are low (0.1–0.3)**
|
---
|
||||||
|
|
||||||
|
### reCAPTCHA v3 scores are low (0.1–0.3)
|
||||||
|
|
||||||
Avoid `page.wait_for_timeout()` — it sends CDP protocol commands that reCAPTCHA detects. Use native sleep instead:
|
Avoid `page.wait_for_timeout()` — it sends CDP protocol commands that reCAPTCHA detects. Use native sleep instead:
|
||||||
|
|
||||||
@@ -908,15 +933,21 @@ A: Yes. Pass `proxy="http://user:pass@host:port"` to `launch()`.
|
|||||||
|
|
||||||
## Security
|
## Security
|
||||||
|
|
||||||
All binary releases are GPG-signed and include GitHub artifact attestations for supply chain verification.
|
All releases are signed for supply chain verification.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Verify GPG signature
|
# Verify GPG signature (binary release tag)
|
||||||
gpg --keyserver keyserver.ubuntu.com --recv-keys C60C0DDC9D0DE2DD
|
gpg --keyserver keyserver.ubuntu.com --recv-keys C60C0DDC9D0DE2DD
|
||||||
git verify-tag chromium-v145.0.7632.159.4
|
git verify-tag chromium-v145.0.7632.159.5
|
||||||
|
|
||||||
# Verify binary attestation
|
# Verify GitHub binary attestation (Sigstore)
|
||||||
gh attestation verify cloakbrowser-linux-x64.tar.gz --repo CloakHQ/cloakbrowser
|
gh attestation verify cloakbrowser-linux-x64.tar.gz --repo CloakHQ/cloakbrowser
|
||||||
|
|
||||||
|
# Verify Docker image signature (Cosign/Sigstore)
|
||||||
|
cosign verify \
|
||||||
|
--certificate-identity-regexp "https://github.com/CloakHQ/CloakBrowser/" \
|
||||||
|
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
|
||||||
|
cloakhq/cloakbrowser:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
__version__ = "0.3.12"
|
__version__ = "0.3.13"
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import os
|
|||||||
from typing import Any, Literal, TypedDict
|
from typing import Any, Literal, TypedDict
|
||||||
from urllib.parse import unquote, urlparse, urlunparse
|
from urllib.parse import unquote, urlparse, urlunparse
|
||||||
|
|
||||||
from .config import DEFAULT_VIEWPORT, get_default_stealth_args
|
from .config import DEFAULT_VIEWPORT, IGNORE_DEFAULT_ARGS, get_default_stealth_args
|
||||||
from .download import ensure_binary
|
from .download import ensure_binary
|
||||||
|
|
||||||
logger = logging.getLogger("cloakbrowser")
|
logger = logging.getLogger("cloakbrowser")
|
||||||
@@ -111,7 +111,7 @@ def launch(
|
|||||||
executable_path=binary_path,
|
executable_path=binary_path,
|
||||||
headless=headless,
|
headless=headless,
|
||||||
args=chrome_args,
|
args=chrome_args,
|
||||||
ignore_default_args=["--enable-automation"],
|
ignore_default_args=IGNORE_DEFAULT_ARGS,
|
||||||
**_build_proxy_kwargs(proxy),
|
**_build_proxy_kwargs(proxy),
|
||||||
**kwargs,
|
**kwargs,
|
||||||
)
|
)
|
||||||
@@ -194,7 +194,7 @@ async def launch_async( # noqa: C901
|
|||||||
executable_path=binary_path,
|
executable_path=binary_path,
|
||||||
headless=headless,
|
headless=headless,
|
||||||
args=chrome_args,
|
args=chrome_args,
|
||||||
ignore_default_args=["--enable-automation"],
|
ignore_default_args=IGNORE_DEFAULT_ARGS,
|
||||||
**_build_proxy_kwargs(proxy),
|
**_build_proxy_kwargs(proxy),
|
||||||
**kwargs,
|
**kwargs,
|
||||||
)
|
)
|
||||||
@@ -305,7 +305,7 @@ def launch_persistent_context(
|
|||||||
executable_path=binary_path,
|
executable_path=binary_path,
|
||||||
headless=headless,
|
headless=headless,
|
||||||
args=chrome_args,
|
args=chrome_args,
|
||||||
ignore_default_args=["--enable-automation"],
|
ignore_default_args=IGNORE_DEFAULT_ARGS,
|
||||||
**_build_proxy_kwargs(proxy),
|
**_build_proxy_kwargs(proxy),
|
||||||
**context_kwargs,
|
**context_kwargs,
|
||||||
)
|
)
|
||||||
@@ -418,7 +418,7 @@ async def launch_persistent_context_async(
|
|||||||
executable_path=binary_path,
|
executable_path=binary_path,
|
||||||
headless=headless,
|
headless=headless,
|
||||||
args=chrome_args,
|
args=chrome_args,
|
||||||
ignore_default_args=["--enable-automation"],
|
ignore_default_args=IGNORE_DEFAULT_ARGS,
|
||||||
**_build_proxy_kwargs(proxy),
|
**_build_proxy_kwargs(proxy),
|
||||||
**context_kwargs,
|
**context_kwargs,
|
||||||
)
|
)
|
||||||
|
|||||||
+10
-2
@@ -15,15 +15,23 @@ from ._version import __version__
|
|||||||
# CHROMIUM_VERSION is the latest across all platforms (for display/reference).
|
# CHROMIUM_VERSION is the latest across all platforms (for display/reference).
|
||||||
# Use get_chromium_version() for the current platform's actual version.
|
# Use get_chromium_version() for the current platform's actual version.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
CHROMIUM_VERSION = "145.0.7632.159.4"
|
CHROMIUM_VERSION = "145.0.7632.159.5"
|
||||||
|
|
||||||
PLATFORM_CHROMIUM_VERSIONS: dict[str, str] = {
|
PLATFORM_CHROMIUM_VERSIONS: dict[str, str] = {
|
||||||
"linux-x64": "145.0.7632.159.4",
|
"linux-x64": "145.0.7632.159.5",
|
||||||
"darwin-arm64": "145.0.7632.109.2",
|
"darwin-arm64": "145.0.7632.109.2",
|
||||||
"darwin-x64": "145.0.7632.109.2",
|
"darwin-x64": "145.0.7632.109.2",
|
||||||
"windows-x64": "145.0.7632.109.2",
|
"windows-x64": "145.0.7632.109.2",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Playwright default args to suppress — these leak automation signals.
|
||||||
|
# --enable-automation: exposes navigator.webdriver = true
|
||||||
|
# --enable-unsafe-swiftshader: forces software WebGL rendering via SwiftShader,
|
||||||
|
# producing a distinctive renderer string that no real user browser has
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
IGNORE_DEFAULT_ARGS = ["--enable-automation", "--enable-unsafe-swiftshader"]
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Default stealth arguments passed to the patched Chromium binary.
|
# Default stealth arguments passed to the patched Chromium binary.
|
||||||
# These activate source-level fingerprint patches compiled into the binary.
|
# These activate source-level fingerprint patches compiled into the binary.
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "cloakbrowser",
|
"name": "cloakbrowser",
|
||||||
"version": "0.3.12",
|
"version": "0.3.13",
|
||||||
"description": "Stealth Chromium that passes every bot detection test. Drop-in Playwright/Puppeteer replacement with source-level fingerprint patches.",
|
"description": "Stealth Chromium that passes every bot detection test. Drop-in Playwright/Puppeteer replacement with source-level fingerprint patches.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
|
|||||||
+10
-2
@@ -27,10 +27,10 @@ export { WRAPPER_VERSION };
|
|||||||
// CHROMIUM_VERSION is the latest across all platforms (for display/reference).
|
// CHROMIUM_VERSION is the latest across all platforms (for display/reference).
|
||||||
// Use getChromiumVersion() for the current platform's actual version.
|
// Use getChromiumVersion() for the current platform's actual version.
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
export const CHROMIUM_VERSION = "145.0.7632.159.4";
|
export const CHROMIUM_VERSION = "145.0.7632.159.5";
|
||||||
|
|
||||||
export const PLATFORM_CHROMIUM_VERSIONS: Record<string, string> = {
|
export const PLATFORM_CHROMIUM_VERSIONS: Record<string, string> = {
|
||||||
"linux-x64": "145.0.7632.159.4",
|
"linux-x64": "145.0.7632.159.5",
|
||||||
"darwin-arm64": "145.0.7632.109.2",
|
"darwin-arm64": "145.0.7632.109.2",
|
||||||
"darwin-x64": "145.0.7632.109.2",
|
"darwin-x64": "145.0.7632.109.2",
|
||||||
"windows-x64": "145.0.7632.109.2",
|
"windows-x64": "145.0.7632.109.2",
|
||||||
@@ -188,6 +188,14 @@ export function getLocalBinaryOverride(): string | undefined {
|
|||||||
return process.env.CLOAKBROWSER_BINARY_PATH || undefined;
|
return process.env.CLOAKBROWSER_BINARY_PATH || undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Playwright default args to suppress — these leak automation signals.
|
||||||
|
// --enable-automation: exposes navigator.webdriver = true
|
||||||
|
// --enable-unsafe-swiftshader: forces software WebGL rendering via SwiftShader,
|
||||||
|
// producing a distinctive renderer string that no real user browser has
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
export const IGNORE_DEFAULT_ARGS = ["--enable-automation", "--enable-unsafe-swiftshader"];
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Default stealth arguments
|
// Default stealth arguments
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import type { Browser, BrowserContext } from "playwright-core";
|
import type { Browser, BrowserContext } from "playwright-core";
|
||||||
import type { LaunchOptions, LaunchContextOptions, LaunchPersistentContextOptions } from "./types.js";
|
import type { LaunchOptions, LaunchContextOptions, LaunchPersistentContextOptions } from "./types.js";
|
||||||
import { DEFAULT_VIEWPORT } from "./config.js";
|
import { DEFAULT_VIEWPORT, IGNORE_DEFAULT_ARGS } from "./config.js";
|
||||||
import { buildArgs } from "./args.js";
|
import { buildArgs } from "./args.js";
|
||||||
import { ensureBinary } from "./download.js";
|
import { ensureBinary } from "./download.js";
|
||||||
import { parseProxyUrl } from "./proxy.js";
|
import { parseProxyUrl } from "./proxy.js";
|
||||||
@@ -45,7 +45,7 @@ export async function launch(options: LaunchOptions = {}): Promise<Browser> {
|
|||||||
executablePath: binaryPath,
|
executablePath: binaryPath,
|
||||||
headless: options.headless ?? true,
|
headless: options.headless ?? true,
|
||||||
args,
|
args,
|
||||||
ignoreDefaultArgs: ["--enable-automation"],
|
ignoreDefaultArgs: IGNORE_DEFAULT_ARGS,
|
||||||
...(options.proxy
|
...(options.proxy
|
||||||
? { proxy: typeof options.proxy === "string" ? parseProxyUrl(options.proxy) : options.proxy }
|
? { proxy: typeof options.proxy === "string" ? parseProxyUrl(options.proxy) : options.proxy }
|
||||||
: {}),
|
: {}),
|
||||||
@@ -163,7 +163,7 @@ export async function launchPersistentContext(
|
|||||||
executablePath: binaryPath,
|
executablePath: binaryPath,
|
||||||
headless: options.headless ?? true,
|
headless: options.headless ?? true,
|
||||||
args,
|
args,
|
||||||
ignoreDefaultArgs: ["--enable-automation"],
|
ignoreDefaultArgs: IGNORE_DEFAULT_ARGS,
|
||||||
...(options.proxy
|
...(options.proxy
|
||||||
? { proxy: typeof options.proxy === "string" ? parseProxyUrl(options.proxy) : options.proxy }
|
? { proxy: typeof options.proxy === "string" ? parseProxyUrl(options.proxy) : options.proxy }
|
||||||
: {}),
|
: {}),
|
||||||
|
|||||||
+2
-1
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
import type { Browser } from "puppeteer-core";
|
import type { Browser } from "puppeteer-core";
|
||||||
import type { LaunchOptions } from "./types.js";
|
import type { LaunchOptions } from "./types.js";
|
||||||
|
import { IGNORE_DEFAULT_ARGS } from "./config.js";
|
||||||
import { buildArgs } from "./args.js";
|
import { buildArgs } from "./args.js";
|
||||||
import { ensureBinary } from "./download.js";
|
import { ensureBinary } from "./download.js";
|
||||||
import { parseProxyUrl } from "./proxy.js";
|
import { parseProxyUrl } from "./proxy.js";
|
||||||
@@ -62,7 +63,7 @@ export async function launch(options: LaunchOptions = {}): Promise<Browser> {
|
|||||||
executablePath: binaryPath,
|
executablePath: binaryPath,
|
||||||
headless: options.headless ?? true,
|
headless: options.headless ?? true,
|
||||||
args,
|
args,
|
||||||
ignoreDefaultArgs: ["--enable-automation"],
|
ignoreDefaultArgs: IGNORE_DEFAULT_ARGS,
|
||||||
...options.launchOptions,
|
...options.launchOptions,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user