* 仕様書

[REFS[
- [5] [CITE@en[WebDriver]], [TIME[2020-03-26 00:47:43 +09:00]] <https://w3c.github.io/webdriver/#screen-capture>
]REFS]

* 処理

[8] 
[[スクリーンショット]]の[[画像]]データは、
[[PNG]] ([CODE[image/png]])
で返されます。


* 関連

[6] 
[[物理形を得る]]と似ていますが、[[物理形を得る]]のは[[画面表示]]と別の[[レンダリング][レンダリング (Web)]]であるのに対して、
[[スクリーンショット]]は[[画面表示]]の一部と同等の出力を得るものであります。

* 実装


[1] [[Take Element Screenshot]]
を
[[GeckoDriver]] は実装済みですが、
[[ChromeDriver]] は未実装です。
[TIME[2017-05-18T05:47:07.600Z]]

[4] [[ChromeDriver]] も [[GeckoDriver]] も、
[[Take Screenshot]] は実装しています。
[TIME[2020-03-26T02:11:43.500Z]]

[2] [CITE@en[1598731 - Taking huge screenshots crashes Firefox: '''['''Exception... \"Data conversion failed because significant data would be lost\"''']''']]
([TIME[2020-03-03 15:35:20 +09:00]])
<https://bugzilla.mozilla.org/show_bug.cgi?id=1598731>

([CODE[500]])

[PRE(code js)[
{"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"}}
]PRE]

[3] >>2 が生じるとその[[セッション]]が以後エラーしか返さなくなります。

[12] >>2 の次はこんなエラーが返されるので、[[閲覧文脈]]が利用不能になるっぽいです。

([CODE[404]])

[PRE(code)[
{"value":{"error":"no such window","message":"Browsing context has been discarded",[SNIP[]]
]PRE]

[13] >>12 の次はこんなエラーが返されます。 >>12 で残存[[セッション]]が破棄されるのですかね。

([CODE[404]])

[PRE(code)[
{"value":{"error":"invalid session id","message":"Tried to run command without establishing a connection","stacktrace":""}}
]PRE]


[9] 
修正済みになっているがいっこうになおらんのう
[TIME[2020-10-15T08:39:33.400Z]]

[11] 
全然なおらんのう、他にも不具合があるのかね?
昔はちゃんと撮れてたんだが
[TIME[2022-04-28T02:22:59.300Z]]

[7] [[ChromeDriver]]
は
[[Take Element Screenshot]]
を実装したようです。
[TIME[2020-10-13T09:43:32.00Z]]

[10] 
[[ChromeDriver]]
の
[[Take Element Screenshot]]
は、
[[要素]]のサイズで[[スクリーンショット]]が撮られますが、
[[要素]]の位置でくり抜いているのか、
表示されていない領域は空白になり、
[[viewport]]
の[[スクロールバー]]が写っていることもあります。
[TIME[2020-10-20T01:40:47.700Z]]

* 文書のスクリーンショットを得る

[14] 
[[WebDriver]] なら命令を実行するだけですが、[[閲覧文脈]]内の[[文書]]の[[スクリプト]]からは直接取得できません。


[15] [CITE@en[ss.js]], [TIME[2024-02-21T05:22:25.000Z]] <https://gist.github.com/wakaba/f91282ad9f6a4538b46e1b8a1493addb>

[16] >>15 これは 
[CODE[getDisplayMedia]]
で[[スクリーンショット]]を撮りつつ[[スクロール位置]]を変化させてつなぎ合わせて全体を構成する実装例。



* メモ

