虽然 PhantomJS 已经在 2025 年停止了官方维护,并且社区普遍推荐使用 Headless Chrome (通过 Selenium) 作为替代方案,但由于你的问题明确指向 PhantomJS,我会首先提供完整的 PhantomJS 实现方法,然后介绍目前更推荐的最佳实践。

使用 Python + Selenium + PhantomJS (传统方法)
这是最常见和最直接的方法,通过 Selenium 这个自动化测试工具来驱动 PhantomJS 浏览器。
环境准备
你需要安装 Python、Selenium 库和 PhantomJS 浏览器本身。
安装 Python 库:
pip install selenium
下载 PhantomJS:
PhantomJS 不是一个 Python 库,而是一个独立的浏览器程序,你需要下载它并将其路径添加到系统的环境变量 PATH 中,或者在代码中指定其完整路径。

- 下载地址: https://phantomjs.org/download.html
- 选择对应你操作系统的版本 (Windows, macOS, Linux)。
- 下载后,解压压缩包,你会得到一个
phantomjs.exe(Windows) 或phantomjs(macOS/Linux) 文件。 - 推荐做法: 将这个可执行文件所在的目录路径添加到系统的环境变量
PATH中,这样 Python 就能直接找到它,如果不方便修改环境变量,就需要在代码中指定它的完整路径。
Python 代码实现
下面是一个完整的 Python 脚本,用于截取指定网页的整个页面截图。
# 导入所需的库
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
# --- 步骤 1: 指定 PhantomJS 的路径 ---
# 如果你已经将 phantomjs 添加到系统 PATH,可以省略此步,直接使用 'phantomjs'
# 否则,请提供 phantomjs.exe (或 phantomjs) 的完整路径
PHANTOMJS_PATH = r'C:\path\to\your\phantomjs\bin\phantomjs.exe' # Windows 示例
# PHANTOMJS_PATH = '/usr/local/bin/phantomjs' # macOS/Linux 示例
# --- 步骤 2: 配置 PhantomJS 的 DesiredCapabilities ---
# 这可以用来设置 PhantomJS 的一些参数,例如禁用图片加载以加快速度
dcap = dict(DesiredCapabilities.PHANTOMJS)
# dcap["phantomjs.page.settings.loadImages"] = False # 禁用图片加载
# --- 步骤 3: 初始化 WebDriver ---
# 如果路径在 PATH 中,直接使用 'phantomjs'
# driver = webdriver.PhantomJS(desired_capabilities=dcap)
# 如果需要指定路径
try:
driver = webdriver.PhantomJS(executable_path=PHANTOMJS_PATH, desired_capabilities=dcap)
print("PhantomJS 初始化成功!")
except Exception as e:
print(f"无法初始化 PhantomJS: {e}")
print("请确保 PhantomJS 已安装并且路径正确。")
exit()
# --- 步骤 4: 打开目标网页 ---
url = "https://www.python.org"
print(f"正在打开网页: {url}")
driver.get(url)
# --- 步骤 5: 截图 ---
# save_screenshot() 方法会保存整个页面的截图
output_filename = "python_screenshot.png"
print(f"正在截图并保存为: {output_filename}")
driver.save_screenshot(output_filename)
# --- 步骤 6: 关闭 WebDriver ---
# 释放资源,非常重要!
driver.quit()
print("截图完成!")
运行代码
将上述代码保存为 phantomjs_screenshot.py,然后运行:
python phantomjs_screenshot.py
如果一切顺利,你会在脚本同目录下找到一个名为 python_screenshot.png 的图片文件。
使用 Python + Selenium + Headless Chrome (现代推荐方案)
由于 PhantomJS 已停止维护,现在更推荐使用无头模式的 Chrome 或 Firefox,它们功能更强大、兼容性更好、性能也更优。

环境准备
- 安装 Python 库:
pip install selenium
- 安装 Chrome 浏览器: 确保你的电脑上已经安装了 Chrome 浏览器。
- 安装 ChromeDriver: Selenium 需要通过一个叫
ChromeDriver的程序来控制 Chrome 浏览器。- 下载地址: https://googlechromelabs.github.io/chrome-for-testing/
- 选择与你的 Chrome 浏览器版本匹配的
chromedriver,你可以在 Chrome 地址栏输入chrome://version/查看版本号。 - 下载后,将
chromedriver(或chromedriver.exe) 放在一个方便的位置,并记住它的路径,或者将其添加到系统PATH中。
Python 代码实现
代码与 PhantomJS 的版本非常相似,只需要更换 WebDriver 的初始化方式。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# --- 步骤 1: 指定 ChromeDriver 的路径 ---
# CHROMEDRIVER_PATH = r'C:\path\to\your\chromedriver\chromedriver.exe' # Windows 示例
# CHROMEDRIVER_PATH = '/usr/local/bin/chromedriver' # macOS/Linux 示例
# --- 步骤 2: 配置 Chrome 选项 ---
chrome_options = webdriver.ChromeOptions()
# 设置为无头模式,这是关键!
chrome_options.add_argument('--headless')
# 可选:设置窗口大小,某些网页需要特定窗口大小才能正确渲染
chrome_options.add_argument('--window-size=1920,1080')
# 可选:禁用图片加载以加快速度 (Chrome)
# chrome_options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
# --- 步骤 3: 初始化 WebDriver ---
# 使用 Service 对象来指定 chromedriver 路径 (推荐的新方式)
# service = Service(executable_path=CHROMEDRIVER_PATH)
# driver = webdriver.Chrome(service=service, options=chrome_options)
# chromedriver 在 PATH 中,可以简化为
try:
driver = webdriver.Chrome(options=chrome_options)
print("Headless Chrome 初始化成功!")
except Exception as e:
print(f"无法初始化 Chrome: {e}")
print("请确保 Chrome 和 ChromeDriver 已安装并且版本匹配、路径正确。")
exit()
# --- 步骤 4: 打开目标网页 ---
url = "https://www.python.org"
print(f"正在打开网页: {url}")
driver.get(url)
# --- 步骤 5: 截图 ---
output_filename = "python_screenshot_chrome.png"
print(f"正在截图并保存为: {output_filename}")
driver.save_screenshot(output_filename)
# --- 步骤 6: 关闭 WebDriver ---
driver.quit()
print("截图完成!")
运行代码
保存并运行这个脚本,你会得到一个由无头 Chrome 生成的截图。
总结与对比
| 特性 | PhantomJS (传统方法) | Headless Chrome (现代方法) |
|---|---|---|
| 状态 | 已停止维护 | 积极开发中,官方推荐 |
| 兼容性 | 可能无法渲染现代网页和 JavaScript | 与最新网页标准完全兼容 |
| 功能 | 基础功能,如截图、执行 JS | 功能强大,支持所有 Chrome DevTools 协议功能 |
| 性能 | 相对较慢 | 性能优异 |
| 依赖 | 需要单独下载 phantomjs |
需要安装 Chrome 和 ChromeDriver |
| Python 代码 | webdriver.PhantomJS() |
webdriver.Chrome(options=chrome_options) |
- 如果你只是想学习或维护旧项目,可以使用 PhantomJS 方法。
- 对于任何新项目或生产环境,强烈推荐使用 Headless Chrome 方法,它是当前业界标准的无头浏览器解决方案,更稳定、更可靠。
希望这个详细的指南能帮助你解决问题!
