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

📅 2026/7/17 9:08:38
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 依赖的调整。更重要的是其依赖的pyee、greenlet等包的版本范围在这个节点上可能与 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下载访问 Python 官网的发布页面找到 Python 3.7.9 的 Windows 安装包。选择Windows x86 executable installer或Windows x86-64 executable installer根据你的系统是 32 位还是 64 位决定。大多数现代电脑都是 64 位。安装运行下载的.exe安装程序。务必勾选“Add Python 3.7 to PATH”这个选项。这会将 Python 和 pip 添加到系统环境变量让你能在任何命令行窗口直接使用。选择“Customize installation”在下一步中确保所有可选功能都勾选上。在高级选项页面将安装路径修改为C:\Python37或你自定义的无空格英文路径。验证安装完成后打开一个新的命令提示符WinR输入cmd或 PowerShell。输入以下命令python --version应该显示Python 3.7.9。再输入pip --version确保 pip 能正常显示版本信息。注意如果python命令提示“不是内部或外部命令”说明环境变量未生效。可以尝试重启电脑或者手动将C:\Python37和C:\Python37\Scripts添加到系统的Path环境变量中。3.2 第二步安装 Microsoft C Build Tools 2019这是解决greenlet报错的核心步骤。下载访问 Visual Studio 官方网站找到旧的下载页面搜索 “Build Tools for Visual Studio 2019”。也可以直接访问一个名为 “Visual Studio 2019 Build Tools” 的独立安装包链接。安装运行安装程序选择“C 生成工具”工作负载。在右侧的“安装详细信息”中必须勾选以下组件MSVC v142 - VS 2019 C x64/x86 生成工具Windows 10 SDK选择一个版本如 10.0.18362.0 或更高C CMake 工具点击安装。这个过程会下载几个 GB 的文件请耐心等待。验证安装完成后通常不需要额外配置。编译器会被自动集成到系统路径中。实操心得二离线安装包如果网络环境不佳可以搜索 “Microsoft C Build Tools 2019 离线安装包”。下载后是一个较大的.iso或.exe文件运行后安装过程类似但无需联网下载。3.3 第三步使用 pip 安装 Playwright 1.9.0现在我们有了 Python 和编译器可以开始安装 Playwright 了。打开管理员身份的命令提示符或 PowerShell。升级 pip 到最新版本避免旧版 pip 的潜在问题python -m pip install --upgrade pip安装指定版本的 Playwright。这里使用来精确锁定版本pip install playwright1.9.0这个命令会自动解析并安装 Playwright 1.9.0 及其所有依赖包括greenlet。由于我们已经安装了 C 编译工具此时greenlet应该能够顺利编译安装而不会出现那个令人头疼的红色错误。踩坑记录网络超时与镜像源如果下载速度慢或超时是因为 pip 默认连接国外源。我们可以使用国内的镜像源来加速。在安装命令后加上-i参数pip install playwright1.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 包后需要运行一个命令来下载这些驱动。在同一个管理员命令行中执行playwright install这个命令会下载 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 浏览器headlessFalse 表示显示浏览器界面 browser p.chromium.launch(headlessFalse) # 创建一个新页面 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.pyimport asyncio from playwright.async_api import async_playwright async def main(): async with async_playwright() as p: browser await p.chromium.launch(headlessTrue) # 无头模式不显示界面 page await browser.new_page() await page.goto(https://www.example.com) title await page.title() print(fExample 页面标题是{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或类似的编译失败信息。排查与解决确认编译器安装重新运行 Visual Studio Build Tools 2019 安装程序点击“修改”确保之前提到的 C 组件确实已勾选并安装成功。环境变量检查系统环境变量Path中是否包含了编译器的路径通常类似C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.xx.xxxxx\bin\Hostx64\x64。如果没有可能需要重启电脑或手动添加。使用预编译的 wheel 文件这是终极解决方案。greenlet官方为 Windows 提供了预编译的二进制包wheel。我们可以手动指定安装这个 wheel 文件绕过编译环节。访问 Python Extension Packages for Windows 这个非官方站点由加州大学欧文分校维护声誉很好。根据你的系统win32或amd64和 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 playwright1.9.0此时 pip 会检测到greenlet已满足要求直接跳过编译步骤。5.2 Playwright 安装成功但playwright install失败症状playwright install命令下载极慢或中途报错断开。排查与解决网络问题Playwright 从谷歌等国外服务器下载浏览器二进制文件。国内网络环境可能导致失败。最有效的方法是使用代理。在命令行中设置临时代理环境变量假设你的代理本地端口是 10809set HTTPS_PROXYhttp://127.0.0.1:10809 set HTTP_PROXYhttp://127.0.0.1:10809然后再运行playwright install。手动下载如果代理也不稳定可以尝试手动下载。playwright install命令会显示它尝试下载的文件的 URL。你可以用下载工具如迅雷手动下载这些.zip文件然后根据 Playwright 的日志提示将其放置到正确的缓存目录中通常位于%USERPROFILE%\AppData\Local\ms-playwright。不过这个方法比较繁琐需要精确匹配版本和路径。5.3 运行脚本时报Playwright相关模块找不到症状运行测试脚本时提示ModuleNotFoundError: No module named playwright或ImportError: cannot import name sync_playwright。排查与解决Python 环境混淆你可能安装了多个 Python 版本。确保你用来运行脚本的python命令和安装 Playwright 的pip命令属于同一个 Python 环境。可以使用where python和where pip命令查看它们的路径是否在同一个目录下。虚拟环境如果你在使用虚拟环境venv请确保在激活虚拟环境后再执行 pip 安装和运行脚本。IDE 配置如果你使用 PyCharm 或 VSCode请检查项目解释器Python Interpreter是否设置为你安装了 Playwright 的那个 Python 3.7.9 环境。5.4 浏览器启动失败或闪退症状脚本执行到launch()时失败或浏览器窗口一闪而过。排查与解决杀毒软件/防火墙拦截某些安全软件可能会将 Playwright 启动的浏览器行为误判为恶意软件。尝试临时禁用杀毒软件或防火墙或将 Playwright 的缓存目录和 Python 目录添加到白名单。用户数据目录冲突如果之前运行失败可能会残留损坏的用户数据目录。在代码中尝试指定一个新的、干净的用户数据目录或者以“无痕模式”启动browser p.chromium.launch(headlessFalse, args[--incognito]) # 无痕模式 # 或 import tempfile import os user_data_dir os.path.join(tempfile.gettempdir(), playwright_temp_profile) browser p.chromium.launch(headlessFalse, user_data_diruser_data_dir)系统缺少依赖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 playwright1.9.06.2 配置 Playwright 全局参数你可以通过环境变量来配置 Playwright 的一些全局行为例如设置下载镜像源如果官方源慢或者禁用遥测。设置下载主机不保证一直有效set PLAYWRIGHT_DOWNLOAD_HOSThttps://npmmirror.com/mirrors/playwright禁用遥测set PLAYWRIGHT_NO_TELEMETRY1将这些命令添加到你的系统环境变量或脚本的开头。6.3 编写健壮的自动化脚本在实际项目中你的脚本需要处理各种异常和复杂情况。from playwright.sync_api import sync_playwright, TimeoutError as PlaywrightTimeoutError import logging logging.basicConfig(levellogging.INFO) def safe_automation(url): with sync_playwright() as p: try: # 设置超时和视窗大小 browser p.chromium.launch( headlessFalse, timeout30000, # 启动浏览器超时时间 args[--window-size1920,1080] # 设置初始窗口大小 ) context browser.new_context( viewport{width: 1920, height: 1080}, ignore_https_errorsTrue # 忽略 HTTPS 证书错误 ) page context.new_page() # 设置页面加载超时 page.set_default_timeout(60000) logging.info(f正在访问{url}) page.goto(url, wait_untilnetworkidle) # 等待网络空闲 # 更稳健的元素定位和操作 search_box page.wait_for_selector(input[namewd], stateattached, timeout5000) search_box.fill(Playwright) search_box.press(Enter) # 等待导航完成 page.wait_for_url(**/s?**) # 截图保存用于调试或记录 page.screenshot(pathsearch_result.png, full_pageTrue) logging.info(操作成功完成截图已保存。) except PlaywrightTimeoutError as e: logging.error(f操作超时{e}) page.screenshot(pathtimeout_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(headlessTrue) # 创建一个浏览器上下文可以在这个上下文中打开多个页面 context browser.new_context() # 任务1 page1 context.new_page() # ... 执行任务1 page1.close() # 任务2 page2 context.new_page() # ... 执行任务2 page2.close() # 所有任务完成后再关闭上下文和浏览器 context.close() browser.close()通过这样的优化可以显著提升批量任务的执行效率。记住最耗时的操作是启动浏览器进程本身其次是创建新的上下文最快的是在同一个上下文中创建新页面。根据你的任务隔离需求在性能和稳定性之间做出权衡。