Puppeteer入門

 Google謹製ブラウザ操作自動化ツールPuppeteer。この手の処理はずっとUWSCで書いてたけど、いろいろあってAutoITに乗り移ろうかと考えていたところ。でもPuppeteerは、スクリプトJavaScriptで書けるのが魅力だよね、と思って↓を購入。

Puppeteer入門 スクレイピング+Web操作自動処理プログラミング

Puppeteer入門 スクレイピング+Web操作自動処理プログラミング

 

Puppeteerについて、それなりに理解できたけど...。なんというか、文章が...。こんなに読みにくい本は、買った記憶がない。たとえばP.117「コールバック関数」

コールバック関数とは、呼び出し先であらかじめ、呼び出し元が指定する処理です。

えっ?JavaScriptでコールバック関数っていえば「関数の引数として渡される関数」のことだよね。だから「呼び出し元が指定する処理です」はわかるけど、「呼び出し先であらかじめ」をどう解釈すればいいかわからない。もしかして「呼び出し先のことで、あらかじめ呼び出し元が指定する処理です。」なのか?それにしてもわからん。さらにこの2つ先の文で悶絶する。

呼び出し先は主たる処理を行った後に、呼び出し先であらかじめ指定した処理を呼びぶでことにより、呼び出し先に処理が戻ります。 

  「呼びぶでことにより」は私のtypoではない。本文のままだ。この文には「呼び出し先」が3回出てくる。多分2つ目は「呼びだし元」な気がするけど、そう解釈しても最後の「呼び出し先に処理が戻ります」が理解できない。全般を通してこんな感じ。

 また章とか、節の構成が???たとえば「1-6 岡崎市立中央図書館事件に学ぶ スクレイピングの注意点」。筆者は読者がみなこの事件を知っていると思っているのだろうか。わたしならそう思わず、事件の概要を述べた上で、自分の書きたいことを書くだろう。そもそもこの節には、スクレイピングプログラムを作る上で何に注意すべきか、具体的に書かれていない。おそらく「アクセスするサーバーに過度な負担をかけないよう、適当なdelayを入れるようにしましょう」と言いたいのだろうが、それならそう書けばいいのに。その前のページに「アクセス頻度は極力減らす」という項があるけど、直接のつながりは見いだせない。果たしてこの「1-6」は必要だったのだろうか?

 さらに驚いたのが「4-1 要素を特定する基本的な方法 idで探す」。その直前は「3-8 同期処理と非同期処理③ async/await」。何の脈絡もなく、唐突に「idで探す」って言われてもね...。「こういう処理をするには、ターゲットにするHTML(DOM)上の要素を特定する必要があり、そのためにidで特定する方法があるんだよ」てな書き方のほうがわかりやすいと思うけどね...。トップダウンで書くのか、ボトムアップで書くのか決めてから書いたほうが良かったのでは?

 あと読みにくくしているのが、本書の端々に垣間見える「私はこんなことを知っているんだぞ」的な説明や例示。その典型が「Column」。つまらない。なんか筆者の思いだけが先行して、読者が置いてきぼりにされてる感じ。装丁とか組版はいい感じなんだけど、文章については、もうちょっと編集さんが頑張らなきゃいけなかったのではなかろうかと思ってしまう一冊でした。