<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <cite xml:lang="en">WebDriver</cite>, <time>2020-03-26 00:47:43 +09:00</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://w3c.github.io/webdriver/#screen-capture">https://w3c.github.io/webdriver/#screen-capture</anchor-external></li></ul></refs></section><section><h1>処理</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリーンショット</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">画像</anchor>データは、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PNG</anchor> (<code>image/png</code>)
で返されます。</p></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">物理形を得る</anchor>と似ていますが、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">物理形を得る</anchor>のは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">画面表示</anchor>と別の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">レンダリング<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">レンダリング (Web)</title></anchor>であるのに対して、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリーンショット</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">画面表示</anchor>の一部と同等の出力を得るものであります。</p></section><section><h1>実装</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Take Element Screenshot</anchor>
を
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GeckoDriver</anchor> は実装済みですが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ChromeDriver</anchor> は未実装です。
<time>2017-05-18T05:47:07.600Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ChromeDriver</anchor> も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GeckoDriver</anchor> も、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Take Screenshot</anchor> は実装しています。
<time>2020-03-26T02:11:43.500Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <cite xml:lang="en">1598731 - Taking huge screenshots crashes Firefox: <strong>[</strong>Exception... \&quot;Data conversion failed because significant data would be lost\&quot;<strong>]</strong></cite>
(<time>2020-03-03 15:35:20 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://bugzilla.mozilla.org/show_bug.cgi?id=1598731">https://bugzilla.mozilla.org/show_bug.cgi?id=1598731</anchor-external></p><p>(<code>500</code>)</p><pre class="code js">{&quot;value&quot;:{&quot;error&quot;:&quot;unknown error&quot;,&quot;message&quot;:&quot;[Exception... \x5C&quot;Data conversion failed because significant data would be lost\x5C&quot;  nsresult: \x5C&quot;0x80460003 (NS_ERROR_LOSS_OF_SIGNIFICANT_DATA)\x5C&quot;  location: \x5C&quot;JS frame :: resource://gre/modules/AsyncShutdown.jsm :: observe :: line 551\x5C&quot;  data: no]&quot;,&quot;stacktrace&quot;:&quot;observe@resource://gre/modules/AsyncShutdown.jsm:551:16\x5Cnobserve@resource:///modules/ContentCrashHandlers.jsm:177:28\x5Cn&quot;}}</pre><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal> が生じるとその<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>が以後エラーしか返さなくなります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal> の次はこんなエラーが返されるので、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">閲覧文脈</anchor>が利用不能になるっぽいです。</p><p>(<code>404</code>)</p><pre class="code">{&quot;value&quot;:{&quot;error&quot;:&quot;no such window&quot;,&quot;message&quot;:&quot;Browsing context has been discarded&quot;,<snip xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"></snip></pre><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;12</anchor-internal> の次はこんなエラーが返されます。 <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;12</anchor-internal> で残存<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>が破棄されるのですかね。</p><p>(<code>404</code>)</p><pre class="code">{&quot;value&quot;:{&quot;error&quot;:&quot;invalid session id&quot;,&quot;message&quot;:&quot;Tried to run command without establishing a connection&quot;,&quot;stacktrace&quot;:&quot;&quot;}}</pre><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 
修正済みになっているがいっこうになおらんのう
<time>2020-10-15T08:39:33.400Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 
全然なおらんのう、他にも不具合があるのかね?
昔はちゃんと撮れてたんだが
<time>2022-04-28T02:22:59.300Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ChromeDriver</anchor>
は
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Take Element Screenshot</anchor>
を実装したようです。
<time>2020-10-13T09:43:32.00Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ChromeDriver</anchor>
の
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Take Element Screenshot</anchor>
は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>のサイズで<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリーンショット</anchor>が撮られますが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>の位置でくり抜いているのか、
表示されていない領域は空白になり、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">viewport</anchor>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクロールバー</anchor>が写っていることもあります。
<time>2020-10-20T01:40:47.700Z</time></p></section><section><h1>文書のスクリーンショットを得る</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebDriver</anchor> なら命令を実行するだけですが、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">閲覧文脈</anchor>内の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>からは直接取得できません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <cite xml:lang="en">ss.js</cite>, <time>2024-02-21T05:22:25.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://gist.github.com/wakaba/f91282ad9f6a4538b46e1b8a1493addb">https://gist.github.com/wakaba/f91282ad9f6a4538b46e1b8a1493addb</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;15</anchor-internal> これは 
<code>getDisplayMedia</code>
で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリーンショット</anchor>を撮りつつ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクロール位置</anchor>を変化させてつなぎ合わせて全体を構成する実装例。</p></section><section><h1>メモ</h1></section></body></html>