PhantomJS 项目已于 2025 年停止维护,这意味着它不再有官方更新,可能存在安全漏洞,并且不兼容最新的网页技术(如现代 JavaScript、CSS3 等)。

强烈建议你使用现代的替代品,
- Selenium + Headless Chrome/Firefox: 这是最主流、最推荐的替代方案,Chrome 和 Firefox 的无头模式(Headless Mode)性能更好、兼容性更强、更稳定。
- Playwright: 一个由微软开发的新一代自动化工具,性能极佳,API 友好,支持 Chromium、Firefox 和 WebKit。
尽管如此,如果你因为某些特殊原因(如维护旧项目)必须使用 PhantomJS,下面的配置指南仍然适用。
Python 配置 PhantomJS 完整指南
这个过程主要分为三步:
- 下载并安装 PhantomJS
- 安装 Python 的 Selenium 库
- 编写 Python 代码进行调用
第 1 步:下载并安装 PhantomJS
你需要先将 PhantomJS 浏览器本身下载到你的计算机上。

1 下载 PhantomJS
- 访问 PhantomJS 的官方发布页面:https://phantomjs.org/download.html
- 根据你的操作系统选择对应的版本:
- Windows: 下载
phantomjs-2.1.1-windows.zip(这是最后一个稳定版本) - macOS: 下载
phantomjs-2.1.1-macosx.zip - Linux (64-bit): 下载
phantomjs-2.1.1-linux-x86_64.tar.bz2
- Windows: 下载
2 配置环境变量 (推荐)
为了让 Python 代码在任何地方都能找到 phantomjs.exe(或 phantomjs),最推荐的方法是将其所在目录添加到系统的 环境变量 的 Path 中。
以 Windows 10/11 为例:
- 解压你下载的
.zip文件,你会得到一个phantomjs-2.1.1-windows文件夹。 - 将这个文件夹移动到一个固定的位置,
C:\phantomjs。 - 右键点击 "此电脑" -> "属性" -> "高级系统设置" -> "环境变量"。
- 在 "系统变量" 部分,找到名为
Path的变量,双击它。 - 点击 "新建",然后添加你刚刚存放 PhantomJS 的路径,
C:\phantomjs。 - 一路点击 "确定" 保存设置。
验证安装: 打开一个新的命令提示符 或 PowerShell 窗口,输入以下命令:
phantomjs --version
如果显示 1.1,则说明配置成功。

对于 macOS / Linux:
- 解压下载的文件。
- 你会得到一个
phantomjs可执行文件。 - 你可以将其移动到
/usr/local/bin目录下,这个目录默认在系统的PATH中。# 假设解压后的文件在 ~/Downloads/phantomjs-2.1.1-macosx 目录下 sudo mv ~/Downloads/phantomjs-2.1.1-macosx/phantomjs /usr/local/bin/
- 验证安装:
phantomjs --version
第 2 步:安装 Python 的 Selenium 库
Selenium 是一个用于 Web 应用程序测试的工具,它可以通过 Python 来驱动浏览器(包括 PhantomJS),我们需要用 pip 来安装它。
打开你的终端或命令提示符,运行以下命令:
pip install selenium
如果你的系统同时有 Python 2 和 Python 3,建议使用 pip3:
pip3 install selenium
第 3 步:编写 Python 代码调用 PhantomJS
现在环境都配置好了,我们可以开始写 Python 代码了。
示例 1:最简单的用法(如果配置了环境变量)
如果你的 phantomjs.exe 已经在系统 Path 中,Selenium 会自动找到它。
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
# 1. 创建一个 DesiredCapabilities 对象
# 这是 PhantomJS 的标准配置方式
dcap = dict(DesiredCapabilities.PHANTOMJS)
# 可以设置一些参数,例如忽略 SSL 错误
# dcap["phantomjs.page.settings.userAgent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
# dcap["acceptSslCerts"] = True
# 2. 初始化 WebDriver
# Selenium 会自动在系统路径中查找 'phantomjs'
driver = webdriver.PhantomJS(desired_capabilities=dcap)
# 3. 访问一个网页
print("正在访问网页...")
driver.get("https://www.baidu.com")
# 4. 获取页面标题并打印
print("页面标题是: " + driver.title)
# 5. 获取页面源代码
# print(driver.page_source)
# 6. 截图
driver.save_screenshot("baidu_screenshot.png")
print("截图已保存为 baidu_screenshot.png")
# 7. 关闭浏览器
driver.quit()
运行这个脚本,它会在后台打开一个无头的 PhantomJS 浏览器,访问百度,打印标题,截图,然后自动关闭,你应该能看到同目录下生成了 baidu_screenshot.png 文件。
示例 2:指定 PhantomJS 路径(如果未配置环境变量)
如果你没有将 PhantomJS 添加到系统环境变量,你可以在代码中明确指定它的可执行文件路径。
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import os
# 1. 定义 PhantomJS 可执行文件的路径
# !!! 请将这里的路径修改为你自己的 PhantomJS 实际路径 !!!
# Windows: "C:/phantomjs/bin/phantomjs.exe"
# macOS: "/usr/local/bin/phantomjs"
phantomjs_path = "C:/phantomjs/bin/phantomjs.exe"
# 检查路径是否存在
if not os.path.exists(phantomjs_path):
print(f"错误: 在路径 '{phantomjs_path}' 下未找到 phantomjs.exe")
exit()
# 2. 初始化 WebDriver,并传入路径
driver = webdriver.PhantomJS(executable_path=phantomjs_path)
# 3. 后续操作与示例1相同
driver.get("https://www.zhihu.com")
print("知乎页面标题是: " + driver.title)
driver.save_screenshot("zhihu_screenshot.png")
print("截图已保存为 zhihu_screenshot.png")
driver.quit()
常见问题与解决方案
-
selenium.common.exceptions.WebDriverException: Message: 'phantomjs' executable needs to be in PATH- 原因: Selenium 在系统的环境变量
PATH中找不到phantomjs命令。 - 解决:
- 方法一(推荐): 按照第 1.2 步的说明,将 PhantomJS 的安装目录添加到系统环境变量
Path中。 - 方法二: 在代码中使用
executable_path参数明确指定路径,如示例 2 所示。
- 方法一(推荐): 按照第 1.2 步的说明,将 PhantomJS 的安装目录添加到系统环境变量
- 原因: Selenium 在系统的环境变量
-
ModuleNotFoundError: No module named 'selenium'- 原因: Python 环境中没有安装 Selenium 库。
- 解决: 运行
pip install selenium进行安装。
-
脚本运行很慢,或者某些元素找不到
- 原因: PhantomJS 基于较旧的 WebKit 内核,对现代网站(特别是使用大量动态 JavaScript 的网站)支持不佳,可能导致渲染慢或无法正确识别元素。
- 解决: 这再次证明了使用现代浏览器的无头模式是更好的选择,下面是一个使用 Chrome 无头模式 的代码示例,你可以对比一下:
推荐替代方案:Selenium + Headless Chrome
这个方案是目前工业界的标准,强烈建议学习和使用。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 1. 设置 Chrome 无头模式选项
chrome_options = Options()
chrome_options.add_argument("--headless") # 启用无头模式
chrome_options.add_argument("--disable-gpu") # 在某些系统上需要禁用GPU加速
chrome_options.add_argument("--window-size=1920,1080") # 设置窗口大小,某些网站需要
# 2. 初始化 WebDriver
# 确保你已经安装了 Chrome 浏览器和对应的 ChromeDriver
# ChromeDriver 没有在 PATH 中,你需要像 PhantomJS 一样指定它的路径
driver = webdriver.Chrome(options=chrome_options)
try:
# 3. 访问网页
driver.get("https://www.taobao.com")
print("淘宝页面标题是: " + driver.title)
# 4. 查找元素 (淘宝首页的搜索框)
search_box = driver.find_element("name", "q")
print("成功找到搜索框元素!")
# 5. 截图
driver.save_screenshot("taobao_headless_screenshot.png")
print("截图已保存为 taobao_headless_screenshot.png")
finally:
# 6. 关闭浏览器
driver.quit()
如何安装 ChromeDriver?
最简单的方法是使用一个库来自动管理它,webdriver-manager。
pip install webdriver-manager
然后修改你的代码如下,它就会自动下载和管理对应版本的 ChromeDriver:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
# webdriver_manager 会自动处理 ChromeDriver 的路径
driver = webdriver.Chrome(ChromeDriverManager().install(), options=chrome_options)
# ... 后续代码相同 ...
driver.get("https://www.bing.com")
print(driver.title)
driver.quit()
| 特性 | PhantomJS | Selenium + Headless Chrome |
|---|---|---|
| 状态 | 已停止维护 | 积极开发中 |
| 兼容性 | 差,对现代网页支持不佳 | 优秀,支持所有现代 Web 标准 |
| 性能 | 较慢 | 快 |
| 易用性 | 配置稍复杂 | 非常简单,特别是结合 webdriver-manager |
| 推荐度 | 不推荐 (仅用于维护旧项目) | 强烈推荐 (用于所有新项目) |
希望这份详细的指南能帮助你配置好 PhantomJS,并了解为什么转向现代工具是更好的选择。
