使用php-webdriver抓取页面数据

2020-09-02  本文已影响0人  奔跑的咸鱼_

简介

Php-Webdriver 库是用于 Selenium WebDriver 的 PHP 语言绑定,它允许您从 PHP 控制 Web 浏览器。
此库与 Selenium 服务器版本 2.x、3.x 和 4.x 兼容。
该库支持JsonWireProtoco,并实现了W3CWebDriver的实验支持。W3C WebDriver 支持尚未完全提供,但它应该允许通过壁虎和新版本的 Chrome 和 Chromedriver 控制 Firefox,只有轻微的限制。
这个库的概念与Selenium项目的"官方"Java、.NET、Python和Ruby绑定非常相似
Php-Webdriver github主页:https://github.com/php-webdriver/php-webdriver

安装浏览器环境

php-webdriver 依赖浏览器环境,所以必须在系统上安装一个浏览器。
这里使用firefox作为浏览器环境,下载安装浏览器:

 yum -y install firefox

下载浏览器驱动程序

下载对应浏览器版本的驱动程序:https://www.selenium.dev/ecosystem/
查看浏览器版本:
以火狐为例

[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

运行驱动程序

解压下载好的压缩文件
运行驱动程序

./geckodriver --port=4444

安装 php-webdriver 扩展包

composer require php-webdriver/webdriver

编写php爬虫脚本

从上图的结构中可以看出,要拿到用户名,可以使用class选择器:
.landing-candidate__name > span[data-bind="text: name"]
定位到目标元素,最后获取该元素的文本内容,就拿到了用户名。
下面来编写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'; // 连接到浏览器驱动程序的地址
$desiredCapabilities = DesiredCapabilities::firefox(); // 要使用哪个浏览器
$desiredCapabilities->setCapability('moz:firefoxOptions', ['args' => ['-headless']]); // 配置浏览器启动参数,无头浏览器模式
$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
]);

执行脚本

[root@dev cj]# php index.php
array(3) {
  ["name"]=>
  string(9) "奔跑的咸鱼"
}
上一篇下一篇

猜你喜欢

热点阅读