<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="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <cite xml:lang="en">WebDriver</cite>, <time>2020-03-19 20:29:03 +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/#executing-script">https://w3c.github.io/webdriver/#executing-script</anchor-external></li></ul></refs></section><section><h1>実装</h1><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> <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:">エンドポイント</anchor>の
<code>execute</code> や <code>execute_async</code> に対応しています。<time>2017-05-19T07:11:59.400Z</time></p><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 xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GeckoDriver</anchor> は
<code>execute</code> でも <code>execute/sync</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>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">解決</anchor>されてから結果を返します。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ChromeDriver</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">約束</anchor>オブジェクト自体を返します (が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON</anchor> で表せないので、
空の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>になります)。<time>2017-05-19T07:13:17.300Z</time></p><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:">GeckoDriver</anchor> は <code>execute</code> や <code>execute/sync</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>されたとき、
エラーでなく成功として返してきます。
そのため<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">約束</anchor>が成功裏に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">解決</anchor>された場合と区別できません。
<time>2017-05-19T07:11:27.000Z</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> の <code>execute_async</code> は、
タイムアウトの既定値が0秒になっています。
すぐに実行できる<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:">GeckoDriver</anchor> の <code>execute_async</code> は、
タイムアウトの既定値が数分に設定されているようです。<time>2017-05-19T07:37:21.0Z</time></p><p><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> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ChromeDriver</anchor> では、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">navigate</anchor> を発生させるメソッドを実行してから、
<code>Promise</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>に <code>execute_async</code>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コールバック</anchor>を呼び出すことにしていると、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">navigate</anchor> による unload が先に発生して、 <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:">GeckoDriver</anchor> はそのようなことはなさそうですが、必ずかはわかりません。<time>2017-05-31T08:26:09.900Z</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> 
<code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Error</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">===</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">window</anchor>.<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Error</anchor></code>
が
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>ですが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">偽</anchor>です。
<time>2020-03-25T08:02:22.00Z</time></p><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:">GeckoDriver</anchor>
では
<code>execute_async</code>
が
<code>405</code>
エラーになります。
<time>2025-05-04T05:35:06.000Z</time></p></section></body></html>