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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

Node.js

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

Q&A

1回答

1899閲覧

ElectronでPuppeteerのevaluateを使えるようにしたい

sdadsaksnda

総合スコア1

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

Node.js

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

0グッド

0クリップ

投稿2021/11/04 10:49

前提・実現したいこと

ElectronでPuppeteerを使ったアプリを開発しています
ビルドにはElectron-builderを使用しています

開発時にはPuppeteerのevaluate、$evalなどが使用できるのですが、ビルド後は下記のエラーが発生します
Error: Passed function is not well-serializable!

下記の記事を参考に、pkg化された場合はevaluateが使用できないと把握しています
https://officeforest.org/wp/2020/02/18/puppeteer%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%A8%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89/#pkg

アプリの実装にevaluateが使用不可欠なので、どうにかして利用できるようにしたいです

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

Error: Passed function is not well-serializable!

該当のソースコード

node

1l_name = await page.$eval('input[name="kanji_nm1"]', (el) => el.value);

node

1 let data1 = await page.evaluate(() => { 2 const tds = Array.from( 3 document.querySelectorAll("ここにセレクタが入ります") 4 ); 5 return tds.map((td) => td.innerText); 6 });

試したこと

・evaluateがある場合、ない場合でのアプリの動作確認
→evaluateが実行された場合のみ上記エラーが再現

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

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

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

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

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

guest

回答1

0

下記の方法で解決しました。
https://stackoverflow.com/questions/59021700/passed-function-is-not-well-serializable

node

1async getText(selector: string) { 2 await this.page.waitForSelector(selector); 3 let text = await eval(`this.page.$eval('${selector}', el => el.textContent)`) 4 5 return text; 6}

その他のスマートな手法が存在していれば教えていただけると幸いです。

投稿2021/11/04 11:10

sdadsaksnda

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問