質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

3077閲覧

puppeteerによるwebスクレイピングをブラウザでも行いたい。

mutoooooo

総合スコア12

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/10/17 07:11

編集2018/10/17 07:15

前提・実現したいこと

puppeteerを用いたwebスクレイピングを、htmlファイルから呼び出したjsファイルで行いたいのですが、js
ファイルを呼び出した際のrequireのところでエラーが出てしまいます。node.jsにおけるモジュールをブラウザで使えないことが原因のように思うのですが、対策がわかりません。
具体的には仮想通貨の価格をスクレイピングで取得して、ブラウザ上にチャートで表示しようとしています。

発生している問題・エラーメッセージ

Uncaught ReferenceError: require is not defined at chart.js:13

該当のソースコード

html

1//index.html 2<head> 3 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.js"></script> 4 <script type="text/javascript" 5 src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.js"></script> 6 <script type="text/javascript" src="https://github.com/nagix/chartjs-plugin-streaming/releases/download/v1.2.0/chartjs-plugin-streaming.js"></script> 7 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pusher/4.1.0/pusher.js"></script> 8 <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.4/Chart.min.js"></script> --> 9</head> 10 11<body> 12 <canvas id="bitbank"></canvas> 13 14 <script type="text/javascript" 15 src="./chart.js"></script> 16</body> 17

javascript

1//chart.js 2var buf = {}; 3buf['bitbank'] =[] 4 5function sleep(time) { 6 const d1 = new Date(); 7 while (true) { 8 const d2 = new Date(); 9 if (d2 - d1 > time) { 10 return; 11 } 12 } 13} 14const puppeteer = require('puppeteer'); 15puppeteer.launch().then(async browser => { 16 console.log('hoge') 17 const page = await browser.newPage(); 18 19 await page.goto('https://inagoflyer.appspot.com/xrpmac'); 20 21 while(true){ 22 23 const recentPost = await page.$eval('#Bitbank_XRPJPY_lastprice', e => e.innerText); 24 await console.log(recentPost); 25 buf['bitbank'].push({ 26 x: Date(), 27 y: recentPost 28 }); 29 console.log(buf['bitbank']) 30 sleep(1000); 31 } 32 33 browser.close(); 34}); 35 36 37 38var id = 'bitbank'; 39var ctx = document.getElementById(id).getContext('2d'); 40var chart = new Chart(ctx, { 41 type: 'line', 42 data: { 43 datasets: [{ 44 data: [], 45 label: 'bitbank', // 買い取引データ 46 borderColor: 'rgb(255, 99, 132)', // 線の色 47 backgroundColor: 'rgba(255, 99, 132, 0.5)', // 塗りの色 48 fill: false, // 塗りつぶさない 49 lineTension: 0 // 直線 50 }, { 51 data: [], 52 label: 'Sell', // 売り取引データ 53 borderColor: 'rgb(54, 162, 235)', // 線の色 54 backgroundColor: 'rgba(54, 162, 235, 0.5)', // 塗りの色 55 fill: false, // 塗りつぶさない 56 lineTension: 0 // 直線 57 }] 58 }, 59 options: { 60 title: { 61 text: 'xrp/jpy (bitbank )', // チャートタイトル 62 display: true 63 }, 64 scales: { 65 xAxes: [{ 66 type: 'realtime' // X軸に沿ってスクロール 67 }] 68 }, 69 plugins: { 70 streaming: { 71 duration: 300000, // 300000ミリ秒(5分)のデータを表示 72 refresh: 100, // onRefresh callback will be called every 1000 ms 73 delay: 1000, // delay of 1000 ms, so upcoming values are known before plotting a line 74 pause: false, // chart is not paused 75 onRefresh: function(chart) { // データ更新用コールバック 76 77 Array.prototype.push.apply( 78 chart.data.datasets[0].data, buf[id] 79 ); // 買い取引データをチャートに追加 80 81 buf[id] = []; // バッファをクリア 82 } 83 } 84 } 85 } 86}); 87

試したこと

browserifyなどによってブラウザでもrequireが使えるということだったのですが、どのように用いれば良いのかよくわかりませんでした。
bwowserifyをinstallし、

browserify chart.js

とコマンド入力すると、下記のようなエラーが出ました。(そもそもこのコマンドの使い方が間違っているのかもしれませんが、、)
Error: module not found: "ws" from file /Users/hiroaki/bitcoin/javascript/kairi_chart/node_modules/puppeteer/lib/WebSocketTransport.js
at onresolve (/usr/local/lib/node_modules/browserify/node_modules/module-deps/index.js:182:30)
at /usr/local/lib/node_modules/browserify/index.js:530:20
at /usr/local/lib/node_modules/browserify/node_modules/browser-resolve/index.js:247:21
at /usr/local/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:55:18
at load (/usr/local/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:69:43)
at onex (/usr/local/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:92:31)
at /usr/local/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:22:47
at FSReqWrap.oncomplete (fs.js:154:21)
hiros-mbp:kairi_chart hiroaki$ browserify chart.js
Error: module not found: "ws" from file /Users/hiroaki/bitcoin/javascript/kairi_chart/node_modules/puppeteer/lib/WebSocketTransport.js
at onresolve (/usr/local/lib/node_modules/browserify/node_modules/module-deps/index.js:182:30)
at /usr/local/lib/node_modules/browserify/index.js:530:20
at /usr/local/lib/node_modules/browserify/node_modules/browser-resolve/index.js:247:21
at /usr/local/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:55:18
at load (/usr/local/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:69:43)
at onex (/usr/local/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:92:31)
at /usr/local/lib/node_modules/browserify/node_modules/browser-resolve/node_modules/resolve/lib/async.js:22:47
at FSReqWrap.oncomplete (fs.js:154:21)

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

残念ながら、PuppeteerはNode.js専用です(リポジトリ)。

Puppeteer is a Node library (後略)

投稿2018/10/17 07:14

編集2018/10/17 07:15
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mutoooooo

2018/10/17 07:17

回答ありがとうございます。 そうなのですか、、 ではスクレイピングした情報を使いchart.jsを用いてチャート表示することはできないのでしょうか?
maisumakun

2018/10/17 07:20

はい、ブラウザ内から別ドメインにアクセスすること自体に制約がかかるので、ブラウザ外からやるより難易度は数段上がりますし、構造によってはできないことも考えられます。
mutoooooo

2018/10/17 07:45

そうなのですね、ではスクレイピングではなくWebApiを用いるなど他の方法を模索してみようと思います。 回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問