puppeteer
というのを使ってプログラムを組んでいたのですが、以下のエラーが出ます。
typescript
1// 改善前 2const imageURL = "http://tekitou.com/example.png" 3(async () => { 4 const browser = await puppeteer.launch({/* オプションは割愛*/}); 5 const page = await browser.newPage(); 6 const response = await page.goto(imageURL, { waitUntil: ['networkidle0'], timeout: 300000 }); 7 const responseBuffer = await response.buffer(); // ← ここでエラーが出る。 8:
Error: Protocol error (Network.getResponseBody): Request content was evicted from inspector cache
キャッシュが標準設定では足りないという風に解釈しました。
ググってissueに挙ってたのを参考に修正したのが以下です。
typescript
1// 改善後 2const imageURL = "http://tekitou.com/example.png" 3(async () => { 4 const browser = await puppeteer.launch(/* オプションは割愛*/); 5 const page = await browser.newPage(); 6 // ↓ここから 7 await page._client.send('Network.enable', { 8 maxResourceBufferSize: 1024 * 1024 * 150, // 150Mb 9 maxTotalBufferSize: 1024 * 1024 * 300, // 300mb 10 }); 11 // ↑ここまでを追記 12 const response = await page.goto(imageURL, { waitUntil: ['networkidle0'], timeout: 300000 }); 13 const responseBuffer = await response.buffer(); 14 :
javascript(.mjs)で実行したら正常に動いたので一応効果はある事は確認できたのですが、
Typescriptで書くとpage._client.send
でエラーが出ます。
プロパティ '_client' は型 'Page' に存在しません。
多分@types/puppeteer
に含まれてない(許可されてない)書き方なのでエラーが出てるのかと思います。
追記した_client.send
が通るようにinterface extend で拡張できるように思っているのですが、書き方(適用方法?)が分かりません。
また当ケースのような場合でも回避できるのか。
ご教示いただけないでしょうか?
よろしくお願いします。
※当方Typescriptに疎く勉強中なのですが、文面等で誤ってる言葉や解釈があれば合わせて指摘してくれると幸いに思います。
環境、設定
- typescript: 4.0.2
- package.json(パッケージのみ抜粋)
json
1{ 2 "dependencies": { 3 "@types/request-promise": "^4.1.46", 4 "axios": "^0.20.0", 5 "puppeteer": "^5.3.1" 6 }, 7 "devDependencies": { 8 "@types/node": "^14.14.0", 9 "@types/puppeteer": "^3.0.2", 10 "@typescript-eslint/eslint-plugin": "^4.5.0", 11 "@typescript-eslint/parser": "^4.5.0", 12 "eslint": "^7.11.0", 13 "eslint-plugin-vue": "^7.1.0", 14 "fs": "^0.0.1-security", 15 "ts-node": "^9.0.0", 16 "tsconfig-paths": "^3.9.0", 17 "typescript": "^4.0.3" 18 } 19}
あなたの回答
tips
プレビュー