Playwright附带的Java驱动程序不适用于Alpine,因为它们不使用静态链接的MUSL构建。
xytpbqjk1#
在您的Alpine映像中,从Alpine存储库安装nodejs和chromium,并设置env变量,告诉Playwright使用它们而不是自己的驱动程序:
nodejs
chromium
echo "https://dl-cdn.alpinelinux.org/alpine/edge/main" > /etc/apk/repositories \ && echo "https://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \ && echo "https://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \ && echo "https://dl-cdn.alpinelinux.org/alpine/v3.16/main" >> /etc/apk/repositories \ && echo "https://dl-cdn.alpinelinux.org/alpine/v3.16/community" \ && apk upgrade -U -a \ && apk add \ libstdc++ \ chromium \ harfbuzz \ nss \ freetype \ ttf-freefont \ font-noto-emoji \ wqy-zenhei \ nodejs \ && rm -rf /var/cache/* \ && mkdir /var/cache/apk export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 export PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium-browser export PLAYWRIGHT_NODEJS_PATH=/usr/bin/node
然后,在Java或Kotlin代码中,您必须自己处理自定义浏览器位置:
abstract class AbstractBrowserTest(private val headless: Boolean = true) { private val playwright: Playwright = Playwright.create() private val browser: Browser = launchBrowser() private fun launchBrowser(): Browser { val env = System.getenv("PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH") return if (env != null && env.isNotBlank()) { playwright.chromium().launch(LaunchOptions().setHeadless(true).setExecutablePath(Paths.get(env))) } else { playwright.chromium().launch(LaunchOptions().setHeadless(headless)) } } }
prop 到https://github.com/fivemru/playwright-docker-alpine的灵感!
1条答案
按热度按时间xytpbqjk1#
在您的Alpine映像中,从Alpine存储库安装
nodejs
和chromium
,并设置env变量,告诉Playwright使用它们而不是自己的驱动程序:然后,在Java或Kotlin代码中,您必须自己处理自定义浏览器位置:
prop 到https://github.com/fivemru/playwright-docker-alpine的灵感!