pachico/voyeur

此包已被弃用且不再维护。未建议替换包。

Voyeur 通过 Selenium 在不同浏览器上抓取网站屏幕截图

0.2.0 2016-03-22 09:45 UTC

This package is auto-updated.

Last update: 2022-01-21 21:51:32 UTC


README

Build Status codecov.io Codacy Badge

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

特此免费许可,任何获得本软件及其相关文档文件(“软件”)副本的人(“个人”),可以不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许获得软件的个人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的副本或实质性部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他原因,源于、因或与软件或软件的使用或其他交易有关。