API автоматического создания скриншотов

В нашей компании нам нужно сделать снимок экрана всей карты веб-сайта, поэтому выполнять эту работу вручную - большая боль. Я использовал Webdriver API (Selenium 2), чтобы делать скриншоты в браузере, но у нас также есть мобильный интернет. В Google Chrome есть настройка размера устройства для отображения сайта в качестве мобильного веб-сайта. Снять скриншот браузера в Google Chrome невозможно. Не уверен, что можно сделать снимок экрана Iphone, телефона Android или обоих виртуальных устройств. Не нашел хорошего ответа после исследования. Я пытаюсь реализовать что-то, что сделает автоматический скриншот любой мобильной веб-страницы и сохранит его в определенном каталоге на основе URL. Я предпочитаю использовать любую библиотеку JAVA для этого, но открыт для любых предложений. Надеемся на лучшее, чтобы получить ответ здесь.

4 ответа

С устройства, использующего Robotium

Вы можете использовать robotium, чтобы делать скриншоты с устройства. Из вопросов и ответов на веб-сайте проекта Robotium:

Могу ли я сделать скриншоты изнутри Robotium?

Да, ты можешь. Используйте takeScreenshot(), чтобы сохранить скриншот в "/sdcard/Robotium-Screenshots/". Обратите внимание, что для выполнения этой функции требуется разрешение на запись (android.permission.WRITE_EXTERNAL_STORAGE) в AndroidManifest.xml тестируемого приложения.

Из эмулятора с использованием сервера сборки

Альтернативой является использование сервера сборки, такого как jenkins/hudson. Доступны плагины для запуска эмулятора во время сборки и создания снимков экрана с этого эмулятора.

Более подробная информация об этом доступна на этом сайте со списком плагинов.

Напомним, что вам нужен API-интерфейс для создания автоматических снимков экрана некоторых веб-сайтов с использованием разных окон просмотра, а также, возможно, разных заголовков пользовательских агентов, поскольку вы хотите, чтобы он выглядел аутентично для мобильных устройств.

Лично я получил хороший опыт работы со следующими двумя API:

Я просто дам вам быстрый совет о том, как вы можете делать снимки экрана с помощью iPhone viewport а также user-agent (используя API-интерфейс screenshot-слоя, потому что он бесплатный):

Это URL запроса API, который вы бы использовали:

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 будет возвращать скриншот iPhone 6 с заданным URL-адресом (в нашем случае tumblr.com).

Для url2png это очень похоже. Надеюсь, что это может помочь!

РЕДАКТИРОВАТЬ

Что я забыл упомянуть - вы можете указать путь `ftp'для экспорта снимка в

Вы можете попробовать Browshot для общедоступного веб-сайта с виртуальными мобильными браузерами (iPhone, iPad и Android). У них есть API. Нет библиотеки Java (только Perl, PHP, Ruby и Python), но вы можете использовать библиотеку Java от Mashape.

Вы можете попробовать API скриншотов ApiFlash. API основан на Chrome, поэтому рендеринг практически идеален и всегда актуален в отношении веб-стандартов.

Вы можете контролировать размер скриншота, используя width а также height параметры. Вот полный пример 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();
    }
}
Другие вопросы по тегам