Php-webdriver 是 Facebook 开发的基于 PHP 语言实现的 Selenium WebDriver 客户端组件,可以用它来操作浏览器。常见的操作包括:自动化测试、采集数据等。

安装浏览器(Google Chrome 或 Firefox)

以 Ubuntu server 16.04 安装 Google Chrome 浏览器为例(参考链接)。

下载最新版的 64 位 Google Chrome:

  1. wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

安装 Google Chrome 并自动安装依赖:

  1. sudo dpkg -i --force-depends google-chrome-stable_current_amd64.deb

若提示 dependency problems 出错信息,表示某些依赖库没有安装,键入以下命令来自动安装好依赖:

  1. sudo apt-get install -f

测试 Google Chrome:

  1. # 安装中文字体
  2. sudo apt-get install fonts-noto-cjk
  3. # 运行 Google Chrome headless 并截图保存
  4. LANGUAGE=ZH-CN.UTF-8 google-chrome --headless https://www.pc6.com --no-sandbox --screenshot --window-size=1400,900

看到如下的图片就表明安装成功了。

安装浏览器驱动程序(Chromedriver 或 Geckodriver)

以安装 Chromdriver 为例。

要保证 Chromedriver 和 Google Chrome 是相匹配的版本。在 Chromedriver 的官方下载页面有版本说明,按照需要下载。

如果安装的 Google Chrome 的版本号是 81,那么根据 Chromdriver 官方说明,也需要下载对应的版本号是 81 的 Chromdriver。

  1. # 查询 Google Chrome 的版本号
  2. root@aeb9f39e9e04:/tmp# google-chrome --version
  3. Google Chrome 81.0.4044.92

下载完成后,解压缩出二进制的可执行文件,这就是我们需要的浏览器驱动程序(WebDriver)了。通过 Chromedriver 可以控制 Google Chrome 的操作。

启动 Chromedriver 并监听 4444 端口。

  1. LANGUAGE=ZH-CN.UTF-8 ./chromedriver --port=4444

安装 Php-webdriver

当做完前面两步准备工作,安装好了浏览器(Google Chrome)与浏览器驱动程序(Chromdriver)之后,总算可以进入主题,安装与使用 Php-webdriver 了。

安装 Php-webdriver

  1. composer require php-webdriver/webdriver

使用 Php-webdriver

打开浏览器

  1. $options = new ChromeOptions();
  2. $options->addArguments([
  3. '--window-size=1400,900',
  4. '--headless',
  5. ]);
  6. $capabilities = DesiredCapabilities::chrome();
  7. $capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
  8. $host = 'http://localhost:4444';
  9. $driver = RemoteWebDriver::create($host, $capabilities);

以上代码加上了打开浏览器的同时加上了窗口大小和无头浏览器的参数,可以按需增减。更多关于 ChromeOptions 的参数请查看 https://sites.google.com/a/chromium.org/chromedriver/capabilities

打开 URL

  1. $driver->get('https://www.baidu.com/');
  2. $driver->navigate()->to('https://www.sogou.com/');

刷新页面

  1. $driver->navigate()->refresh();

查找单个元素

  1. $element = $driver->findElement(WebDriverBy::cssSelector('div.header'));

查找多个元素

  1. $elements = $driver->findElements(WebDriverBy::cssSelector('ul.foo > li'));

WebDriverBy 提供了多种查询方式:

WebDriverBy::id($id) 根据 ID 查找元素

WebDriverBy::className($className) 根据 class 查找元素

WebDriverBy::cssSelector($selctor) 根据通用的 css 选择器查询

WebDriverBy::name($name) 根据元素的 name 属性查询

WebDriverBy::linkText($text) 根据可见元素的文本锚点查询

WebDriverBy::tagName($tagName) 根据元素标签名称查询

WebDriverBy::xpath($xpath) 根据 xpath 表达式查询

输入内容

  1. $driver->findElement(WebDriverBy::cssSelector('input[name=username]'))->sendKeys('imzhi');

点击元素

  1. $driver->findElement(WebDriverBy::cssSelector('button#login'))->click();

截图

  1. $driver->takeScreenshot(__DIR__ . '/screenshot.png');

执行 JS

RemoteWebDriver::executeScript($script, $args) 执行同步 JS 代码

RemoteWebDriver::executeAsyncScript($script, $args) 执行异步 JS 代码

  1. $driver->executeScript("document.body.style.backgroundColor = 'red';");

关于 Php-webdriver 的更多使用详情可以去官方 wiki 或者去官方 API 文档上查阅。

最后用一个小例子结束这篇教程。

抓取豆瓣电影的DEMO

抓取豆瓣电影里韩国分类下最新上映的前 120 部影视剧的标题与 LOGO 到本地文件夹中。

https://gist.github.com/imzhi/ae547a504e8344e6f2333213eddec97e

采集结果截图:

Php-webdriver 的安装与使用教程的更多相关文章

  1. selenium webdriver从安装到使用(python语言),显示等待和隐性等待用法,切换窗口或者frame,弹框处理,下拉菜单处理,模拟鼠标键盘操作等

    selenium的用法 selenium2.0主要包含selenium IDE 和selenium webDriver,IDE有点类似QTP和LoadRunner的录制功能,就是firefox浏览器的 ...

  2. CentOS7下自定义目录安装mono+jexus教程

    一.阅读前须知: 1.本文属于安装完Centos7之后的步骤 2.如果还不了解mono,请点击mono 3.本篇主要内容是使用自定义目录安装mono+jexus教程,使用默认目录请查看使用默认目录安装 ...

  3. 【转】真正从零开始,TensorFlow详细安装入门图文教程!(帮你完成那个最难的从0到1)

    AI这个概念好像突然就火起来了,年初大比分战胜李世石的AlphaGo成功的吸引了大量的关注,但其实看看你的手机上的语音助手,相机上的人脸识别,今日头条上帮你自动筛选出来的新闻,还有各大音乐软件的歌曲& ...

  4. CentOS7下默认目录安装mono+jexus教程

    一.阅读前须知: 1.本文属于安装完Centos7之后的步骤 2.如果还不了解mono,请点击mono 3.本篇主要内容是使用默认目录安装mono+jexus教程,使用自定义目录请查看使用自定义目录安 ...

  5. << CocoaPods安装和使用教程 >>github code4app以及cocoachina 苹果官方文档

    developer.apple.com 英文搜索各个技术的官方介绍文档, 前提是英文过关 cocoachina ios最新新闻, 信息 code4app上有许多组件 http://www.code4a ...

  6. webpack安装配置使用教程详解

    webpack安装配置使用教程详解 www.111cn.net 更新:2015-09-01 编辑:swteen 来源:转载 本文章来为各位详细的介绍一下关于webpack安装配置使用教程吧,这篇文章对 ...

  7. NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者

    NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者 作者: raindy 来源:http://bbs.hanzify.org/index.php?showtopic=30029 时间: ...

  8. 安装WordPress详细教程指南

    最近准备自己建一个个人博客,以便分享一些自己工作生活中的一些观点及经验,建博客当然选wordpress,毕竟wordpress是为博客而生的嘛.下边记录一下自己安装WordPress的详细过程指南,亦 ...

  9. 纯windows下制作变色龙引导安装U盘教程

    原创教程:纯windows下制作变色龙引导安装U盘教程 支持Mavericks和Yosemite 支持白苹果 目标:windows下制作带 Chamelon变色龙引导的黑苹果安装U盘,支持PC机引导安 ...

  10. 最详细在Windows安装Xamarin.iOS教程

    最详细在Windows安装Xamarin.iOS教程 来源:http://www.cnblogs.com/llyfe2006/articles/3098280.html 本文展示了如何设立Xamari ...

随机推荐

  1. VST的安装

    对需要使用VST的用户,你可以到http://www.soft-gems.net/去免费下载没有使用限制.没有广告的VST.包括例子程序以及说明文档也可以下载到,下载完成后,就是安装,以前版本的VST ...

  2. 【Leetcode】1340. Jump Game V 【动态规划/记忆性搜索】

    Given an array of integers arr and an integer d. In one step you can jump from index i to index: i + ...

  3. 2.7 Go交叉编译

    Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下. Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED= ...

  4. C# DataTable转为TXT文档

    public static void SaveCSV(DataTable dt, string fullPath) { var fi = new FileInfo(fullPath); if (!fi ...

  5. ABAP基础4:模块化

    子程序定义 以form开始,以endform结束,用perform语句调用,from语句可以在程序内部/外部,perform一定要写在前面 perform. from. 子程序模块 endform. ...

  6. C语言基础知识(四)——位操作

    一.进制基础知识 1.通常,1字节(Byte)包含8位(bit).C语言用字节表示储存系统字符集所需的大小. 2.对于一个1字节8位的二进制数,最右边(第0位)是最低阶位,最左边(第1位)是最高阶位, ...

  7. python list 与 String 互相转换

    str0 = '127.0.0.1' list0 = str0.split('.') print(list0) #['127', '0', '0', '1'] str1 = '#'.join(list ...

  8. html文本超出加省略号

    如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览. 实现方法: overflow: hidden; te ...

  9. 搭建Istio基础环境

    需求 搭建istio基础环境(基于1.5.1版本) 安装步骤 在安装 Istio 之前,需要一个运行着 Kubernetes 的环境,安装步骤可以参考前面的文章 下载istio,然后解压,然后将 is ...

  10. SpringCloud(二)- Consul介绍、安装、使用

    唯能极于情,故能极于剑有问题或错误请及时联系小编或关注小编公众号 “CodeCow”,小编一定及时回复和改正,期待和大家一起学习交流 此文由四部分组成(Consul简介.安装.实操.总结),别着急,慢 ...