Hari DaysOfCode

Patricia Arquette
Patricia Arquetteasal
2024-10-04 06:19:02335semak imbas

Day of DaysOfCode

Hei! Dah agak lama sejak entry lepas.
Baru-baru ini, saya telah menangani isu yang berkaitan dengan kehilangan rujukan elemen dalam satu gelung, dan akhirnya saya menemui penyelesaian yang ingin saya kongsikan dengan anda semua.

Apa yang saya ingin capai

  • Kumpulkan elemen butang pada halaman web tertentu.
  • Klik setiap butang untuk menavigasi ke halaman lain.
  • Selepas melakukan tindakan tertentu pada halaman baharu, kembali ke halaman pertama.
  • Ulang Langkah 2 dan 3 sehingga semua butang telah diklik.

Berikut ialah versi ringkas kod awal:

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 */
    ]);
};

Apakah kesilapan yang saya hadapi

Selepas lelaran gelung forst, skrip tidak dapat mengesan elemen butang. Saya terus mendapat ralat berikut:
ProtocolError: Protocol error (DOM.describeNode): Tidak dapat mencari konteks dengan id yang ditentukan di

Bagaimana saya menyelesaikannya

Saya menyelesaikan isu ini dengan mengisytiharkan semula senarai elemen butang dalam gelung.
Berikut ialah kod yang diubah suai:

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 */
    ]);
};

Saya menambah baris pengisytiharan semula kerana saya menganggap rujukan someElements asal telah hilang apabila menavigasi keluar dari halaman awal. Selepas perubahan ini, ralat telah diselesaikan. Walau bagaimanapun, saya tidak pasti sama ada pendekatan ini benar-benar mematuhi amalan pengekodan terbaik.

Jika anda menghadapi masalah dengan .click() dalam gelung semasa menavigasi antara halaman, pertimbangkan untuk mengisytiharkan semula elemen dalam gelung itu sendiri. Perubahan mudah ini mungkin menjimatkan banyak masa penyelesaian masalah anda!

Atas ialah kandungan terperinci Hari DaysOfCode. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn