当社では、Web サイトマップ全体のスクリーンショットを撮る必要があり、この作業を手作業で行うのは大変な作業です。Webdriver API (Selenium 2) を使用してブラウザでスクリーンショットを撮りましたが、モバイル Web もあります。Google chrome には、サイトをモバイル Web サイトとして表示するためのデバイス ディメンション設定があります。Google chrome では、ブラウザーのスクリーンショットのサイズを変更することはできません。Iphone、Android Phone、または両方の仮想デバイスのスクリーンショットを撮ることができるかどうかはわかりません. 調べても良い答えが見つかりませんでした。モバイル Web ページの自動スクリーンショットを取得し、URL に基づいて特定のディレクトリに保存するものを実装しようとしています。私はこれを行うために任意の Java ライブラリを使用することを好みますが、任意の提案を受け付けています。ここで最善の答えが得られることを願っています。
4 に答える
要約すると、さまざまなビューポートを使用して一部の Web サイトの自動スクリーンショットをキャプチャするための API が必要です。また、おそらくさまざまなユーザー エージェントヘッダーも使用します。これは、モバイル デバイスで本物のように見せたいためです。
個人的には、次の 2 つの API で良い経験をしました。
スクリーンショットレイヤー API - https://screenshotlayer.com
url2png - http://url2png.com
viewport
iPhoneを使用してスクリーンショットをキャプチャする方法について簡単なヒントを提供しますuser-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 (この場合はtumblr.com ) の iPhone 6 スクリーンショットを返します。
url2png の場合も同様です。これが役立つことを願っています!
編集
言い忘れたこと - スナップショットをエクスポートするための「ftp」パスを指定できます
ApiFlash Screenshot APIを試すことができます。API は Chrome に基づいているため、レンダリングはピクセル パーフェクトに近く、Web 標準に関して常に最新の状態になります。
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();
}
}