diff --git a/images/chromium-headful/Dockerfile b/images/chromium-headful/Dockerfile index 90935726..974c733c 100644 --- a/images/chromium-headful/Dockerfile +++ b/images/chromium-headful/Dockerfile @@ -276,8 +276,8 @@ RUN set -eux; \ ln -sf /usr/local/lib/node_modules/corepack/dist/corepack.js /usr/local/bin/corepack; \ fi -# Install TypeScript and Playwright globally -RUN --mount=type=cache,target=/root/.npm,id=$CACHEIDPREFIX-npm npm install -g typescript playwright-core tsx +# Install TypeScript, Playwright, Patchright globally +RUN --mount=type=cache,target=/root/.npm,id=$CACHEIDPREFIX-npm npm install -g typescript playwright-core patchright tsx # setup desktop env & app ENV DISPLAY_NUM=1 diff --git a/images/chromium-headful/run-docker.sh b/images/chromium-headful/run-docker.sh index 0202b91a..c3a2972b 100755 --- a/images/chromium-headful/run-docker.sh +++ b/images/chromium-headful/run-docker.sh @@ -66,6 +66,10 @@ RUN_ARGS=( --mount type=bind,src="$FLAGS_FILE",dst=/chromium/flags,ro ) +if [[ -n "${PLAYWRIGHT_ENGINE:-}" ]]; then + RUN_ARGS+=( -e PLAYWRIGHT_ENGINE="$PLAYWRIGHT_ENGINE" ) +fi + # WebRTC port mapping if [[ "${ENABLE_WEBRTC:-}" == "true" ]]; then echo "Running container with WebRTC" diff --git a/images/chromium-headless/image/Dockerfile b/images/chromium-headless/image/Dockerfile index d6229082..f00ad08c 100644 --- a/images/chromium-headless/image/Dockerfile +++ b/images/chromium-headless/image/Dockerfile @@ -179,8 +179,8 @@ RUN set -eux; \ ln -sf /usr/local/lib/node_modules/corepack/dist/corepack.js /usr/local/bin/corepack; \ fi -# Install TypeScript and Playwright globally -RUN --mount=type=cache,target=/root/.npm,id=$CACHEIDPREFIX-npm npm install -g typescript playwright-core tsx +# Install TypeScript, Playwright, Patchright globally +RUN --mount=type=cache,target=/root/.npm,id=$CACHEIDPREFIX-npm npm install -g typescript playwright-core patchright tsx ENV WITHDOCKER=true diff --git a/images/chromium-headless/image/wrapper.sh b/images/chromium-headless/image/wrapper.sh index 6ecba0ae..36bddbb4 100755 --- a/images/chromium-headless/image/wrapper.sh +++ b/images/chromium-headless/image/wrapper.sh @@ -44,12 +44,9 @@ if [ -z "${CHROMIUM_FLAGS:-}" ]; then --disable-breakpad \ --disable-client-side-phishing-detection \ --disable-component-extensions-with-background-pages \ - --disable-component-update \ --disable-crash-reporter \ --disable-crashpad \ - --disable-default-apps \ --disable-dev-shm-usage \ - --disable-extensions \ --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DeferRendererTasksAfterInput,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate \ --disable-field-trial-config \ --disable-gcm-registration \ @@ -63,7 +60,6 @@ if [ -z "${CHROMIUM_FLAGS:-}" ]; then --disable-renderer-backgrounding \ --disable-search-engine-choice-screen \ --disable-software-rasterizer \ - --enable-automation \ --enable-use-zoom-for-dsf=false \ --export-tagged-pdf \ --force-color-profile=srgb \ diff --git a/images/chromium-headless/run-docker.sh b/images/chromium-headless/run-docker.sh index 62d74337..df9b88d1 100755 --- a/images/chromium-headless/run-docker.sh +++ b/images/chromium-headless/run-docker.sh @@ -19,6 +19,10 @@ RUN_ARGS=( -v "$HOST_RECORDINGS_DIR:/recordings" ) +if [[ -n "${PLAYWRIGHT_ENGINE:-}" ]]; then + RUN_ARGS+=( -e PLAYWRIGHT_ENGINE="$PLAYWRIGHT_ENGINE" ) +fi + # If a positional argument is given, use it as the entrypoint ENTRYPOINT_ARG=() if [[ $# -ge 1 && -n "$1" ]]; then diff --git a/server/runtime/playwright-executor.ts b/server/runtime/playwright-executor.ts index 5246eab4..7bb87052 100644 --- a/server/runtime/playwright-executor.ts +++ b/server/runtime/playwright-executor.ts @@ -1,5 +1,6 @@ import { readFileSync } from 'fs'; -import { chromium } from 'playwright-core'; +import { chromium as chromiumPW } from 'playwright-core'; +import { chromium as chromiumPR } from 'patchright'; async function main() { const codeFilePath = process.argv[2]; @@ -24,6 +25,8 @@ async function main() { let result; try { + const chromium = process.env.PLAYWRIGHT_ENGINE === 'patchright' ? chromiumPR : chromiumPW; + browser = await chromium.connectOverCDP('ws://127.0.0.1:9222'); const contexts = browser.contexts(); const context = contexts.length > 0 ? contexts[0] : await browser.newContext();