如何从 shell 中截取网页的某个部分的快照?

2023-11-30

我有一个网页的一部分,我需要在给定的时间间隔拍摄 gif 快照。快照需要是全页面大小分辨率,但是正如我所说,它只会到达页面上的某个位置(在本例中它位于表格之后)。

获取这样的页面快照图像的最佳方式是什么?我想把它扔到一个 cron 作业中然后忘记它,但我并没有轻易看到一个可以快速完成这个工作的工具。

解决方案:

根据 @Eduardo 的出色指导,我基于 phantomjs 和 imagemagick 实现了一个干净而快速的解决方案(Mac:brew install phantomjs & brew install imagemagick):

*注意:如果您想完全删除 imagemagick,只需将以下内容添加到 rasterize.js:page.clipRect = { top: 10, left: 10, width: 500, height: 500 }

#! /usr/bin/env bash
# Used with PhantomJS - rasterize.js source: http://j.mp/xC7u1Z

refresh_seconds=30

while true; do
    date_now=`date +"%Y-%m-%d %H%M"` 

    phantomjs rasterize.js $1 "${date_now}-original.png"  # just sucking in the first arg from shell for the URL
    convert "${date_now}-original.png" -crop 500x610+8+16 "${date_now}.png" # crop args: WIDTHxHEIGHT+LEFT_MARGIN+TOP_MARGIN
    rm "${date_now}-original.png"

    echo "Got image: ${date_now}.png - Now waiting ${refresh_seconds} seconds for next image..."
    sleep ${refresh_seconds}
done

这是上面 phantomjs 使用的 js:

// As explained here: http://code.google.com/p/phantomjs/wiki/QuickStart

var page = new WebPage(),
    address, output, size;

if (phantom.args.length < 2 || phantom.args.length > 3) {
    console.log('Usage: rasterize.js URL filename');
    phantom.exit();
} else {
    address = phantom.args[0];
    output = phantom.args[1];
    page.viewportSize = { width: 600, height: 600 };
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, 200);
        }
    });
}

这个问题已经在这里得到了回答:如何使用 Python 截取网站的屏幕截图/图像?

它已于 09 年得到答复,但该选项仍然非常有效。我将尝试扩展更多选项。

这些工具将为您提供整页快照,稍后您可以使用 imagemagick 轻松剪辑。

这些天您可能有的另一个选择是幻影。 Phantom 是一款在 Node 上运行的无头浏览器,它允许您拍摄整个页面或页面的某个区域的图片。

看一眼这个例子:

var page = new WebPage(),
    address, output, size;

if (phantom.args.length < 2 || phantom.args.length > 3) {
    console.log('Usage: rasterize.js URL filename');
    phantom.exit();
} else {
    address = phantom.args[0];
    output = phantom.args[1];
    page.viewportSize = { width: 600, height: 600 };
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, 200);
        }
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 shell 中截取网页的某个部分的快照? 的相关文章

  • 当名称是数组时如何使用 Javascript 修改 HTML Select

    我有两个同名的 html select 对象 它们是具有不同索引的数组 我想做的是 如果从类别 0 选择元素中选择 关闭 我想禁用类别 1 元素 我一直在尝试使用 document getElementsByName 但无法弄清楚如何专门针
  • 如何删除事件监听器?

    下面是我的事件监听器代码 window addEventListener beforeunload function e if sessionStorage token abide call api 如果我想删除这个事件监听器 我该怎么办
  • 需要禁用引导时间选择器的输入

    我正在使用 Bootstrap 时间选择器 我已经成功实施了 但我需要的是用户只能在 30 分钟间隙内插入 例如 10 00 10 30 11 00 等 为此我尝试过的是minuteStep如下图所示 效果完美 fantasyleague
  • 如何检测不渲染 .png 透明的浏览器

    我有这段代码可以根据一周中的某一天渲染图像 但在 IE6 及更低版本以及可能其他一些浏览器中 它不会呈现 png 不透明度 所以我想稍微改变一下 这样它就会检测到不渲染 alpha 透明度的浏览器 并告诉他们加载这个图像 img horar
  • 如何将元素的每个单词包装在span标签中?

    div date contents filter function return this nodeType 1 wrap span span 我是新手 认为代码可以解决问题 但它将所有内容都包含在 span 像这样 div class d
  • 有什么方法可以在不重新加载的情况下更改标头 URL? [复制]

    这个问题在这里已经有答案了 可能的重复 修改URL而不重新加载页面 https stackoverflow com questions 824349 modify the url without reloading the page 使用新
  • JavaScript 逻辑赋值是如何工作的?

    在 javascript 中 如果我们有一些代码 例如 var a one var b q a alert b 逻辑 OR 运算符会将 a 的值分配给 b 并且警报将为 一 这仅限于作业还是我们可以在任何地方使用它 似乎空字符串被视为与未定
  • Hydrate with RTK Query 确实会抛出错误

    我有一个非常简单的组件来显示来自本地 API 的数据 使用 Nextjs API 路由制作 我使用 RTK 查询来获取数据 const api createApi reducerPath data baseQuery fetchBaseQu
  • 动态地将 .on() 方法与事件映射绑定

    我使用此语法来确保事件绑定动态添加li元素 ul list on click li function do something 我尝试使用这样的事件映射来存档相同的内容 ul list hammer css hacks false on s
  • 两个日期之间间隔 15 分钟 javascript

    问题 我需要将两个日期 时间戳之间的所有 15 分钟时隙 日期格式 2016 08 10 16 00 00 创建为 HH mm 格式的数组 其中分钟限制为 00 15 30 45 示例 中午 12 30 到下午 2 30 将 gt 12 3
  • 如何在bash中进行二进制加法

    我正在尝试将两个 32 位二进制数相加 其中之一是常数 address range in binary 另一个是数组的元素 IPinEachSubnet val 我正在尝试按照说明进行操作here https www linuxquesti
  • 未处理的承诺拒绝:Zone.js 检测到 ZoneAwarePromise `(window|global).Promise` 已被覆盖

    我尝试将 Angular2 快速入门代码合并到我当前的 webpack 构建中 似乎有些东西正在覆盖zone js抛出此错误的承诺 根据我见过的大多数 stackoverflow 帖子 zone js文件需要在任何可能包含承诺的文件之后加载
  • 替换打字稿中字符串中字符的所有实例?

    我正在尝试用 x 字符替换电子邮件中的所有句号 例如 电子邮件受保护 cdn cgi l email protection 将变为 myxemail emailxcom 电子邮件设置为字符串 我的问题是它不只是替换句号 而是替换每个字符 所
  • backbone.js:视图中影响集合中不同模型的按钮

    我刚刚开始使用backbone js 到目前为止 我真的很喜欢它 我有这样的事情 ModelA ModelB ViewA ViewB ModelA 持有 ModelB 的集合 如何使用按钮构建模型 B 的视图 单击该按钮会更改集合中下一个
  • React TypeError:x 不是函数

    我在子组件中从父组件调用函数 booksRefresh 但出现错误 类型错误 booksRefresh 不是函数 我不知道为什么 因为 booksRefresh 是一个函数 有人可以帮我解释为什么会出现这个错误吗 这是我的代码 import
  • 如何在 JavaScript 中从代理对构造 UTF-16 字符?

    以下计算 Unicode 代码点的 UTF 16 代理对 戴着医用口罩的脸 https emojipedia org face with medical mask 但是如何从代理对构造字符以在字符串中使用呢 const codepoint
  • 需要根据用户选择有条件地渲染具有 X 行数的部分

    我有一个反应组件 其中包含一个下拉列表 其中的选项包括none 1 5 and 13 根据用户选择的数字 我需要渲染一个部分 其中包括许多行 每个行都有字段名称和下拉列表 如果用户不选择任何一个 我需要整个附加配置部分消失 新部分中的每个下
  • Skrollr 添加空白

    我已经尝试了一切 我在谷歌上阅读了 4 5 页试图找到适合我的修复程序 已经筋疲力尽了 即使我使用 skrollr 示例 我的问题仍然存在 不是说他们做错了什么 我知道我只是没有正确理解它 因此 我上传了一个演示 仅在移动设备上展示这个尴尬
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM

随机推荐

  • 用角度渲染动态占位符

    我环顾四周 发现了几个标有 ng placeholder 或非常相似的资源 我无法让它工作
  • 尽管在 zshrc 中正确设置了它,但 echo $JAVA_HOME 在 MacOS catalina 中返回空白

    我使用最新的 MacOS catalina 10 15 4 并使用 zshrc我的个人资料的最新版本Mac 已弃用 bash shell 这是后续问题我之前未回答的问题是无法使用 jenv 将默认 java 版本更改为 1 8 当我尝试调试
  • firebase 数据库按值排序工作错误

    所以我有一个商店数据库 每个商店的名称前面都有一个数字 它们以随机顺序添加 但我希望它们按从 1 到 213 的顺序显示 我的问题是当我使用orderbyvalue 它显示它们就像 1 Store 10 Store 11 Store 12
  • AWS Cli 与不兼容 DNS 的存储桶同步

    有没有办法使用 AWS 命令 行将本地文件夹与包含句点 的存储桶同步 如果我这样做 aws s3 sync local folder s3 files domain com backup 我收到此错误 致命错误 名为 files domai
  • 为什么 SomeStruct() is AnyObject 返回 true? [复制]

    这个问题在这里已经有答案了 我对 AnyObject 的用法有点困惑 让我举几个例子 任意对象 NSObject is AnyObject true 如预期 class MyClass MyClass is AnyObject true 如
  • ASP.NET 忽略 Web.config 中的 IE7 兼容模式标记

    我的 Web config 文件中有以下部分
  • 如何使用 ASP.NET VB 以编程方式取消 Outlook 会议?

    我可以以编程方式创建一个会议请求 该请求通过代码发送给用户并显示在 Outlook 邮件中 用户可以在其中接受请求 如果接受 约会将显示在他们的 Outlook 日历上 但我无法弄清楚如何以编程方式取消同一事件 下面的代码是我用来发送会议邀
  • 优步 API iOS OAuth 2.0

    我试图制作一个 iOS 它将使用 Uber API 来完成诸如打车之类的事情 我正在尝试在 iPhone 上实现 OAuth 2 0 而不使用任何服务器端帮助 那可能吗 有人这样做过吗 以下是一些参考 优步身份验证 https develo
  • 如何处理多个可能的值进行查询?

    我正在构建一个 MVC 应用程序 用户可以在其中使用大量过滤器来准确获得他想要的内容 以下是基于控制器方法的这些过滤器的概述 GET Card SearchIndex public ActionResult SearchIndex stri
  • 本地 Firebird 数据库复制/同步到在线数据库

    我正在寻找如何将数据从本地 firebird 数据库同步到在线数据库的提示 很少评论 在本地计算机上 我使用销售软件将数据保存在 firebird db 上 有互联网连接 但我想避免直接数据库访问 因为晚上 9 点后电脑将被关闭 我想创建一
  • PHP 邮件的替代方案

    和 关联之前的一个问题我正在寻找一种替代方法 将订单从我的网站发送到我公司处理订单的部门 目前我使用 PHP mail 但这经常会出现问题 出现大的延误 PHP mail 是否有替代方案pushes订单到我公司 所以我不想对网站进行民意调查
  • 从 git 跟踪中删除文件夹

    我需要从跟踪中排除一个文件夹 名称上传 我试着跑 git rm r cached wordpress wp content uploads 之后我添加了 gitignore 的路径 wordpress wp content uploads
  • 具有自定义阴影的 NSWindow

    我想在 NSWindow 对象上绘制自定义阴影 有没有办法通过将自己的 NSShadow Object 传递给 NSWindow 来做到这一点 或者一个 私有 方法 我可以在其中放置我自己的绘图代码 Thanks 不 您不应该改变窗口的外观
  • CSS中是否可以选择具有特定内容或属性的元素?

    是否可以选择具有特定内容的元素 例如在 footer我有多个所以我无法使用 footer gt a 我可以只选择那个吗 a 如果 footer 有 a Top of Page a 但不是所有的 a 有没有跨浏览器的方式来选择这样的 如果我理
  • 分发 Perl 应用程序

    我最近创建了一个小型 Perl 应用程序 它使用了一些需要通过 CPAN 安装的非核心模块 有没有一种方法可以分发应用程序 并能够检查是否安装了所需的模块 如果没有安装 则从 CPAN 中提取它们 我想我正在寻找类似于 CPAN 自动依赖项
  • django 分页查询的下一个和之前链接

    我正在尝试为 Django 制作一个搜索表单 它是一种典型的搜索形式 然后返回匹配项表 我希望对返回的表进行分页 问题出在 上一个 和 下一个 按钮上 返回查询的链接位于 records search query a 搜索样本是a 该页面输
  • Twig - 如何随机化数组中的项目并循环它们?

    如何随机化数组中的项目并循环它们 for item in article resources shuffle slice 1 endfor 我收到此错误 第 30 行 partials content twig 中未知的 shuffle 过
  • 通过触摸在贝塞尔曲线路径上旋转精灵 - Cocos2D/Box2D

    我有一个可以通过触摸旋转的箭头 我想知道是否可以沿曲线旋转箭头 我做了一些研究 我认为它被称为贝塞尔路径 是否可以使用此代码在贝塞尔曲线路径上旋转精灵 如果可以 我将如何合并它 UITouch touch touches anyObject
  • 将 Fragment 替换为后退按钮上的另一个片段

    我试图覆盖后退按钮 因为当我按下时它会关闭我的应用程序 我有不同的片段 片段 A 索引 当我按后退按钮时 它将关闭应用程序 片段B 当我按后退按钮时 它将返回到片段A 片段C 当我按后退按钮时 它将返回到片段A 我有我的主要活动 它管理我的
  • 如何从 shell 中截取网页的某个部分的快照?

    我有一个网页的一部分 我需要在给定的时间间隔拍摄 gif 快照 快照需要是全页面大小分辨率 但是正如我所说 它只会到达页面上的某个位置 在本例中它位于表格之后 获取这样的页面快照图像的最佳方式是什么 我想把它扔到一个 cron 作业中然后忘