Rumah  >  Artikel  >  hujung hadapan web  >  Mengapa `page.evaluate()` Puppeteer Dengan `querySelectorAll` Mengembalikan Objek Kosong?

Mengapa `page.evaluate()` Puppeteer Dengan `querySelectorAll` Mengembalikan Objek Kosong?

DDD
DDDasal
2024-11-11 18:38:02816semak imbas

Why Does Puppeteer's `page.evaluate()` With `querySelectorAll` Return Empty Objects?

Memahami halaman Puppeteer.evaluate() QuerySelectorAll Returns Empty Objects

Kaedah Puppeteer's page.evaluate() ialah alat JavaScript yang berkuasa untuk melaksanakan penyemak imbas, membolehkan anda berinteraksi dengan elemen pada halaman dan mendapatkan semula maklumat. Walau bagaimanapun, kadangkala anda mungkin menghadapi isu di mana kaedah querySelectorAll() mengembalikan tatasusunan objek kosong.

Isu ini berpunca daripada fakta bahawa nilai yang dikembalikan daripada fungsi menilai mestilah boleh bersiri JSON. Elemen dan objek dokumen, seperti yang dikembalikan oleh querySelectorAll(), tidak boleh bersiri secara langsung.

Menyelesaikan Isu

Untuk menyelesaikan isu ini, adalah perlu untuk mengekstrak maklumat yang diingini daripada elemen dan hanya mengembalikan data boleh bersiri JSON. Dalam kes senarai pautan dari halaman, anda boleh mengubah suai kod seperti berikut:

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

Kod ini akan mengekstrak atribut href daripada setiap elemen dan mengembalikan tatasusunan rentetan, yang boleh menjadi JSON bersiri.

Atas ialah kandungan terperinci Mengapa `page.evaluate()` Puppeteer Dengan `querySelectorAll` Mengembalikan Objek Kosong?. 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