前言
Dockerfile.focal可用于在 Docker 环境中运行 Playwright 脚本。这些镜像包括在 Docker 容器中运行浏览器所需的所有依赖项,还包括浏览器本身。
playwright 在linux 系统上目前只支持Ubuntu 系统的部分版本,centos 和debian系统上是没法运行的。
镜像
查看所有可用的图像标签https://mcr.microsoft.com/en-us/product/playwright/python/about。
Docker 镜像由 GitHub Actions 自动发布。我们目前发布带有以下标签的图像(v1.20.0在本例中是一个示例:):
- :next- 基于 Ubuntu 20.04 LTS (Focal Fossa) 的 tip-of-tree 镜像版本。
- :next-focal- 基于 Ubuntu 20.04 LTS (Focal Fossa) 的 tip-of-tree 镜像版本。
- :v1.20.0- Playwright v1.20.0 发布基于 Ubuntu 20.04 LTS (Focal Fossa) 的 docker 镜像。
- :v1.20.0-focal- Playwright v1.20.0 发布基于 Ubuntu 20.04 LTS (Focal Fossa) 的 docker 镜像。
- :sha-XXXXXXX- 每个更改 docker 文件或浏览器的提交的 docker 图像,用短 sha标记(SHA 提交的前 7 位数字)。
如果可能,建议始终将 Docker 映像固定到特定版本。如果 Docker 映像中的 Playwright 版本与项目/测试中的版本不匹配,Playwright 将无法找到浏览器可执行文件。
我们目前发布基于以下Ubuntu版本的镜像:
Ubuntu 22.04 LTS (Jammy Jellyfish),图像标签包括jammy(未针对 Java 发布)
Ubuntu 20.04 LTS (Focal Fossa),图像标签包括focal
为 Firefox 和 WebKit 构建的浏览器是为glibc库构建的。不支持基于musl标准库的 Alpine Linux 和其他发行版。
docker 使用
此 Docker 镜像已发布到 Microsoft Artifact Registry, 访问地址https://mcr.microsoft.com/en-us/product/playwright/python/about。
拉取镜像
目前最新的镜像版本v1.32.0-focal
docker pull mcr.microsoft.com/playwright/python:v1.32.0-focal
运行容器
默认情况下,Docker 镜像将使用root用户来运行浏览器。这将禁用 root 无法使用的 Chromium 沙箱。如果您运行可信代码(例如端到端测试)并希望避免管理单独用户的麻烦,那么 root 用户可能没问题。对于网络抓取或爬行,我们建议在 Docker 容器内创建一个单独的用户并使用 seccomp 配置文件。
在受信任的网站上,您可以避免创建单独的用户并为其使用 root,因为您信任将在浏览器上运行的代码。
docker run -it --rm --ipc=host mcr.microsoft.com/playwright/python:v1.32.0-focal /bin/bash
使用示例
待执行的代码run.py
from playwright.sync_api import Playwright, sync_playwright, expect
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch()
context = browser.new_context()
page = context.new_page()
page.goto("http://127.0.0.1:8000/login.html")
print("输入用户名:yoyo")
page.get_by_placeholder("请输入用户名").click()
page.get_by_placeholder("请输入用户名").fill("yoyo")
page.get_by_placeholder("请输入密码").click()
print("输入用户名:123456")
page.get_by_placeholder("请输入密码").fill("123456")
page.get_by_role("button", name="立即登录 >").click()
page.wait_for_load_state('networkidle')
print(f"登录后的页面:{page.title()}")
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
run.py 文件放到自己服务器的指定目录,如:/root/code 下
启动容器
docker run -it --rm -v /root/code:/root --ipc=host mcr.microsoft.com/playwright/python:v1.32.0-focal /bin/bash
在容器内部执行代码
root@0c1f3728d019:/# python /root/run.py
输入用户名:yoyo
输入用户名:123456
登录后的页面:首页
root@0c1f3728d019:/#
可以看到运行结果
运行完成后,执行exit退出容器
文章转自:https://www.cnblogs.com/yoyoketang/p/17346237.html