Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Google Chrome Headless 雑感 & 比較

Google Chrome Headless 雑感 & 比較

MDH 社内勉強会 LT Thursday 資料

Akimichi Kida

May 11, 2017
Tweet

Transcript

  1. ඞཁͳ΋ͷ w (PPHMF$ISPNF W  w /PEFKT W  w

    DISPNFSFNPUFJOUFSGBDF
 IUUQTHJUIVCDPNDZSVTBOEDISPNFSFNPUFJOUFSGBDF 
  2. ಈ͔ͯ͠ΈΔᶃ > alias canary='/Applications/Google\ Chrome\ Canary.app/Contents/ MacOS/Google\ Chrome\ Canary'
 >

    npm install chrome-remote-interface
 > canary --headless --remote-debugging-port=9222 $ISPNF઀ଓ४උ  BMMJBT͸ࣄલʹd TISD͋ͨΓʹهࡌ͓ͯ͘͠ײ͡
  3. ಈ͔ͯ͠ΈΔᶄ const CDP = require('chrome-remote-interface'); CDP((client) => { const {

    Page, Runtime } = client; Promise.all([ Page.enable() ]).then(() => { return Page.navigate({ url: 'https://www.yahoo.co.jp/' }); }); const command = 'document.querySelector(".topicsindex").innerText'; Page.loadEventFired().then(() => { Runtime.evaluate({expression: command}).then(result => { console.log(result.result.value); client.close(); }); }); }).on('error', (err) => { console.log('ブラウザに接続できません。詳細はこちら↓\n', err); }); DIKT 
  4. ࡶײ w 8JOEPXT؀ڥʹରԠ͍ͯ͠ͳ͍
 $ISPNFଆͷ໰୊ɻۙ೔ରԠ༧ఆ  w "1*ͷυΩϡϝϯτ͕Θ͔Γʹ͍͘
 ެࣜαϯϓϧ͕গͳ͍  w

    هड़ʹগʑบ͕͋Γɺ͋·Γચ࿅͞Ε͍ͯͳ͍
 ˠݱঢ়Ͱ1SPEVDUJPOͷςετʹ࢖͏ؾʹ͸ͳΕͳ͍ʜ 
  5. ಈ͔ͯ͠ΈΔᶃ var Nightmare = require('nightmare'); var nightmare = Nightmare({ show:

    false }); nightmare .goto('https://www.yahoo.co.jp/') .evaluate(() => { return document.querySelector('.topicsindex').innerText; }) .then(function (result) { console.log(result); }) .catch(function (error) { console.error('error:', error); }); ONKT 
  6. ࢀߟ৘ใ w ެࣜ
 IUUQTDISPNJVNHPPHMFTPVSDFDPNDISPNJVNTSD NBTUFSIFBEMFTT w ϔουϨε$ISPNF͜ͱ͸͡Ί
 IUUQTEFWFMPQFSTHPPHMFDPNXFCVQEBUFTIFBEMFTTDISPNF w $ISPNF%FW5PPMT1SPUPDPM7JFXFSMBUFTU

    UJQPGUSFF 
 IUUQTDISPNFEFWUPPMTHJUIVCJPEFWUPPMTQSPUPDPMUPU w 2JJUB$ISPNFͷϔουϨεϒϥ΢β͕΍ͬͯ͘Δɻͱ͍͏Θ͚Ͱࢼͯ͠Έͨɻ
 IUUQRJJUBDPNEFWOFLPJUFNTGFBFC