美文网首页
使用php-webdriver抓取页面数据

使用php-webdriver抓取页面数据

作者: 奔跑的咸鱼_ | 来源:发表于2020-09-02 13:45 被阅读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/
    查看浏览器版本:
    以火狐为例

    • 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
    

    运行驱动程序

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

    ./geckodriver --port=4444
    

    安装 php-webdriver 扩展包

    composer require php-webdriver/webdriver
    

    编写php爬虫脚本

    • 打开爬取页面,查看页面结构及确认要抓取的数据
      这里以抓取页面中的用户名为例,打开页面,定位到元素标签


      image.png

    从上图的结构中可以看出,要拿到用户名,可以使用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) "奔跑的咸鱼"
    }
    

    相关文章

      网友评论

          本文标题:使用php-webdriver抓取页面数据

          本文链接:https://www.haomeiwen.com/subject/grnisktx.html