Linux(CentOS)搭建Selenium + PHP-WebDriver:从环境配置到自动化实践

小蒋2026-08-14 16:56:17

背景:为什么需要在Linux上搭建Selenium?

在Web开发与自动化测试中,我们常常需要模拟真实用户行为来执行重复性任务,例如:

  • 自动化测试:对Web应用进行功能回归测试,确保代码变更不会破坏现有功能。

  • 数据采集:从动态加载内容的网站(如使用JavaScript渲染的页面)抓取结构化的数据。

  • 日常运维:自动执行网站登录、表单提交、定时任务等需要浏览器环境支撑的操作。

在Linux(特别是CentOS)服务器环境下,由于缺乏图形界面,无法直接运行带有可视化窗口的浏览器。因此,我们需要借助 Selenium 这个强大的浏览器自动化框架,并配合 无头模式(Headless) 的Chrome浏览器,在无图形界面的服务器上驱动浏览器执行任务。

同时,为了让PHP语言能够方便地控制Selenium,我们还需要安装 PHP-WebDriver 这个Composer包。它提供了面向对象的API,让PHP开发者可以像操作本地浏览器一样编写自动化脚本。

核心步骤:搭建与配置流程

本教程的核心目标是:在CentOS系统上,搭建起Java运行环境、Chrome浏览器、Selenium独立服务器、ChromeDriver驱动,并通过Composer安装PHP-WebDriver库,最终实现PHP脚本对浏览器的自动控制。

1. 安装基础环境

  • 安装Java环境:Selenium Standalone Server是基于Java的,因此首先需要安装Java运行环境(JRE)。使用 yum -y install java-1.8.0-openjdk* 命令即可完成安装。

  • 安装Chrome浏览器:通过官方提供的RPM包,使用 yum install 命令可以直接安装Google Chrome稳定版。

bash
# 安装Java环境
yum -y install java-1.8.0-openjdk*x86_64

# 安装Chrome
yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

2. 下载与配置Selenium服务

  • 下载Selenium Server:从Google Storage下载对应版本的 selenium-server-standalone.jar 文件,并放置在约定目录(如 /usr/local/selenium/)下。

  • 下载ChromeDriver:ChromeDriver是让Selenium控制Chrome浏览器的桥梁。特别需要注意,其版本必须与你安装的Chrome浏览器版本相匹配(或选择最接近的版本)。下载后解压至同一目录。

  • 启动Selenium服务:通过 java -jar 命令启动Selenium Server,并指定ChromeDriver的路径和监听端口(例如 6666),使其作为一个后台服务等待PHP脚本的连接。

bash
# 下载selenium(以3.9.1版本为例)
mkdir /usr/local/selenium
wget -c http://selenium-release.storage.googleapis.com/3.9/selenium-server-standalone-3.9.1.jar -O /usr/local/selenium/selenium-server-standalone.jar

# 查看Chrome版本
/opt/google/chrome/chrome -version

# 下载chromedriver(版本需与Chrome对应)
wget -c https://chromedriver.storage.googleapis.com/107.0.5304.62/chromedriver_linux64.zip -O /usr/local/selenium/chromedriver_linux64.zip
unzip /usr/local/selenium/chromedriver_linux64.zip -d /usr/local/selenium/

# 运行selenium服务
java -jar -Dwebdriver.chrome.driver="/usr/local/selenium/chromedriver" /usr/local/selenium/selenium-server-standalone.jar -port 6666

3. 安装PHP-WebDriver库

在你的PHP项目目录中,使用Composer引入官方的 php-webdriver/webdriver 包。这是PHP与Selenium Server通信的客户端库。

bash
cd /home/webdriver/
composer require php-webdriver/webdriver

4. 编写并运行PHP测试脚本

  • 配置无头模式:在脚本中,通过 ChromeOptions 类添加 --headless 参数,这样浏览器就会在后台运行,不会弹出窗口,适合服务器环境。

  • 建立连接:使用 RemoteWebDriver::create() 方法,连接到本机启动的Selenium服务(http://127.0.0.1:6666/wd/hub)。

  • 执行操作:脚本中演示了两种典型场景:

    • 场景一:访问一个网站(notevm.com),执行搜索关键词(“php”),并抓取搜索结果中的特定元素文本,保存到本地文件。

    • 场景二:模拟翻页,访问百度搜索“webdriver”的结果列表,并循环抓取两页的内容。

  • 等待机制:脚本中使用了显式等待(wait)和隐式等待(implicitlyWait),以确保页面元素加载完成后再进行操作,提高脚本的稳定性。

测试代码一:网站搜索与内容抓取

php
<?php
namespace Facebook\WebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Chrome\ChromeOptions;
require_once('./vendor/autoload.php');

$options = new ChromeOptions();
$options->addArguments(array('--no-sandbox','--disable-dev-shm-usage'));
$options->addArguments(array('--headless')); // 无头模式,不会弹出浏览器窗口,没有安装图形界面的一定要设置这个
// $options->setExperimentalOption('prefs', array('profile.managed_default_content_settings.images'=>2)); // 禁止加载图片

$capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);

$host = 'http://127.0.0.1:6666/wd/hub'; // selenium服务监听地址
$driver = RemoteWebDriver::create($host,$capabilities,5000);

$size = new WebDriverDimension(1920,1080); // 窗口大小
$driver->manage()->window()->setSize($size); // 设置窗口大小
// $driver->manage()->window()->maximize(); // 浏览器窗口最大化

$driver->get('https://www.notevm.com/'); // 打开网页

/*
$driver->wait(10,100)->until( // 等待class为navbar-search-icon的元素加载完成,最多等待10秒,每100毫秒重试一次
    function () use ($driver){
        return $driver->findElements(WebDriverBy::className('navbar-search-icon'));
    }
);
*/

$driver->manage()->timeouts()->implicitlyWait(10); // 等待所有元素加载完成,最多等待10秒

$driver->findElement(WebDriverBy::className('navbar-search-icon'))->click(); // 点击搜索按钮
$driver->findElement(WebDriverBy::className('navbar-search-input'))->click(); // 点击输入框
$driver->getKeyboard()->sendKeys('php'); // 输入php
$driver->findElement(WebDriverBy::className('navbar-search-btn'))->click(); // 点击搜索按钮

/*
$driver->getKeyboard()->pressKey(WebDriverKeys::ENTER); // 按下回车键
$driver->getKeyboard()->releaseKey(WebDriverKeys::ENTER); // 释放回车键
*/

$driver->wait(10,100)->until(
    function () use ($driver){
        return $driver->findElements(WebDriverBy::className('main')); // 等待class为main的元素加载完成
    }
);

$elements = $driver->findElements(WebdriverBy::cssSelector('div.item-excerpt>p'));
if($elements){
    foreach ($elements as $element){
        file_put_contents('./sanqing.txt',$element->getText().PHP_EOL,FILE_APPEND); // 保存到文件
        echo '>> ' . $element->getText().PHP_EOL;
    }
}

sleep(1);
echo PHP_EOL;
echo '结束了'.PHP_EOL;
sleep(3);
$driver->quit();
?>

测试代码二:百度搜索翻页抓取

php
<?php
namespace Facebook\WebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\WebDriverBy;
require_once('./vendor/autoload.php');

$options = new ChromeOptions();
$options->addArguments(array('--no-sandbox','--disable-dev-shm-usage'));
$options->addArguments(array('--headless')); // 无头模式,不会弹出浏览器窗口,没有安装图形界面的一定要设置这个

$capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options);

$host = 'http://127.0.0.1:6666/wd/hub'; // selenium服务监听地址
$driver = RemoteWebDriver::create($host,$capabilities,5000);

for ($i = 0;$i < 2; $i++){
    $pn = $i * 10;
    $driver->get('https://www.baidu.com/s?wd=webdriver&pn=' . $pn);
    $elements = $driver->findElements(WebdriverBy::cssSelector('span.content-right_8Zs40'));
    if($elements){
        foreach ($elements as $element){
            echo '>> ' . $element->getText().PHP_EOL;
        }
    }
    sleep(1);
}

sleep(1);
echo PHP_EOL;
echo '结束了'.PHP_EOL;
sleep(3);
$driver->quit();
?>

总结

通过本教程,我们完整地走通了在CentOS系统上搭建Selenium自动化环境的核心流程,并验证了PHP通过WebDriver控制浏览器的基本能力。整个过程可以概括为以下几个关键环节:

阶段核心任务关键点与工具
环境准备安装Java、Chrome浏览器yum 包管理器
服务搭建下载Selenium Server和ChromeDriver版本匹配、java -jar启动服务
库安装在PHP项目中引入WebDriverComposer包管理
脚本开发编写PHP脚本,实现自动化操作无头模式、等待机制、元素定位

这套环境为后续进行更复杂的自动化任务(如登录验证、批量数据提交、网页截图等)奠定了坚实的基础。在运行过程中,如果遇到连接超时或元素找不到的问题,建议优先检查Selenium服务的端口是否可访问,以及页面元素的定位策略是否准确。

曝光3501浏览265