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. JS 面向对象封装 无限轮播 插件。

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  2. Winform GDI+绘图二:绘制旋转太极图

    大家好,今天有时间给大家带来Winform自绘控件的第二部分,也是比较有意思的一个控件:旋转太极图. 大家可以停下思考一下,如果让你来绘制旋转的太极图,大家有什么样的思路呢?我今天跟大家展示一下,我平 ...

  3. mybatis开发,你用 xml 还是注解?我 pick ...

    最近在看公司项目时发现有的项目mybatis是基于注解开发的,而我个人的习惯是基于xml文件开发. 对于mybatis注解开发的原理理解不够,于是翻阅了部分源码,写下此文.主要介绍了mybatis开发 ...

  4. PAT 1001 A+B Format (20分) to_string()

    题目 Calculate a+b and output the sum in standard format -- that is, the digits must be separated into ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场

    上一篇文章(https://www.cnblogs.com/meowv/p/12896898.html)已经成功将博客项目跑起来了,那么本篇主要是将之前遗留的问题解决,现在的代码看起来可能还是比较混乱 ...

  6. 【雕爷学编程】MicroPython动手做(05)——零基础学MaixPy之LCD液晶屏

    配套 2.4寸LCD屏 ST7789驱动器芯片(24P 320X240) ST7789驱动器芯片2.4寸LCD屏(24P 320X240)主要参数 1. 模块名称:液晶显示模块2. 型号:KD024C ...

  7. scrapy请求发送详解

    scrapy自动发送请求 对start_urls列表中存储的起始url进行过请求的发送并没有通过手动实现,但是在parse函数中还是获取到了响应数据,这是因为爬虫文件中的爬虫类继承到了Spider父类 ...

  8. 3.7 Go指针

    1. Go指针 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置. Go 语言中使用&作符放在变量前面对变量进行“取地址”操作. 1.指针默认值nil 2.通过&(取地值 ...

  9. nginx配置之禁止访问和404错误功能配置

    禁止访问功能配置 nginx.conf中的http{}中的server{}的location ..{}中: location / { #拒绝访问,192.168.16.0网段的同学都无法访问 /24是 ...

  10. 使用基于MVC2模式创建新闻网站

    1.什么是MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示 ...