スクリーンショット (Web)

スクリーンショット (Web)

仕様書

処理

[8] スクリーンショット画像データは、 PNG (image/png) で返されます。

関連

[6] 物理形を得ると似ていますが、物理形を得るのは画面表示と別のレンダリングであるのに対して、 スクリーンショット画面表示の一部と同等の出力を得るものであります。

実装

[1] Take Element ScreenshotGeckoDriver は実装済みですが、 ChromeDriver は未実装です。

[4] ChromeDriverGeckoDriver も、 Take Screenshot は実装しています。

[2] 1598731 - Taking huge screenshots crashes Firefox: [Exception... \"Data conversion failed because significant data would be lost\"] () https://bugzilla.mozilla.org/show_bug.cgi?id=1598731

(500)

{"value":{"error":"unknown error","message":"[Exception... \x5C"Data conversion failed because significant data would be lost\x5C"  nsresult: \x5C"0x80460003 (NS_ERROR_LOSS_OF_SIGNIFICANT_DATA)\x5C"  location: \x5C"JS frame :: resource://gre/modules/AsyncShutdown.jsm :: observe :: line 551\x5C"  data: no]","stacktrace":"observe@resource://gre/modules/AsyncShutdown.jsm:551:16\x5Cnobserve@resource:///modules/ContentCrashHandlers.jsm:177:28\x5Cn"}}

[3] >>2 が生じるとそのセッションが以後エラーしか返さなくなります。

[12] >>2 の次はこんなエラーが返されるので、閲覧文脈が利用不能になるっぽいです。

(404)

{"value":{"error":"no such window","message":"Browsing context has been discarded",

[13] >>12 の次はこんなエラーが返されます。 >>12 で残存セッションが破棄されるのですかね。

(404)

{"value":{"error":"invalid session id","message":"Tried to run command without establishing a connection","stacktrace":""}}

[9] 修正済みになっているがいっこうになおらんのう

[11] 全然なおらんのう、他にも不具合があるのかね? 昔はちゃんと撮れてたんだが

[7] ChromeDriverTake Element Screenshot を実装したようです。

[10] ChromeDriverTake Element Screenshot は、 要素のサイズでスクリーンショットが撮られますが、 要素の位置でくり抜いているのか、 表示されていない領域は空白になり、 viewportスクロールバーが写っていることもあります。

文書のスクリーンショットを得る

[14] WebDriver なら命令を実行するだけですが、閲覧文脈内の文書スクリプトからは直接取得できません。

[15] ss.js, https://gist.github.com/wakaba/f91282ad9f6a4538b46e1b8a1493addb

[16] >>15 これは getDisplayMediaスクリーンショットを撮りつつスクロール位置を変化させてつなぎ合わせて全体を構成する実装例。

メモ