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:
API скриншотов - https://screenshotlayer.com/
url2png - http://url2png.com/
Я просто дам вам быстрый совет о том, как вы можете делать снимки экрана с помощью 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'для экспорта снимка в
Вы можете попробовать 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();
}
}