Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
私の生活を変えたHeadless Chrome / Headless Chrome who c...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
taminif
November 24, 2018
Programming
540
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
私の生活を変えたHeadless Chrome / Headless Chrome who changed my life
Nodefest 2018 LT
taminif
November 24, 2018
More Decks by taminif
See All by taminif
React Native New Architecture 移行実践報告
taminif
1
250
「とりあえずAI」が招く悲劇〜私がAIで生産性を下げるまでの話〜 / The tragedy caused by "AI for now" - The story of how I used AI to reduce my productivity
taminif
1
310
PuppeteerとPlaywrightの15日間の演劇 / relation of Puppeteer and Playwright
taminif
3
2.3k
Redashの開発はじめました / How to get started Redash development
taminif
0
810
WebSocketをiOSに持ち込んで辛い思いをした経験がありますか!? / have you painful experience in web socket?
taminif
3
6.2k
LINEで馬券を購入する / Purchase a betting ticket at LINE
taminif
1
1.7k
SkyWayで一年間運用してきたけどWebRTCってつらいんじゃないの
taminif
2
1k
オンライン英会話とSkyWay
taminif
0
550
オンライン英会話アプリとSkyWay
taminif
0
500
Other Decks in Programming
See All in Programming
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
220
Agentic UI
manfredsteyer
PRO
0
200
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
1
540
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.4k
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
230
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
220
これからAgentCoreを触る方へトレンドはGatewayです
har1101
4
380
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.3k
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
220
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.8k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.5k
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
240
Featured
See All Featured
The agentic SEO stack - context over prompts
schlessera
0
830
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.8k
Raft: Consensus for Rubyists
vanstee
141
7.6k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
320
Building AI with AI
inesmontani
PRO
1
1.1k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Un-Boring Meetings
codingconduct
0
330
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Mind Mapping
helmedeiros
PRO
1
270
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
620
Designing Experiences People Love
moore
143
24k
Transcript
ࢲͷੜ׆Λม͑ͨ Headless Chrome ౦ژNodeֶԂࡇ2018 LT 2018/11/24 େౡ ޫو@sbntaminif
ࣗݾհ • ΣϒϦΦגࣜձࣾ։ൃάϧʔϓϦʔμʔ • ؔNodeֶԂओ࠵ • ීஈژͰಇ͍͍ͯ·͢ • ࠓ͜ΕͷҰ͠·ͤΜ↘
ಋೖ 3ϖʔδͰΓ·͢
1. ఆظߪೖΛࣗಈԽ͍ͨ͠ զ͕ՈͰ ࣗಈԽΛਪਐ ༻ͷങ͍ εʔύʔ Ͳ͏ʹ͔ࣗಈԽ ͍ͨ͠ Ͱ͖Εyodobashi.comͰങ͍͍ͨʢϙΠϯτͷͨΊʣ ՝
2. Amazon Dash Button ϘλϯΛԡ͚ͩ͢ͰAmazon͔Β͕ಧ͘
ʊਓਓਓਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹ3. Yodobashi Dash Buttonɹʻ ʉY^Y^Y^Y^Y^Y^Y^Y^Y^Y^Yʉ
Ͳ͏͔ͬͨ
AWS IoT 1-Click Headless Chrome puppeteer
AWS IoT 1-Click ϘλϯΛԡ͢ͱAWSͰ࣮ߦ
AWS IoT 1-Click • Amazon Dash ButtonϋʔυΣΞΛϕʔεͱͨ͠ ϓϩάϥϛϯάՄೳͳϘλϯ • ͍ํAmazon
Dash Buttonͱಉ͡Ͱ ϘλϯΛԡͨ࣌͠ͷૢ࡞͕બΔ • ྨࣅσόΠεॱ࣍ൃച͍ͯ͠Δ • SORACOM LTE-M Button powered by AWSͳͲ
Headless Chrome https://developers.google.com/web/updates/2017/04/headless-chrome?hl=ja
Headless Chrome https://developers.google.com/web/updates/2017/04/headless-chrome?hl=en
Headless Chromeͱ • ChromeΛϔουϨεͰಈ࡞͢Δ • ϔουϨε = UIͳ͠Ͱ࣮ߦ • Chrome59͕Πϯετʔϧ͞Ε͍ͯΕ༻Մ
ೳʢWindows61ʣ • Chromeͷػೳ͕શͯ͑Δ
ͦͯ͠ Headless ChromeΛ ૢ࡞͢ΔͨΊʹ։ൃ͞Εͨ ϥΠϒϥϦ
puppeteer https://github.com/GoogleChrome/puppeteer
puppeteerͱ • Node.jsͰHeadless ChromeΛ ૢ࡞͢ΔϥΠϒϥϦ • Chrome DevToolsͷ্͔Βૢ࡞͢ΔAPI • GoogleChromeνʔϜ͕࣮
• ʮύϖςΟΞʯͱൃԻ
ಈ࡞ϨΠϠʔ
ChromeΛࣗಈͰಈ͔ͯ͠ ߪೖ·Ͱ ͨͲΓͭ͘
࣮͢Δ const puppeteer = require('puppeteer'); (async () => { const
browser = await puppeteer.launch({headless: true}); const page = await browser.newPage(); await page.setViewport({width: 640, height: 460}); await page.goto('https://order.yodobashi.com/yc/login/ index.html'); //////////////////////////////////////////// })(); $ISPNFΛىಈ ৽͍͠λϒΛ։͘ ΟϯυαΠζΛܾఆ 63-Λࢦఆͯ͠ભҠ
࣮͢Δ
࣮͢Δ //////////////////////////////////////////// await page.type('#memberId', '********'); await page.type('#password', '********'); page.click('#js_i_login0'); await
page.waitForSelector('#wrapper'); await page.goto('https://www.yodobashi.com/product/ 100000001002383900/'); //////////////////////////////////////////// ϩάΠϯใΛೖྗ ϩάΠϯϘλϯΛΫϦοΫ ભҠΛͭ 63-Λࢦఆͯ͠ભҠ
࣮͢Δ
͜Μͳײ͡Ͱ Ұͭͣͭૢ࡞ͯ͠ త·Ͱୡ͢Δ
࡞ͬͨͷ͕ͪ͜Β https://github.com/taminif/buyInYodobashi
εΫϦϓτΛ࣮ߦ͢Ε ͕ߪೖͰ͖ΔΑ͏ʹͳͬͨ
͜ΕΛAWS LambdaͰ ಈ͔͢
௨ৗͷpuppeteerΛ͏ͱ Chromium͕ೖΔ ͢ΔͱɺLambdaͷ༰ྔͰ͋Δ 50MBΛ͑Δ
serverless-chrome https://github.com/adieuadieu/serverless-chrome
ChromeΛLambdaͷ֎Ͱ ࣮ߦ͢Δ͜ͱͰ ༰ྔΦʔόʔΛճආ͢Δ
LambdaͰಈ͔ͨ͠ -BNCEBͰ ಈ࡞͢Δ"1* -BNCEBݺͼग़͠
Lambdaʹొ͢Δ͜ͱͰ ϘλϯΛԡͤߪೖͰ͖Δ!
⚠ൃੜ⚠
AWS Lambda͔Β yodobashi.comͷ ΞΫηε͕Ͱ͖ͳ͍ ϖʔδͷΈ 'PSCJEEFO
AWS͚ͩͳͷʁ ଞͷՈిྔൢళαΠτʁ ͜ΕΒͷ ࠙ձͰ͠·͠ΐ͏!
Ͳ͏ճආ͢Δ͔ Heroku͔ΒͳΒ ΞΫηεͰ͖Δ
ߏΛม͑Ε͍͚Δ -BNCEBݺͼग़͠ )5514௨৴Ͱ )FSPLVΛίʔϧ εΫϦϓτ࣮ߦ
Yodobashi Dash Button͕ ͨ͠!!
puppeteerͷັྗ
·ͣ͡Ίʹ Headless ChromeΛ্͢Ͱ ͔ܽͤͳ͍ಈը
The power of Headless Chrome https://www.youtube.com/watch?v=lhZOFUY1weo 2018ͷGoogle IOͷߨԋ
Headless Chrome େ͖ͳՄೳੑΛൿΊ͍ͯΔ
ࢲͷߟ͑Δ ࠷ັྗతͳٕज़
ͲΜͳWebαʔϏεͰ APIԽͰ͖Δ
Πϯλʔωοτશظ ϒϥβΛΘͳ͍ਓ ΄΅͍ͳ͍Ͱ͢ΑͶ
ීஈͷωοταʔϑΟϯΛ ࣗಈԽͰ͖Δ
ࣗಈԽͯ͠APIʹ͢Ε ͍ͭͰݺͼग़ͤΔ
APIԽ͓͚ͯ͠ ΠϯλʔϑΣʔε ͲΕͰ͑Δ ࠓͷεϚʔτεϐʔΧʔ ͰOK
⚠8BSOJOH
Ԭ࡚ࢢཱதԝਤॻؗࣄ݅ https://ja.wikipedia.org/wiki/Ԭ࡚ࢢཱதԝਤॻؗࣄ݅
Γ͗͢Δͱॻྨૹݕ·Ͱ ͋Γ·͢ ৗࣝతͳΞΫηεʹ ԡ͑͞·͠ΐ͏
͜ͷηογϣϯʹײԽ͞Εͯ ൃੜͨ͠ଛʹ͍ͭͯɺ ෛ͍݉Ͷ·͢
༻๏༻ྔΛकͬͯ ศརʹ͍·͠ΐ͏
͜ͷಈըͷதͰ ڧ͘͞Ε͍ͯΔ͜ͱ https://www.youtube.com/watch?v=lhZOFUY1weo
ʮ͜ͷςετࣗಈԽͷ Ͱ͋Γ·ͤΜʯ ʮࣗಈԽ͢Δ͜ͱ͕Ͱ͖Δʯ ʮࣗಈԽ͢ΔπʔϧͰ͋Δʯ
ීஈͷ࡞ۀΛࣗಈԽ͢Δ ͜Εͦ͜ΤϯδχΞϦϯά
ͬͯΈͨ͘ͳΓ·ͤΜ͔ʁ
ࣗಈԽ Έͳ͞ΜHeadless ChromeͰ ੜ׆Λม͍͖͑ͯ·͠ΐ͏ʂ
͋Γ͕ͱ͏͍͟͝·ͨ͠