现在越来越多的文章都在说playwright在自动化方面比selenium更加的具有优势,而且我看现在大多数公司的招聘也要求掌握playwright,所以有必要对该工具的使用进行掌握,并作一些详细的记录。在这里我并不会对两个工具进行比较,我始终相信,工具本身并无强弱之分,只在使用场景的是否合适。
本次虚拟环境使用uv来进行解释器的管理与环境的管理。
bashuv python list # 查看解释器列表
>>>
cpython-3.14.0rc3-macos-x86_64-none <download available>
cpython-3.14.0rc3+freethreaded-macos-x86_64-none <download available>
cpython-3.13.7-macos-x86_64-none <download available>
cpython-3.13.7+freethreaded-macos-x86_64-none <download available>
cpython-3.13.4-macos-x86_64-none /Users/jingwei/.pyenv/shims/python3.13
cpython-3.13.4-macos-x86_64-none /Users/jingwei/.pyenv/shims/python3
cpython-3.13.4-macos-x86_64-none /Users/jingwei/.pyenv/shims/python
uv init KTP --python 3.13 # 选择解释器初始化项目
>>>
Initialized project `ktp` at `/Library/PyLearning/KTP`
bash% cd KTP
% uv venv --python 3.13 # 创建虚拟环境
% source .venv/bin/activate # 激活虚拟环境
% tree -a -L 2 # 查看目录结构
.
├── .idea
│ ├── .gitignore
│ ├── inspectionProfiles
│ ├── KTP.iml
│ ├── misc.xml
│ ├── modules.xml
│ ├── vcs.xml
│ └── workspace.xml
├── .python-version
├── .venv
│ ├── .gitignore
│ ├── .lock
│ ├── bin
│ ├── CACHEDIR.TAG
│ ├── include
│ ├── lib
│ └── pyvenv.cfg
├── main.py
├── pyproject.toml
├── README.md
打开pycharm >> 设置... >> Python >> 解释器

playwright需要下载单独的浏览器,以确保自动化运行的可靠性、一致性和可维护性。
bashuv add playwright # 安装 playwright
uv pip show playwright # 查看playwright的安装的详情
>>>
Name: playwright
Version: 1.58.0
Location: /Library/PyLearning/KTP/.venv/lib/python3.13/site-packages
Requires: greenlet, pyee
Required-by:
uv run playwright install chromium # 安装浏览器,安装的位置在全局的缓存目录中,来实现多项目的共享。
ls /Users/jingwei/Library/Caches/ms-playwright/ # 查看安装的看浏览器
注
国内使用uv run playwright install chromium下载浏览器时大概率会发生超时下载失败的情况:
查看本地vpn代理的端口:

走代理端口下载:
export HTTPS_PROXY=http://127.0.0.1:7890(mac)
set HTTPS_PROXY=http://127.0.0.1:7890(win)
uv run playwright install chromium
pythonfrom playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://www.google.com")
print("the page title is {}".format(page.title()))
browser.close()
本文作者:精卫
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!