FFFT

主にwebプロダクト開発に関連する話をつらつらと

puppeteerでフォームのinput要素の値をクリア・リセット

puppeteerはChromiumブラウザをAPIで制御するnode.jsのライブラリです。
デフォルトでheadlessモードで動作し、Cloud Functionsなどのサーバレス環境で動作させることもでき、簡単にクローラAPIの開発が可能です。

ブラウザ操作の自動化では、しばしばフォームの値を入力するシーンがあります。
puppeteerでは、下記のように値の入力を行うためのAPIが提供されています。

await page.type(selector, value);

しかし、すでに入力値が入っているフォームのクリアやリセットを行うためのAPIは提供されていません。
2018年に下記のようにissueが出されましたが、コントリビュータによって却下されています。

github.com

フォームの値クリアには、デフォルト値や動的な変更処理など様々なケースがアプリケーションの要件で存在するため、APIとしての提供は難しいとのこと。

github.com

開発者の提案する値クリアの方法は下記になります。

await page.$eval(selector, element => element.value = '');

evaluateを使って下記のように書くこともできます。

await page.evaluate(selector => document.querySelector(selector).value = '', selector);

$evalが短くてわかりやすいですね。