crawling をしてみよう(3)

— puppeteer に一歩ずつ入ってみる(JavaScriptの定跡についても学びながら)

puppeteer を、とりあえず組み込む

  1. どんなライブラリでも、最初に require で(プログラム中に)読み込むことから始まる。

    require('puppeteer');
  2. require の結果は変数に代入しておく。

    const puppeteer = require('puppeteer'); 
  3. ブラウザを(プログラムから)起動する。

    puppeteer.launch

    と入力すると、[Function: launch] のように表示される。このオブジェクトの、launch 属性が指し示すもの(値)が、関数であることを示している。

    このように、オブジェクトは、その中に属性値(或いはフィールドと呼んだりメンバーと呼んだりする)として様々な値を抱え込んでいる。それらは、数値や文字列であったり、関数であったり、(さらに別の)オブジェクトだったりもする。

    returns: <Promise<Browser>>    

    とあるのも確認されたい。(Promise については後程扱う)。

(実行方法について)

  1. エディタを開く

  2. プログラム片を入力

  3. 適切なフォルダに、適当な名前をつけて、.js という拡張子で保存

  4. コマンドプロンプトを、上記のフォルダをカレントフォルダとした状態で起動

    (エクスプローラのアドレスバーに cmd と入れての起動を推奨する)

  5. node xxxx.js (保存したファイル名を xxxx.js とした場合)のように入力すればプログラムが動作する。

  6. ソースを変更して再度実行する時は、コマンドプロンプトの中で 矢印キーで前のコマンドを呼び出して再利用すればいい。

関数について知っておく(1 基本)

  1. 変数に代入して後から呼び出す

    var aa=function () {console.log("aa is called")} 
             // ...  途中に何が入ってもいい (と、推察できそうな場所では、以下 ... を省略する
    aa           // REPL だと [Function: aa] が表示されるだろう。
             // ...
    aa()         // 括弧をつけると関数が呼び出される(実行される)
  2. 別の関数の引数として渡す。

    function doit(fnc) {         // 無名関数を引数fncの値として受け取って、
       fnc()                     // それを実行する(括弧つきで呼んでいる)、
    }                            // 受け側の(無名でない)関数、の定義
    doit(function(){                 // doit を呼ぶときに、無名関数を渡している
      console.log("anonymous fnc is called") 
    })
  1. 即時関数として使う。(function(){...})() のような構文になる。

    (function(){
       console.log("a")
       console.log("b")
    })()

関数について知っておく(2 発展)

アロー記法
function doit(fnc) { fnc("a"); fnc("b"); }
// と定義しておいて、
doit((s)=>{console.log(s)})   // ちゃんと書くとこうだが、
doit(s=>{console.log(s)})  // 引数1つの無名関数は引数を囲む括弧が省略できる
doit(s=>console.log(s))    // 本体が単一の式のときはブレースも省略できる
// のいずれでも大丈夫

Promise 型と、Promise チェーンについて

非同期関数と async/await

(async()=>{
   const browser= await puppeteer.launch()
   let page=await browser.newPage()
   await page.goto("http://www.google.com")
   await page.waitforSelector("input[name='q']")
})();