0

在我们公司,我们需要对整个网站地图进行截图,手动完成这项工作是一个很大的痛苦。我已经使用 Webdriver API (Selenium 2) 在浏览器上截屏,但我们也有移动网络。谷歌浏览器具有设备尺寸设置,可将网站显示为移动网站。在 Google chrome 中无法调整大小的浏览器屏幕截图。不确定是否可以截取 Iphone、android 手机或两个虚拟设备的屏幕截图。研究后没有找到好的答案。我正在尝试实现一些可以自动截取任何移动网页的屏幕截图并将其保存到基于 URL 的特定目录中。我更喜欢使用任何 JAVA 库来执行此操作,但愿意接受任何建议。希望在这里得到最好的答案。

4

4 回答 4

1

从使用 Robotium 的设备

您可以使用 robotsium 从设备截取屏幕截图。来自 Robotium 项目网站的问答

我可以从 Robotium 内部截取屏幕截图吗?

是的你可以。使用 takeScreenshot() 将屏幕截图保存在“/sdcard/Robotium-Screenshots/”中。请注意,此功能需要被测应用程序的 AndroidManifest.xml 中的写入权限 (android.permission.WRITE_EXTERNAL_STORAGE)。

从模拟器使用构建服务器

另一种方法是使用像 jenkins/hudson 这样的构建服务器。有一些插件可用于在构建期间启动模拟器并从该模拟器截取屏幕截图。

本网站上列出了插件详细信息的更多信息。

于 2013-05-24T13:52:11.703 回答
0

回顾一下,您需要一个 API 来捕获使用不同视口的某些网站的自动屏幕截图,并且可能还有不同的用户代理标头,因为您希望它在移动设备上看起来是真实的。

我个人对以下两个 API 有很好的体验:

我将快速提示您如何使用 iPhoneviewportuser-agent(使用screenshotlayer API,因为它是免费的)捕获屏幕截图:

这是您将使用的 API 请求 URL:

http://api.screenshotlayer.com/api/capture
  ? access_key = YOUR_ACCESS_KEY
  & url = http://www.tumblr.com
  & user_agent = Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A366 Safari/600.1.4&viewport=375x667   
  & viewport = 375x667

现在 API 将返回给定 URL 的 iPhone 6 屏幕截图(在我们的例子中tumblr.com)。

对于 url2png 它非常相似。希望这可以帮助!

编辑

我忘了提 - 你可以指定一个 `ftp' 路径来将快照导出到

于 2015-06-03T00:19:56.687 回答
-1

您可以为具有虚拟移动浏览器(iPhone、iPad 和 Android)的公共网站尝试Browshot。他们有一个 API。没有 Java 库(只有 Perl、PHP、Ruby 和 Python),但您可以使用Mashape中的 Java 库。

于 2013-05-24T15:33:08.107 回答
-1

你可以试试ApiFlash Screenshot API。该 API 基于 Chrome,因此渲染接近像素完美,并且始终保持最新的网络标准。

在此处输入图像描述

您可以使用widthheight参数控制屏幕截图的大小。这是一个完整的 Java 示例,您可以根据自己的特定问题进行调整。

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;

public class Main {

    public static void main(String[] args) throws Exception {

        String accessKey = "YOUR_ACCESS_KEY";
        String apiUrl = "https://api.apiflash.com/v1/urltoimage";
        URL url = new URL(String.format("%s?access_key=%s&url=google.com&width=800&height=600", apiUrl, accessKey));
        InputStream inputStream = url.openStream();
        OutputStream outputStream = new FileOutputStream("screenshot.jpeg");

        byte[] b = new byte[2048];
        int length;

        while ((length = inputStream.read(b)) != -1) {
            outputStream.write(b, 0, length);
        }

        inputStream.close();
        outputStream.close();
    }
}
于 2017-10-12T16:14:11.457 回答