pachico / voyeur
Voyeur 通过 Selenium 在不同浏览器上抓取网站屏幕截图
Requires
- php: >=5.4.0
- behat/mink-selenium2-driver: 1.3
- league/climate: 3.2.0
- league/flysystem: 1.0.16
Requires (Dev)
- codacy/coverage: dev-master
- mockery/mockery: 0.9.4
- phpunit/phpunit: 4.8.21
- phpunit/phpunit-skeleton-generator: 2.0.1
This package is auto-updated.
Last update: 2022-01-21 21:51:32 UTC
README
Voyeur 是一个通过连接 Selenium 或 Phantomjs 来抓取网站屏幕截图的工具。它允许你调整浏览器大小(如果你想要测试 CSS 断点),在截图之前执行任何 JavaScript(如果你想要与页面交互,如登录过程通常很有用)。
安装
我鼓励你使用 Composer 安装最新稳定版本,但你也可以手动下载。(无论如何,你将不得不使用 Composer 来安装其依赖。)
require pachico/voyeur dev-master
使用方法
Voyeur 使用隐喻类名,以便你知道每个类名的作用。作为 Voyeur,你需要一个 相机(即 Selenium/Phantomjs 实例,它将连接到),一个 胶卷(即存储截图的位置)以及一系列 快照(即你想要捕获的网页,包括浏览器大小、要执行的脚本等)。
简单示例
典型用法如下
use \Pachico\Voyeur\Voyeur as Voyeur,
\Pachico\Voyeur\Shot as Shot,
\Pachico\Voyeur\Film as Film,
\Pachico\Voyeur\Camera as Camera;
// We create a Camera indicating the path where Selenium/Phantomjs is running
$camera = new Camera(Camera::DRIVER_NAME_PHAMTOMJS, 'http://localhost:8910/');
// We indicate what is the folder path where screenshots will be saved
$film = new Film('/tmp/voyeur/');
// We create a Voyeur instance
$voyeur = new Voyeur($camera, $film);
// We instanciate as many Shots as we want url and destination file
$shot = new Shot('http://www.example.com/', '/example/home.png');
// Add the Shot to Voyeur and shot
$voyeur
->add_shot($shot)
->shoot();
完整示例可以在 test/example/example.php 下找到
调整浏览器大小
你可能想要以不同的浏览器大小抓取同一页面。你可以通过创建多个不同大小的 快照 并将它们添加到 Voyeur 中来实现。
$shot = new Shot('http://www.example.com/', '/example/home.png');
$shot->set_window_size(1024, 800); //width and height in pixels
执行 JavaScript
在抓取截图之前与网页交互可能是一个必要的步骤(例如,你可能想要登录,或按下将加载异步数据的按钮)。你可以在将它们添加到 Voyeur 之前,通过指定它们的路径来告诉任何 快照 执行任意数量的 JavaScript 文件。
$shot = new Shot('http://www.example.com/', '/example/home.png');
$shot->add_scripts('/path/to/your/script.js'); // absolute path to the file
注意:你可以为每个 快照 添加多个脚本。它们将按照你添加它们的顺序执行。
在截图之前等待
然而,异步内容可能需要一段时间才能加载完成,你不想在所有内容都完全加载之前就抓取截图。
稍等片刻
你可以通过告诉每个 快照 等待一定量的毫秒数来抓取截图来解决这个问题
$shot = new Shot('http://www.example.com/', '/example/home.png');
$shot->add_wait_for(3000); // It will wait 3 seconds before the shot is done
注意:你可以为每个 快照 添加多个等待策略。它们将按照你添加它们的顺序执行。
等待,但是...
另一方面,你不想等待超过所需的时间。这就是为什么这个方法接受另一个参数,它可能会加快你的屏幕抓取速度。
$shot = new Shot('http://www.example.com/', '/example/home.png');
$shot->add_wait_for(10000, '$(".somediv").is(":visible")');
在这个例子中,我使用jQuery,但任何JavaScript断言都可以工作。这将被解释为
等待具有类名 "somediv" 的元素可见。如果它在10秒内没有变为可见,仍然进行拍摄。
##相机
每个Voyeur实例只能有一个相机实例。您需要向其构造函数提供浏览器名称和Selenium/Phantomjs实例的URL
$camera = new Camera(Camera::DRIVER_NAME_PHAMTOMJS, 'http://localhost:8910/');
###Selenium
运行Selenium非常简单,并且当Firefox可用时应该直接运行。从http://www.seleniumhq.org/download/下载Selenium Server Standalone并运行它
java -jar selenium-server-standalone-[whatever-version].jar
您将在控制台中看到需要提供给相机构造函数的URL。它将类似于
http://127.0.0.1:4444/wd/hub
如果您在多台机器上执行Selenium和Voyeur,请确保正确设置IP地址。
Phantomjs
Phantomjs是一个无头浏览器,比Firefox、Chrome或其他浏览器快得多。大多数Linux发行版都有其仓库中的版本,但您也可以从http://phantomjs.org/下载。安装后,以webdriver模式执行它
phantomjs --webdriver=8910
与Selenium一样,您必须将您的Phantomjs实例的URL提供给Camera构造函数。
拍摄
在创建Shot时,您还可以通过将其作为第三个参数传递给其构造函数来指定其ID。当Voyeur加载多个Shots时,将其用作参考可能很有用。如果没有指定,它将内部创建一个唯一的ID。
$shot = new Shot('http://www.example.com/', '/example/home.png', $anystring);
##日志 如果您通过CLI(推荐)运行它,您还可以在Voyeur构造函数的第三个参数中启用输出日志
// third parameter (true) enables CLI log
$voyeur = new Voyeur($camera, $film, true);
贡献
所有建议、错误修复和功能请求都非常欢迎!提前感谢!
许可证
版权所有 (c) 2016-2019 Mariano F.co Benítez Mulet
特此免费许可,任何获得本软件及其相关文档文件(“软件”)副本的人(“个人”),可以不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许获得软件的个人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的副本或实质性部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他原因,源于、因或与软件或软件的使用或其他交易有关。