長い間、私は、従来のWebブラウザとして知られていることを過ぎて行くと、Webの未来がどうなっているかを考えてきました。私はこれを「ヘッドレスWeb」と呼んでいましたが、「すべてが「The Web」によって動かされたのですが、ブラウザを見たことはありませんでしたか?具体的には、フルブラウザにアクセスしても「クロム」にはアクセスできない場合は、新しいサービスを提供する大きなチャンスがあると私は信じています。
Using the browser as a service is an incredible opportunity. It allows us to take the declarative HTML and combine it with the developer defined procedural execution of JavaScript and run deep analysis on the content.
…
Running a browser on the server will allow us to more easily build services which parse data that is generated dynamically, it will allow us to more easily us run our own logic against the logic in a page (form fill as an example) and I believe that it will open up the ability to more effectively run actions against data embedded on the page.
それはしばらく時間がかかりましたが、私たちはそこに着いていると思います。
私はPuppeteerに魅了されています。 Puppeteerは、Chrome Dev Toolsプロトコルの上に位置するJavaScriptライブラリであり、Chromeブラウザを自動化してスクリプト化することができます。
私の日々の仕事には、Webサーバーのデバッグと保証がたくさんあります。多くの開発者と同様に、私はcurlを使ってWebサーバーに要求し、応答を確認します。これは素晴らしいユーティリティですが、今日の世界では多くの開発者がJavaScriptを使用して構築されたサイトを構築しているため、完全な応答を検査することは不可能です。
私はリソースを取得し、domcurl
というページでJavaScriptを実行するためのcUrl風のユーティリティを作成することに決めました。
domcurl
はPuppeteerを使う小さなNodeJSアプリケーションで、npm i domcurl
コマンドを発行することでインストールできます。 curl
コマンドのように、簡単なdomcurl [url]
を発行してリソースを取得し、JSをページ上で実行することができます。
curl
の全てを複製するわけではありませんが、以下のような特徴があります。
*取得するURLを指定します。すなわち、 domcurl [url]
*レスポンスヘッダを -v
で調べます。すなわち、 domcurl -v [url]
* -b
でクッキーを設定する、すなわちdomcurl [url] -b "test = hello;ドメイン= airhorner.com; HttpOnly;" -b "hello = world; Domain = airhorner.com; HttpOnly;"
* -H引数を使用してカスタムヘッダーを追加します。 *手動で -o
でSTDOUTを設定し、--stderr
でSTDERRを手動で設定します
CSSとJSがダウンロードされて実行されるのを待たなければならないので、 curl
のように結果をストリームすることはできませんが、かなり役に立ちます。
JavaScriptとChromeに特有の機能をいくつか追加しました。
- Chrome Dev Toolsのトレースファイルを出力します(スクリーンのホットを含む)。
domcurl --url https://example.com --trace test.json
*任意のファイルに統合する必要がある場合は、JavaScriptモジュールとしてインクルードします既存のアプリケーションの
const {domcurl} = require('domcurl');
domcurl(`https://paul.kinlan.me/`, {});
このツールはフルサービスよりもデモですが、私はヘッドレスウェブは成熟しており、人形師などのツールはウェブの継続的なパワーを実現するのに役立つと思います。我々はそれを構築する必要があります。