「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > DaysOfCode の日

DaysOfCode の日

2024 年 10 月 31 日公開
ブラウズ:228

Day of DaysOfCode

おい!前回のエントリーからかなり時間が経ってしまいました。
最近、私はループ内での要素参照の喪失に関連する問題に取り組んできました。そしてついに解決策を見つけたので、皆さんと共有したいと思います。

達成したかったこと

  • 特定の Web ページ上のボタン要素を収集します。
  • 各ボタンをクリックすると別のページに移動します。
  • 新しいページで特定のアクションを実行した後、最初のページに戻ります。
  • すべてのボタンをクリックするまで、手順 2 と 3 を繰り返します。

これは最初のコードの簡略版です:

const someElements = await page.$$("xpath/ .//foo[@name='hoge']");

for (let i=0; i 



遭遇したエラー

forst ループの反復の後、スクリプトはボタン要素を見つけることができませんでした。次のエラーが発生し続けました:
ProtocolError: プロトコル エラー (DOM.describeNode):

で指定された ID のコンテキストが見つかりません

どうやって解決したか

ループ内でボタン要素リストを再宣言することで、この問題を解決しました。
変更されたコードは次のとおりです:

const someElements1 = await page.$$("xpath/ .//foo[@name='hoge']");

for (let i=0; i 



最初のページから移動するときに元の someElements 参照が失われると考えたので、再宣言行を追加しました。この変更後、エラーは解決されました。ただし、このアプローチがコーディングのベストプラクティスに厳密に準拠しているかどうかはわかりません。

ページ間を移動するときにループ内の .click() で問題が発生した場合は、ループ自体内で要素を再宣言することを検討してください。この簡単な変更により、トラブルシューティングの時間を大幅に節約できる可能性があります!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/koichiarai/day-23-of-100daysofcode-2opg?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3