当前位置:首页 > 资讯列表 >Linux(CentOS)下配置 Selenium 与 PHP-WebDriver:环境部署及自动化测试实战

Linux(CentOS)下配置 Selenium 与 PHP-WebDriver:环境部署及自动化测试实战

发布时间:2026-08-14 16:57:59 分类:营销学堂

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

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

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

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

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

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

1. 安装基础环境

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服务

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测试脚本

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

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服务的端口是否可访问,以及页面元素的定位策略是否准确。