Rumah > hujung hadapan web > tutorial js > 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
Lepaskan: 2024-11-16 04:33:03
asal
331 orang telah melayarinya

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();
Salin selepas log masuk

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan