杰瑞科技汇

python phantomjs配置

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

python phantomjs配置-图1
(图片来源网络,侵删)

强烈建议你使用现代的替代品

  1. Selenium + Headless Chrome/Firefox: 这是最主流、最推荐的替代方案,Chrome 和 Firefox 的无头模式(Headless Mode)性能更好、兼容性更强、更稳定。
  2. Playwright: 一个由微软开发的新一代自动化工具,性能极佳,API 友好,支持 Chromium、Firefox 和 WebKit。

尽管如此,如果你因为某些特殊原因(如维护旧项目)必须使用 PhantomJS,下面的配置指南仍然适用。


Python 配置 PhantomJS 完整指南

这个过程主要分为三步:

  1. 下载并安装 PhantomJS
  2. 安装 Python 的 Selenium 库
  3. 编写 Python 代码进行调用

第 1 步:下载并安装 PhantomJS

你需要先将 PhantomJS 浏览器本身下载到你的计算机上。

python phantomjs配置-图2
(图片来源网络,侵删)

1 下载 PhantomJS

  1. 访问 PhantomJS 的官方发布页面:https://phantomjs.org/download.html
  2. 根据你的操作系统选择对应的版本:
    • 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

2 配置环境变量 (推荐)

为了让 Python 代码在任何地方都能找到 phantomjs.exe(或 phantomjs),最推荐的方法是将其所在目录添加到系统的 环境变量Path 中。

以 Windows 10/11 为例:

  1. 解压你下载的 .zip 文件,你会得到一个 phantomjs-2.1.1-windows 文件夹。
  2. 将这个文件夹移动到一个固定的位置,C:\phantomjs
  3. 右键点击 "此电脑" -> "属性" -> "高级系统设置" -> "环境变量"。
  4. 在 "系统变量" 部分,找到名为 Path 的变量,双击它。
  5. 点击 "新建",然后添加你刚刚存放 PhantomJS 的路径,C:\phantomjs
  6. 一路点击 "确定" 保存设置。

验证安装: 打开一个新的命令提示符 或 PowerShell 窗口,输入以下命令:

phantomjs --version

如果显示 1.1,则说明配置成功。

python phantomjs配置-图3
(图片来源网络,侵删)

对于 macOS / Linux:

  1. 解压下载的文件。
  2. 你会得到一个 phantomjs 可执行文件。
  3. 你可以将其移动到 /usr/local/bin 目录下,这个目录默认在系统的 PATH 中。
    # 假设解压后的文件在 ~/Downloads/phantomjs-2.1.1-macosx 目录下
    sudo mv ~/Downloads/phantomjs-2.1.1-macosx/phantomjs /usr/local/bin/
  4. 验证安装:
    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()

常见问题与解决方案

  1. selenium.common.exceptions.WebDriverException: Message: 'phantomjs' executable needs to be in PATH

    • 原因: Selenium 在系统的环境变量 PATH 中找不到 phantomjs 命令。
    • 解决:
      • 方法一(推荐): 按照第 1.2 步的说明,将 PhantomJS 的安装目录添加到系统环境变量 Path 中。
      • 方法二: 在代码中使用 executable_path 参数明确指定路径,如示例 2 所示。
  2. ModuleNotFoundError: No module named 'selenium'

    • 原因: Python 环境中没有安装 Selenium 库。
    • 解决: 运行 pip install selenium 进行安装。
  3. 脚本运行很慢,或者某些元素找不到

    • 原因: 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,并了解为什么转向现代工具是更好的选择。

分享:
扫描分享到社交APP
上一篇
下一篇