Saya menggunakan Dalang untuk mengikis data dari daftar putar YouTube tetapi tidak dapat memperoleh data apa pun. Saya telah mencoba kode dengan browser dan menggunakan Query Selector tetapi ingin mengotomatiskan proses ini dan menghasilkan file json sebagai output dari proses ini.

Kode


const puppeteer = require('puppeteer');


(async () => {
    console.log("begin");
    const browser = await puppeteer.launch({headless : false });
    const page = await browser.newPage();
    console.log("after newPage");
    await page.goto('https://www.youtube.com/playlist?list=PL2-FkZlJhxqVXZO1c6gKgsAdiet0zcOAO');

    console.log("after goto ");

    const selectorA = "a.yt-simple-endpoint.ytd-playlist-video-renderer"
    await page.waitForSelector(selectorA);
    console.log("after waitForSelector ");

    const items = await page.$$eval(selectorA, rows => {
        console.log("eval " + rows);
         return rows;    
    });

    console.log("items " + items);


    await browser.close();
})();



Hasil


begin
after newPage
after goto 
after waitForSelector 
items undefined

Tangkapan layar dari pemilih yang sama dengan browser masukkan deskripsi gambar di sini

0
Mahmoud Mabrok 25 Mei 2020, 13:33

1 menjawab

Jawaban Terbaik

Menurut dokumen, berbagai fungsi eval hanya dapat mentransfer data yang dapat diserialisasi (kira-kira, data yang dapat ditangani JSON, dengan beberapa tambahan). Kode Anda mengembalikan larik elemen DOM, yang tidak dapat serial (mereka memiliki metode dan referensi melingkar). Cobalah untuk mengambil data dalam konteks browser dan hanya mengembalikan data serial. Sebagai contoh:

return rows.map(row => [row.innerText, row.href]);
1
vsemozhebuty 25 Mei 2020, 20:20