Rumah  >  Artikel  >  hujung hadapan web  >  Mengapakah `page.evaluate()` Mengembalikan Objek Kosong Apabila Menyoal Elemen dalam Puppeteer?

Mengapakah `page.evaluate()` Mengembalikan Objek Kosong Apabila Menyoal Elemen dalam Puppeteer?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-16 04:33:03209semak imbas

Why Does `page.evaluate()` Return Empty Objects When Querying Elements in Puppeteer?

Puppeteer: page.evaluate querySelectorAll Dilemma

Apabila menggunakan fungsi page.evaluate() dalam Puppeteer, sesetengah pengguna telah menghadapi isu menerima pelbagai objek kosong sebagai hasilnya. Tingkah laku yang membingungkan ini berpunca daripada keperluan untuk mengembalikan nilai boleh bersiri dari dalam fungsi penilaian.

Pertimbangkan kod Puppeteer berikut, yang matlamatnya adalah untuk mengekstrak elemen tajuk daripada tapak web pengagregatan berita sosial popular Reddit:

const browser = await puppeteer.launch();

const page = await browser.newPage();
await page.goto('https://reddit.com/');

let list = await page.evaluate(() => {
  return Promise.resolve(Array.from(document.querySelectorAll('.title')));
});

console.log(JSON.stringify(list))

await browser.close();

Setelah dilaksanakan, kod ini mungkin mengembalikan tatasusunan objek kosong yang serupa dengan yang dinyatakan dalam penerangan masalah. Sebabnya terletak pada fakta bahawa walaupun elemen DOM tidak boleh bersiri secara langsung kepada JSON, Puppeteer cuba untuk menyelaraskannya.

Untuk menyelesaikan isu ini, kod tersebut perlu mengekstrak nilai yang dikehendaki daripada elemen dan mengembalikannya mereka dalam format boleh bersiri JSON. Dalam kes ini, atribut href bagi elemen tajuk memegang pautan tajuk sebenar. Untuk mendapatkannya, kod boleh diubah suai seperti berikut:

let links = await this.page.evaluate((sel) => {
        let elements = Array.from(document.querySelectorAll(sel));
        let links = elements.map(element => {
            return element.href
        })
        return links;
    }, sel);

Atas ialah kandungan terperinci Mengapakah `page.evaluate()` Mengembalikan Objek Kosong Apabila Menyoal Elemen dalam Puppeteer?. 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