やあ!前回のエントリーからしばらく時間が経ってしまいました。
最近、私はループ内での要素参照の喪失に関連する問題に取り組んできました。そして、ついに解決策を見つけたので、皆さんと共有したいと思います。
これは、最初のコードの簡略版です:
const someElements = await page.$$("xpath/ .//foo[@name='hoge']"); for (let i=0; i < someElements.length; i++) { await Promise.all([ someElements[i].click(), page.waitForNavigation({ waitUntil: ["load", 'networkidle0'] }), /* There are particular processes and going back process */ ]); };
forst ループの反復の後、スクリプトはボタン要素を見つけることができませんでした。次のエラーが繰り返し発生しました: ループ内でボタン要素リストを再宣言することで、この問題を解決しました。 最初のページから移動するときに元の someElements 参照が失われると考えたので、再宣言行を追加しました。この変更後、エラーは解決されました。ただし、このアプローチがコーディングのベストプラクティスに厳密に準拠しているかどうかはわかりません。 ページ間を移動するときにループ内の .click() で問題が発生した場合は、ループ自体内で要素を再宣言することを検討してください。この簡単な変更により、トラブルシューティングの時間を大幅に節約できる可能性があります! 以上がDaysOfCode の日の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
ProtocolError: プロトコル エラー (DOM.describeNode):
どうやって解決したか
変更されたコードは次のとおりです:
const someElements1 = await page.$$("xpath/ .//foo[@name='hoge']");
for (let i=0; i < someElements.length; i++) {
const someElements2 = await page.$$("xpath/ .//foo[@name='hoge']"); // added row
await Promise.all([
someElements2[i].click(),
page.waitForNavigation({ waitUntil: ["load", 'networkidle0'] }),
/* There are particular processes and going back process */
]);
};