PhantomJS 项目已经于 2025 年停止了官方维护,这意味着它不再更新,可能存在安全漏洞,并且无法与最新的 Web 标准和浏览器兼容。

强烈建议您使用现代的替代品,Selenium 配合 Headless Chrome 或 Headless Firefox,这种方法是当前社区的标准做法,更稳定、更可靠、功能也更强大。
为了完整性和满足一些旧项目的需求,我还是会先介绍如何安装和使用 PhantomJS,然后重点推荐并详细介绍如何使用现代替代方案。
第一部分:安装和使用 PhantomJS (不推荐)
步骤 1:下载 PhantomJS
PhantomJS 不是一个通过 pip 安装的 Python 包,而是一个独立的可执行文件(一个浏览器),你需要先下载它。
- 访问官网:前往 PhantomJS 官网下载页面。
- 选择版本:根据你的操作系统选择对应的版本。
- Windows: 下载
phantomjs-2.1.1-windows.zip(或其他版本) - macOS: 下载
phantomjs-2.1.1-macosx.zip(注意:Apple Silicon (M1/M2) 用户需要寻找一个为x86_64架构编译的版本,或者使用 Rosetta 2 运行) - Linux: 下载
phantomjs-2.1.1-linux-x86_64.tar.bz2
- Windows: 下载
- 下载并解压:下载完成后,将压缩包解压到一个你容易找到的目录,
C:\phantomjs(Windows) 或/usr/local/phantomjs(Linux/macOS)。
步骤 2:配置环境变量 (重要)
为了让系统在任何地方都能找到 phantomjs 命令,你需要将其所在的目录添加到系统的 PATH 环境变量中。

-
Windows 10/11:
- 在开始菜单搜索 "编辑系统环境变量" 并打开。
- 在 "系统属性" 窗口中,点击 "环境变量..."。
- 在 "系统变量" 部分,找到名为
Path的变量,选中它并点击 "编辑..."。 - 点击 "新建",然后添加你解压 PhantomJS 的路径,
C:\phantomjs。 - 保存所有弹出的窗口。
-
Linux / macOS:
-
打开终端。
-
将你解压的
bin目录添加到PATH,如果你解压到了/usr/local/phantomjs:
(图片来源网络,侵删)# 临时生效 (关闭终端后失效) export PATH=$PATH:/usr/local/phantomjs/bin # 永久生效 (推荐) echo 'export PATH=$PATH:/usr/local/phantomjs/bin' >> ~/.bashrc source ~/.bashrc # 让配置立即生效
-
步骤 3:验证安装
打开一个新的终端或命令提示符,输入以下命令:
phantomjs --version
如果显示版本号(1.1),则说明安装成功。
步骤 4:在 Python 中使用 selenium + PhantomJS
你可以在 Python 代码中调用它了。
-
安装
selenium库:pip install selenium
-
编写 Python 脚本:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time # 指定 phantomjs 可执行文件的路径 # 如果你在步骤2中配置了环境变量,这里可以省略路径 # executable_path = 'C:/phantomjs/bin/phantomjs.exe' # Windows # executable_path = '/usr/local/phantomjs/bin/phantomjs' # Linux/macOS try: # 初始化 WebDriver,指向 phantomjs # 如果环境变量配置正确,可以省略 executable_path 参数 driver = webdriver.PhantomJS(executable_path='C:/phantomjs/bin/phantomjs.exe') # Windows 示例 # 访问目标网页 driver.get("https://www.baidu.com") # 打印页面标题 print("页面标题是:", driver.title) # 找到搜索框,输入 "PhantomJS" search_box = driver.find_element(By.ID, "kw") search_box.send_keys("PhantomJS") search_box.send_keys(Keys.ENTER) # 等待几秒钟,让页面加载完成 time.sleep(3) # 打印新的页面标题 print("搜索后的页面标题是:", driver.title) finally: # 关闭浏览器 driver.quit()注意:由于 PhantomJS 已停止维护,你可能会遇到各种兼容性问题,尤其是在处理现代 JavaScript 框架构建的网站时。
第二部分:推荐方案 - Selenium + Headless Chrome / Firefox
这是目前最主流、最可靠的无头浏览器方案。
优点
- 持续维护:由 Google 和 Mozilla 等大公司支持,紧跟最新的 Web 标准。
- 兼容性好:能完美渲染现代网页,支持最新的 JavaScript、CSS 和 HTML5 特性。
- 功能强大:拥有开发者工具的所有功能,性能更好,更稳定。
- 易于调试:遇到问题时,可以轻松切换到有头模式(即显示浏览器窗口)进行调试。
安装步骤
-
安装
selenium库:pip install selenium
-
安装对应浏览器的 WebDriver: 你需要为你的浏览器安装一个“驱动程序”,Selenium 通过这个程序来控制浏览器。
-
方案 A: Google Chrome (推荐)
- 确保你的电脑上已安装 Google Chrome 浏览器。
- 下载与你的 Chrome 浏览器版本匹配的 ChromeDriver。
- 访问 Chrome for Testing availability。
- 找到与你 Chrome 版本最接近的
chromedriver,下载对应你操作系统的zip包。 - 重要提示:ChromeDriver 的版本号不必和 Chrome 浏览器完全一致,但主版本号(如 120.x.x.x)必须一致。
- 解压下载的
zip包,将chromedriver(或chromedriver.exe) 文件放到一个固定的目录(如C:\drivers或/usr/local/bin),并将其路径添加到系统PATH环境变量中,或者在代码中指定其路径。
-
方案 B: Mozilla Firefox
- 确保你的电脑上已安装 Mozilla Firefox 浏览器。
- 下载与你的 Firefox 浏览器版本匹配的 GeckoDriver。
- 访问 GeckoDriver Releases。
- 下载对应你操作系统的最新版本。
- 同样,解压后将
geckodriver(或geckodriver.exe) 放入PATH或指定路径。
-
Python 代码示例
这里以 Headless Chrome 为例。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time
# --- 配置 Chrome 选项 ---
chrome_options = Options()
# 1. 设置为无头模式
chrome_options.add_argument("--headless")
# 2. 可选:设置窗口大小,某些网站会根据窗口大小调整布局
chrome_options.add_argument("--window-size=1920,1080")
# 3. 可选:禁用图片加载,可以提高爬取速度
# chrome_options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
# --- 指定 ChromeDriver 的路径 ---
# chromedriver 在系统 PATH 中,可以省略此行
# service = Service(executable_path='C:/drivers/chromedriver.exe')
# driver = webdriver.Chrome(service=service, options=chrome_options)
# chromedriver 在系统 PATH 中,这是最简单的方式
driver = webdriver.Chrome(options=chrome_options)
try:
# 访问目标网页
driver.get("https://www.baidu.com")
# 打印页面标题
print("页面标题是:", driver.title)
# 找到搜索框,输入 "Headless Chrome"
search_box = driver.find_element(By.ID, "kw")
search_box.send_keys("Headless Chrome")
search_box.send_keys(Keys.ENTER)
# 等待几秒钟,让页面加载完成
time.sleep(3)
# 打印新的页面标题
print("搜索后的页面标题是:", driver.title)
finally:
# 关闭浏览器
driver.quit()
总结对比
| 特性 | PhantomJS | Selenium + Headless Chrome/Firefox |
|---|---|---|
| 维护状态 | 已停止 (2025年) | 积极维护 |
| 兼容性 | 差,不支持现代 Web 标准 | 优秀,支持所有新特性 |
| 性能 | 较慢 | 快,基于现代浏览器内核 |
| 稳定性 | 低,容易出问题 | 高,非常稳定 |
| 调试 | 困难,无法看到界面 | 容易,可切换到有头模式 |
| 社区支持 | 无 | 强大,文档和案例丰富 |
最终建议:
请直接选择 Selenium + Headless Chrome 或 Selenium + Headless Firefox,这是业界公认的最佳实践,能为你未来的项目节省大量的时间和精力去解决兼容性和稳定性问题,PhantomJS 只应该在你需要维护一个非常古老的、无法修改的项目时才考虑使用。
