首頁 >web前端 >js教程 >為什麼使用'querySelectorAll”時'page.evaluate”返回空物件?

為什麼使用'querySelectorAll”時'page.evaluate”返回空物件?

Patricia Arquette
Patricia Arquette原創
2024-11-13 13:50:02262瀏覽

Why Does `page.evaluate` Return Empty Objects When Using `querySelectorAll`?

page.evaluate querySelectorAll 傳回意外的空物件陣列

將Puppeteer 的page.evaluate 函數與query遇到以下問題:傳回的陣列包含空物件。

原因:

從 page.evaluate 函數傳回的值必須是 JSON 可序列化的。預設情況下,HTML 元素不經修改就不可序列化為 JSON。

解決方案:

要解決此問題,應將從 HTML 元素中提取的資料修改為 JSON可序列化格式。例如,如果所需的資料是元素的href 值,則可以使用以下程式碼片段:

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

此程式碼從元素中提取href 值並將它們作為字串陣列返回,這是JSON 可序列化的。透過修改回傳值,可以避免空物件的問題。

以上是為什麼使用'querySelectorAll”時'page.evaluate”返回空物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn