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

安装浏览器(Google Chrome 或 Firefox)

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

下载最新版的 64 位 Google Chrome:

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

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

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

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

sudo apt-get install -f

测试 Google Chrome:

# 安装中文字体
sudo apt-get install fonts-noto-cjk
# 运行 Google Chrome headless 并截图保存
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。

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

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

启动 Chromedriver 并监听 4444 端口。

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

安装 Php-webdriver

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

安装 Php-webdriver

composer require php-webdriver/webdriver

使用 Php-webdriver

打开浏览器

$options = new ChromeOptions();
$options->addArguments([
'--window-size=1400,900',
'--headless',
]); $capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability(ChromeOptions::CAPABILITY, $options); $host = 'http://localhost:4444';
$driver = RemoteWebDriver::create($host, $capabilities);

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

打开 URL

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

刷新页面

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

查找单个元素

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

查找多个元素

$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 表达式查询

输入内容

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

点击元素

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

截图

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

执行 JS

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

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

$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. docker 容器核心技术

    容器的数据卷(volume)也是占用磁盘空间,可以通过以下命令删除失效的volume: [root@localhost]# sudo docker volume rm $(docker volume ...

  2. 枚举:Enum-Int-String之间的转换与扩展

    示例枚举: public enum Color { [Description("红色")] Red, [Description("绿色")] Green = 7 ...

  3. SpringMvc上传图片及表单提交(单文件+实体类参数提交)

    前两天做项目用到了Springmvc的文件上传来上传图片,由于和这个普通的Java文件上传处理流程不太一样,所以做的时候碰了壁,一顿百度,博客,要不就是一部分代码,要不就是看不懂,用不会的代码,下面来 ...

  4. vim命令备份

    vim命令 vim键盘位置说明 在命令状态下对当前行用 == (连按=两次), 或对多行用 n==(n是自然数)表示自动缩进从当前行起的下面n行. 可以试试把代码缩进任意打乱再用 n== 排版,相当于 ...

  5. React实践相关

    语法高亮: sublime ctrl+shift+P 安装babel ,在view-syntax-open all width current extension as...-babel-js(bab ...

  6. 《机器学习_07_02_svm_软间隔支持向量机》

    一.简介 上一节介绍了硬间隔支持向量机,它可以在严格线性可分的数据集上工作的很好,但对于非严格线性可分的情况往往就表现很差了,比如: import numpy as np import matplot ...

  7. javascript 获取页面的高度及滚动条的位置的代码

    http://www.jb51.net/article/23331.htm javascript 获取页面的高度及滚动条的位置的代码 作者: 字体:[增加 减小] 类型:转载   javascript ...

  8. PAT 乙级-1025 链表反转

    给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4:如果K为4,则输出应该为4→3→2→1→5→6,即最后 ...

  9. zookeeper实现分布式锁总结,看这一篇足矣(设计模式应用实战)

    分布式锁纵观网络各种各样的帖子层出不穷,笔者查阅很多资料发现一个问题,有些文章只写原理并没有具体实现,有些文章虽然写了实现但是并不全面 借这个周末给大家做一个总结,代码拿来就可以用并且每一种实现都经过 ...

  10. {dede:channelartlist} 改变偶数的class

    {dede:channelartlist} <div {dede:global.itemindex runphp='yes'} if((@me %2) == 0){ @me = 'class=& ...