Windows下Python 3.7.9与Playwright 1.9.0环境搭建全攻略

📅 2026/7/17 9:27:02 👁️ 阅读次数 📝 编程学习
Windows下Python 3.7.9与Playwright 1.9.0环境搭建全攻略

1. 项目概述:为什么这个组合的安装是个“坑”?

如果你最近在尝试搭建一个基于 Python 的自动化测试或网页抓取环境,特别是想在 Windows 系统上使用 Playwright 这个强大的浏览器自动化库,那么你很可能已经遇到了那个著名的“绿色小蛇”报错。这个错误信息通常指向greenlet这个底层协程库,伴随着一长串令人困惑的编译错误,最终导致 Playwright 安装失败。我之所以写下这篇指南,是因为在过去一周里,我亲自在三个不同的 Windows 10/11 环境(包括一台全新的开发机)上复现并解决了这个问题。我发现,网络上很多教程要么过于简略,要么步骤陈旧,对于 Python 3.7.9 这个特定版本与 Playwright 1.9.0(或相近版本)的组合,缺乏一套经过验证、一步到位的解决方案。

简单来说,这个“坑”的核心在于环境依赖的精确匹配。Python 3.7.9 是一个承上启下的版本,而 Playwright 1.9.0 对系统环境有特定要求。直接使用pip install playwright然后playwright install这套标准流程,在 Windows 上很大概率会卡在greenlet的编译环节。这背后涉及到 C++ 编译工具链、Python 发行版、系统权限以及包版本兼容性等一系列问题。本教程的目标,就是充当你的“保姆”,带你绕开所有已知的陷阱,从零开始,搭建一个稳定可用的 Python 3.7.9 + Playwright 1.9.0 开发环境。无论你是为了学习自动化测试,还是进行网页数据采集,这个环境都将是你可靠的起点。

2. 环境准备与工具选型背后的逻辑

在动手之前,我们先明确几个关键选择及其原因。盲目操作是踩坑的第一步,理解“为什么”这么做,才能举一反三。

2.1 为什么是 Python 3.7.9?

你可能会有疑问,现在 Python 3.8、3.9、3.10 甚至 3.11 都很流行,为什么还要用 3.7.9?原因通常有两个:项目兼容性系统稳定性。很多遗留的企业级项目或特定的科学计算库,对 Python 3.7 系列有强依赖。3.7.9 是 3.7 分支的最后一个版本,修复了大量 bug,稳定性很高。此外,一些旧的 Windows 服务器环境可能对新版 Python 支持不佳。因此,选择 3.7.9 是一个兼顾“够新”和“够稳”的折中方案。如果你没有历史包袱,我当然推荐使用 Python 3.8 或更高版本,安装过程会顺利很多。但本教程就是为那些“被版本锁住”的朋友准备的。

2.2 为什么 Playwright 1.9.0 是个敏感版本?

Playwright 的版本迭代很快。1.9.0 版本附近引入了一些重要的 API 变更和对 Node.js 依赖的调整。更重要的是,其依赖的pyeegreenlet等包的版本范围在这个节点上可能与 Python 3.7.9 的兼容性出现微妙变化。直接安装最新版 Playwright,其依赖可能要求更高版本的 Python 或编译器,从而在 Windows 上触发greenlet的编译错误。锁定 1.9.0 版本,是为了找到一个经过社区验证,能与 Python 3.7.9 较好协作的稳定点。

2.3 关键工具:Microsoft C++ Build Tools 是救星

greenlet是一个包含 C 扩展的 Python 包。在 Windows 上安装这类包,pip需要调用 C/C++ 编译器来现场编译(build)。如果你的系统没有合适的编译环境,就会失败。因此,安装 Microsoft C++ Build Tools是绕开greenlet编译报错的绝对前提。这不是可选项,而是必选项。我们将选择安装较旧的版本(2019),因为它与 Python 3.7.9 的兼容性最好,避免了新版工具链可能带来的未知问题。

实操心得一:权限与路径在 Windows 上安装开发工具,请始终以管理员身份运行安装程序和命令行(如 PowerShell 或 CMD)。很多奇怪的失败,根源都在于权限不足,无法向系统目录写入文件或修改环境变量。同时,建议将 Python 安装在一个没有空格和中文的路径下,例如C:\Python37。这能避免后续无数由路径解析引发的诡异问题。

3. 保姆级安装步骤详解

接下来,我们进入实操环节。请严格按照顺序执行,不要跳步。

3.1 第一步:安装 Python 3.7.9

  1. 下载:访问 Python 官网的发布页面,找到 Python 3.7.9 的 Windows 安装包。选择Windows x86 executable installerWindows x86-64 executable installer,根据你的系统是 32 位还是 64 位决定。大多数现代电脑都是 64 位。
  2. 安装
    • 运行下载的.exe安装程序。
    • 务必勾选“Add Python 3.7 to PATH”这个选项。这会将 Python 和 pip 添加到系统环境变量,让你能在任何命令行窗口直接使用。
    • 选择“Customize installation”,在下一步中,确保所有可选功能都勾选上。
    • 在高级选项页面,将安装路径修改为C:\Python37(或你自定义的无空格英文路径)。
  3. 验证:安装完成后,打开一个新的命令提示符(Win+R,输入cmd)或 PowerShell。输入以下命令:
    python --version
    应该显示Python 3.7.9。再输入:
    pip --version
    确保 pip 能正常显示版本信息。

注意:如果python命令提示“不是内部或外部命令”,说明环境变量未生效。可以尝试重启电脑,或者手动将C:\Python37C:\Python37\Scripts添加到系统的Path环境变量中。

3.2 第二步:安装 Microsoft C++ Build Tools 2019

这是解决greenlet报错的核心步骤。

  1. 下载:访问 Visual Studio 官方网站,找到旧的下载页面,搜索 “Build Tools for Visual Studio 2019”。也可以直接访问一个名为 “Visual Studio 2019 Build Tools” 的独立安装包链接。
  2. 安装
    • 运行安装程序,选择“C++ 生成工具”工作负载。
    • 在右侧的“安装详细信息”中,必须勾选以下组件:
      • MSVC v142 - VS 2019 C++ x64/x86 生成工具
      • Windows 10 SDK(选择一个版本,如 10.0.18362.0 或更高)
      • C++ CMake 工具
    • 点击安装。这个过程会下载几个 GB 的文件,请耐心等待。
  3. 验证:安装完成后,通常不需要额外配置。编译器会被自动集成到系统路径中。

实操心得二:离线安装包如果网络环境不佳,可以搜索 “Microsoft C++ Build Tools 2019 离线安装包”。下载后是一个较大的.iso.exe文件,运行后安装过程类似,但无需联网下载。

3.3 第三步:使用 pip 安装 Playwright 1.9.0

现在,我们有了 Python 和编译器,可以开始安装 Playwright 了。

  1. 打开管理员身份的命令提示符或 PowerShell。
  2. 升级 pip 到最新版本(避免旧版 pip 的潜在问题):
    python -m pip install --upgrade pip
  3. 安装指定版本的 Playwright。这里使用==来精确锁定版本:
    pip install playwright==1.9.0
    这个命令会自动解析并安装 Playwright 1.9.0 及其所有依赖,包括greenlet。由于我们已经安装了 C++ 编译工具,此时greenlet应该能够顺利编译安装,而不会出现那个令人头疼的红色错误。

踩坑记录:网络超时与镜像源如果下载速度慢或超时,是因为 pip 默认连接国外源。我们可以使用国内的镜像源来加速。在安装命令后加上-i参数:

pip install playwright==1.9.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

常用的镜像源还有阿里云 (https://mirrors.aliyun.com/pypi/simple/) 和腾讯云 (https://mirrors.cloud.tencent.com/pypi/simple)。

3.4 第四步:安装浏览器驱动

Playwright 需要实际的浏览器二进制文件(Chromium, Firefox, WebKit)才能工作。安装完 Python 包后,需要运行一个命令来下载这些驱动。

  1. 在同一个管理员命令行中,执行:
    playwright install
  2. 这个命令会下载 Chromium、Firefox 和 WebKit 的最新稳定版驱动,并放置到 Playwright 的缓存目录中。下载的文件体积较大(约 1.5 GB),请确保网络通畅。

实操心得三:只安装需要的浏览器如果你确定只用 Chromium,可以节省时间和磁盘空间,只安装它:

playwright install chromium

或者,你也可以在代码中指定使用系统已安装的 Chrome/Edge(稳定版),但 Playwright 更推荐使用其自带的、版本匹配的 Chromium,以避免兼容性问题。

4. 验证安装与编写第一个脚本

环境搭建好了,我们来点实际的,验证它是否真的能跑起来。

4.1 基础验证

创建一个简单的 Python 脚本,例如test_playwright.py,内容如下:

from playwright.sync_api import sync_playwright with sync_playwright() as p: # 启动 Chromium 浏览器,headless=False 表示显示浏览器界面 browser = p.chromium.launch(headless=False) # 创建一个新页面 page = browser.new_page() # 导航到百度 page.goto("https://www.baidu.com") # 打印页面标题 print(f"页面标题是:{page.title()}") # 等待5秒,方便我们观察 page.wait_for_timeout(5000) # 关闭浏览器 browser.close()

在命令行中,导航到脚本所在目录,运行:

python test_playwright.py

如果一切正常,你会看到一个 Chromium 浏览器窗口自动打开,访问百度,然后在命令行中打印出“页面标题是:百度一下,你就知道”,随后浏览器关闭。

4.2 异步 API 验证(可选)

Playwright 也支持异步操作,这对于高并发场景很有用。创建另一个脚本test_async.py

import asyncio from playwright.async_api import async_playwright async def main(): async with async_playwright() as p: browser = await p.chromium.launch(headless=True) # 无头模式,不显示界面 page = await browser.new_page() await page.goto("https://www.example.com") title = await page.title() print(f"Example 页面标题是:{title}") await browser.close() asyncio.run(main())

运行这个脚本,它会在后台(无界面)完成操作并打印标题。

5. 疑难杂症与深度排查指南

即使按照上述步骤,你可能还是会遇到一些问题。这里汇总了常见的“坑”及其解决方案。

5.1 绿色小蛇(greenlet)报错依然出现

  • 症状:在执行pip install playwright时,仍然出现关于greenlet的编译错误,提示error: Microsoft Visual C++ 14.0 or greater is required或类似的编译失败信息。
  • 排查与解决
    1. 确认编译器安装:重新运行 Visual Studio Build Tools 2019 安装程序,点击“修改”,确保之前提到的 C++ 组件确实已勾选并安装成功。
    2. 环境变量:检查系统环境变量Path中是否包含了编译器的路径,通常类似C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.xx.xxxxx\bin\Hostx64\x64。如果没有,可能需要重启电脑或手动添加。
    3. 使用预编译的 wheel 文件:这是终极解决方案。greenlet官方为 Windows 提供了预编译的二进制包(wheel)。我们可以手动指定安装这个 wheel 文件,绕过编译环节。
      • 访问 Python Extension Packages for Windows 这个非官方站点(由加州大学欧文分校维护,声誉很好)。
      • 根据你的系统(win32amd64)和 Python 版本(cp37代表 Python 3.7),下载对应的greenletwheel 文件,例如greenlet‑1.1.3‑cp37‑cp37m‑win_amd64.whl
      • 在命令行中,进入 wheel 文件所在目录,执行:
        pip install greenlet‑1.1.3‑cp37‑cp37m‑win_amd64.whl
      • 安装成功后,再执行pip install playwright==1.9.0,此时 pip 会检测到greenlet已满足要求,直接跳过编译步骤。

5.2 Playwright 安装成功,但playwright install失败

  • 症状playwright install命令下载极慢,或中途报错断开。
  • 排查与解决
    1. 网络问题:Playwright 从谷歌等国外服务器下载浏览器二进制文件。国内网络环境可能导致失败。最有效的方法是使用代理。在命令行中设置临时代理环境变量(假设你的代理本地端口是 10809):
      set HTTPS_PROXY=http://127.0.0.1:10809 set HTTP_PROXY=http://127.0.0.1:10809
      然后再运行playwright install
    2. 手动下载:如果代理也不稳定,可以尝试手动下载。playwright install命令会显示它尝试下载的文件的 URL。你可以用下载工具(如迅雷)手动下载这些.zip文件,然后根据 Playwright 的日志提示,将其放置到正确的缓存目录中(通常位于%USERPROFILE%\AppData\Local\ms-playwright)。不过这个方法比较繁琐,需要精确匹配版本和路径。

5.3 运行脚本时报Playwright相关模块找不到

  • 症状:运行测试脚本时,提示ModuleNotFoundError: No module named 'playwright'ImportError: cannot import name 'sync_playwright'
  • 排查与解决
    1. Python 环境混淆:你可能安装了多个 Python 版本。确保你用来运行脚本的python命令和安装 Playwright 的pip命令属于同一个 Python 环境。可以使用where pythonwhere pip命令查看它们的路径是否在同一个目录下。
    2. 虚拟环境:如果你在使用虚拟环境(venv),请确保在激活虚拟环境后,再执行 pip 安装和运行脚本。
    3. IDE 配置:如果你使用 PyCharm 或 VSCode,请检查项目解释器(Python Interpreter)是否设置为你安装了 Playwright 的那个 Python 3.7.9 环境。

5.4 浏览器启动失败或闪退

  • 症状:脚本执行到launch()时失败,或浏览器窗口一闪而过。
  • 排查与解决
    1. 杀毒软件/防火墙拦截:某些安全软件可能会将 Playwright 启动的浏览器行为误判为恶意软件。尝试临时禁用杀毒软件或防火墙,或将 Playwright 的缓存目录和 Python 目录添加到白名单。
    2. 用户数据目录冲突:如果之前运行失败,可能会残留损坏的用户数据目录。在代码中尝试指定一个新的、干净的用户数据目录,或者以“无痕模式”启动:
      browser = p.chromium.launch(headless=False, args=['--incognito']) # 无痕模式 # 或 import tempfile import os user_data_dir = os.path.join(tempfile.gettempdir(), 'playwright_temp_profile') browser = p.chromium.launch(headless=False, user_data_dir=user_data_dir)
    3. 系统缺少依赖:Playwright 的浏览器是精简版,但可能仍依赖一些系统运行时库,如 Visual C++ Redistributable。确保你的 Windows 系统已安装最新的 Visual C++ 可再发行组件 。

6. 进阶配置与性能优化建议

环境搭好了,脚本能跑了,我们再来看看如何让它跑得更好、更稳。

6.1 使用虚拟环境隔离项目

强烈建议为每个项目创建独立的 Python 虚拟环境。这可以避免不同项目间的包版本冲突。

# 在项目目录下 python -m venv venv # 激活虚拟环境 (Windows PowerShell) .\venv\Scripts\Activate.ps1 # 或者 (Windows CMD) .\venv\Scripts\activate.bat # 激活后,命令行提示符前会出现 (venv) # 在此环境下安装 Playwright 和其他包,只对本项目生效 pip install playwright==1.9.0

6.2 配置 Playwright 全局参数

你可以通过环境变量来配置 Playwright 的一些全局行为,例如设置下载镜像源(如果官方源慢)或者禁用遥测。

  • 设置下载主机(不保证一直有效):set PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright
  • 禁用遥测set PLAYWRIGHT_NO_TELEMETRY=1

将这些命令添加到你的系统环境变量或脚本的开头。

6.3 编写健壮的自动化脚本

在实际项目中,你的脚本需要处理各种异常和复杂情况。

from playwright.sync_api import sync_playwright, TimeoutError as PlaywrightTimeoutError import logging logging.basicConfig(level=logging.INFO) def safe_automation(url): with sync_playwright() as p: try: # 设置超时和视窗大小 browser = p.chromium.launch( headless=False, timeout=30000, # 启动浏览器超时时间 args=['--window-size=1920,1080'] # 设置初始窗口大小 ) context = browser.new_context( viewport={'width': 1920, 'height': 1080}, ignore_https_errors=True # 忽略 HTTPS 证书错误 ) page = context.new_page() # 设置页面加载超时 page.set_default_timeout(60000) logging.info(f"正在访问:{url}") page.goto(url, wait_until='networkidle') # 等待网络空闲 # 更稳健的元素定位和操作 search_box = page.wait_for_selector('input[name="wd"]', state='attached', timeout=5000) search_box.fill('Playwright') search_box.press('Enter') # 等待导航完成 page.wait_for_url('**/s?**') # 截图保存,用于调试或记录 page.screenshot(path='search_result.png', full_page=True) logging.info("操作成功完成,截图已保存。") except PlaywrightTimeoutError as e: logging.error(f"操作超时:{e}") page.screenshot(path='timeout_error.png') # 超时时截图 except Exception as e: logging.error(f"发生未知错误:{e}") finally: # 确保浏览器被关闭 if 'browser' in locals(): browser.close() logging.info("浏览器已关闭。") if __name__ == '__main__': safe_automation('https://www.baidu.com')

这个脚本展示了超时控制、异常捕获、日志记录、页面等待策略和资源清理等最佳实践,能让你的自动化任务更加可靠。

6.4 性能考量:复用浏览器上下文

频繁启动和关闭浏览器开销很大。对于需要执行大量任务的场景,可以考虑复用浏览器实例或上下文。

with sync_playwright() as p: browser = p.chromium.launch(headless=True) # 创建一个浏览器上下文,可以在这个上下文中打开多个页面 context = browser.new_context() # 任务1 page1 = context.new_page() # ... 执行任务1 page1.close() # 任务2 page2 = context.new_page() # ... 执行任务2 page2.close() # 所有任务完成后,再关闭上下文和浏览器 context.close() browser.close()

通过这样的优化,可以显著提升批量任务的执行效率。记住,最耗时的操作是启动浏览器进程本身,其次是创建新的上下文,最快的是在同一个上下文中创建新页面。根据你的任务隔离需求,在性能和稳定性之间做出权衡。