簡介
Php-Webdriver 庫是用于 Selenium WebDriver 的 PHP 語言綁定神凑,它允許您從 PHP 控制 Web 瀏覽器。
此庫與 Selenium 服務(wù)器版本 2.x、3.x 和 4.x 兼容。
該庫支持JsonWireProtoco诱桂,并實現(xiàn)了W3CWebDriver的實驗支持。W3C WebDriver 支持尚未完全提供呈昔,但它應(yīng)該允許通過壁虎和新版本的 Chrome 和 Chromedriver 控制 Firefox挥等,只有輕微的限制。
這個庫的概念與Selenium項目的"官方"Java堤尾、.NET肝劲、Python和Ruby綁定非常相似。
Php-Webdriver github主頁:https://github.com/php-webdriver/php-webdriver
安裝瀏覽器環(huán)境
php-webdriver 依賴瀏覽器環(huán)境郭宝,所以必須在系統(tǒng)上安裝一個瀏覽器辞槐。
這里使用firefox作為瀏覽器環(huán)境,下載安裝瀏覽器:
- Windows
下載安裝程序:https://download-ssl.firefox.com.cn/releases-sha2/full/78.2esr/zh-CN/Firefox-ESR-full-latest.exe
雙擊運行安裝包粘室,根據(jù)界面引導(dǎo)完成安裝 - Linux
yum -y install firefox
下載瀏覽器驅(qū)動程序
下載對應(yīng)瀏覽器版本的驅(qū)動程序:https://www.selenium.dev/ecosystem/
查看瀏覽器版本:
以火狐為例
-
Windows
image.png
image.png
image.png - Linux
[root@dev ~]# firefox -v
Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Running without a11y support!
Mozilla Firefox 68.12.0esr
運行驅(qū)動程序
解壓下載好的壓縮文件
運行驅(qū)動程序
./geckodriver --port=4444
安裝 php-webdriver 擴展包
composer require php-webdriver/webdriver
編寫php爬蟲腳本
-
打開爬取頁面榄檬,查看頁面結(jié)構(gòu)及確認(rèn)要抓取的數(shù)據(jù)
這里以抓取頁面中的用戶名為例,打開頁面衔统,定位到元素標(biāo)簽
image.png
從上圖的結(jié)構(gòu)中可以看出鹿榜,要拿到用戶名海雪,可以使用class選擇器:
.landing-candidate__name > span[data-bind="text: name"]
定位到目標(biāo)元素,最后獲取該元素的文本內(nèi)容舱殿,就拿到了用戶名奥裸。
下面來編寫php腳本來獲取到頁面中的用戶名
- 編寫腳本
<?php
// index.php
require_once './vendor/autoload.php';
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\WebDriverBy;
$host = 'http://localhost:4444'; // 連接到瀏覽器驅(qū)動程序的地址
$desiredCapabilities = DesiredCapabilities::firefox(); // 要使用哪個瀏覽器
$desiredCapabilities->setCapability('moz:firefoxOptions', ['args' => ['-headless']]); // 配置瀏覽器啟動參數(shù),無頭瀏覽器模式
$driver = RemoteWebDriver::create($host, $desiredCapabilities);
$driver->manage()->timeouts()->implicitlyWait(5);
// 要爬取的頁面
$driver->get('https://rd5.zhaopin.com/resume/email/open?s=6204c382d8614d15a5fb40771c271891&zhaopinToken=8xeiv82zirc7ktnd&6G7wF6pI=dplHkAq_iOL_iOL_iBW2bvEDDH5ypRgnshW3faOfF_QqqkL');
//$phone = $driver->findElement(WebDriverBy::cssSelector('.landing-candidate__mobile > .landing-candidate__img'))->getAttribute('src');
//$email = $driver->findElement(WebDriverBy::cssSelector('.landing-candidate__email > .landing-candidate__img'))->getAttribute('src');
$name = $driver->findElement(WebDriverBy::cssSelector('.landing-candidate__name > span[data-bind="text: name"]'))->getText();
$driver->close();
var_dump([
'name' => $name
]);
執(zhí)行腳本
[root@dev cj]# php index.php
array(3) {
["name"]=>
string(9) "奔跑的咸魚"
}