Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Google Chrome Headless 雑感 & 比較
Search
Akimichi Kida
May 11, 2017
Programming
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Google Chrome Headless 雑感 & 比較
MDH 社内勉強会 LT Thursday 資料
Akimichi Kida
May 11, 2017
Other Decks in Programming
See All in Programming
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
Domain-Driven Transformation
hschwentner
2
2.3k
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
150
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
200
APNsからLive Activityを開始する話
yumnumm
0
170
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.9k
AWSに止められる覚悟してますか?
morizo_1984
2
540
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
610
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
760
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.2k
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
Next.js: The final boss of Web Performance
guaca
0
260
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Become a Pro
speakerdeck
PRO
31
6.3k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Google's AI Overviews - The New Search
badams
0
1.6k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
320
Mobile First: as difficult as doing things right
swwweet
225
10k
Transcript
(PPHMF$ISPNF)FBEMFTT ࡶײൺֱ .%)"%ςΫϊϩδʔہా࿏
͢͜ͱ w $ISPNF)FBEMFTTϞʔυͬͯΈͨ w طଘ)FBEMFTTϒϥβͱͷൺֱ w ·ͱΊ
$ISPNJVN)FBEMFTTNPEF Y
'SPOUFOE"OHVMBS+4Y&4-FTT6*#PPUTUSBQ3&45GVM"1* ɹɹɹɹɹOQNCPXFS(VMQ 8FC4FSWFS4DBMB 4UBCMF#FUB%FW$BOBSZ ˡ҆ఆɹɹɹɹɹɹɹਓபˠ
'SPOUFOE"OHVMBS+4Y&4-FTT6*#PPUTUSBQ3&45GVM"1* ɹɹɹɹɹOQNCPXFS(VMQ 8FC4FSWFS4DBMB ·ͩ4UBCMF൛Ͱ͑·ͤΜɻʢ࣌ʣ #FUB%FW$BOBSZͷ͍ͣΕ͔Ͱࢼ͠·͠ΐ͏ɻ ❌
ඞཁͳͷ w (PPHMF$ISPNF W w /PEFKT W w
DISPNFSFNPUFJOUFSGBDF IUUQTHJUIVCDPNDZSVTBOEDISPNFSFNPUFJOUFSGBDF
ಈ͔ͯ͠ΈΔ ྫ͑͜͜Λऔಘ͍ͨ͠
ಈ͔ͯ͠ΈΔᶃ > 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͋ͨΓʹهࡌ͓ͯ͘͠ײ͡
ಈ͔ͯ͠ΈΔᶄ 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
ಈ͔ͯ͠ΈΔᶄ ݟͮΒ͍ͷͰը૾Ͱʜ
ಈ͔ͯ͠ΈΔᶅ OPEFKTͰεΫϦϓτΛ࣮ߦ
ࡶײ w 8JOEPXTڥʹରԠ͍ͯ͠ͳ͍ $ISPNFଆͷɻۙରԠ༧ఆ w "1*ͷυΩϡϝϯτ͕Θ͔Γʹ͍͘ ެࣜαϯϓϧ͕গͳ͍ w
هड़ʹগʑบ͕͋Γɺ͋·Γચ࿅͞Ε͍ͯͳ͍ ˠݱঢ়Ͱ1SPEVDUJPOͷςετʹ͏ؾʹͳΕͳ͍ʜ
طଘͷIFBEMFTTϒϥβʁ
8SBQQFSGPS1IBOUPN+4 w 1IBOUPN+4ͷϥούʔ w γϯϓϧͳ໋ྩهड़ w ࣮ߦڥ&MFDUSPOϕʔε OPEFKT $ISPNJVN
ಈ͔ͯ͠ΈΔᶃ 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
ಈ͔ͯ͠ΈΔᶃ ݟͮΒ͍ͷͰ SZ
ಈ͔ͯ͠ΈΔᶄ OPEFKTͰεΫϦϓτΛ࣮ߦ
൵͍͠ݱ࣮ $ISPNF)FBEMFTT /JHIUNBSF
·ͱΊ /JHIUNBSFKTͷํ͕Θ͔Γͯ͘͢؆୯ ղࢄʂ
·ͱΊ w $ISPNF)FBEMFTT࣮࣭ग़͔ͨΓͳͷͰ ֤छςετϑϨʔϜϫʔΫ͕ରԠ͍ͯ͠ͳ͍ɻ w &MFDUSPOͰͳ͘ɺ$ISPNFωΠςΟϒͰϢʔβʔʹۙ ͍ڥͰςετͰ͖Δ͜ͱʹՁ͕͋Δɻ 8JOEPXTڥ $ISPNFͳͲɻ·ͩରԠͯ͠ͳ͍͚Ͳɻ
w কདྷతʹ/JHIUNBSFͷΑ͏ʹίʔυ͕هड़͘͢͠ͳΔ ϥΠϒϥϦ͕ग़ͯ͘ΕेબࢶʹͳΔɻ
ࢀߟใ w ެࣜ IUUQTDISPNJVNHPPHMFTPVSDFDPNDISPNJVNTSD NBTUFSIFBEMFTT w ϔουϨε$ISPNF͜ͱ͡Ί IUUQTEFWFMPQFSTHPPHMFDPNXFCVQEBUFTIFBEMFTTDISPNF w $ISPNF%FW5PPMT1SPUPDPM7JFXFSMBUFTU
UJQPGUSFF IUUQTDISPNFEFWUPPMTHJUIVCJPEFWUPPMTQSPUPDPMUPU w 2JJUB$ISPNFͷϔουϨεϒϥβ͕ͬͯ͘Δɻͱ͍͏Θ͚Ͱࢼͯ͠Έͨɻ IUUQRJJUBDPNEFWOFLPJUFNTGFBFC
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠