Heim > Web-Frontend > js-Tutorial > Warum gibt „page.evaluate()' beim Abfragen von Elementen in Puppeteer leere Objekte zurück?

Warum gibt „page.evaluate()' beim Abfragen von Elementen in Puppeteer leere Objekte zurück?

Mary-Kate Olsen
Freigeben: 2024-11-16 04:33:03
Original
296 Leute haben es durchsucht

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

Puppeteer: page.evaluate querySelectorAll Dilemma

Bei der Verwendung der page.evaluate()-Funktion in Puppeteer sind einige Benutzer auf das Problem gestoßen Als Ergebnis wird ein Array leerer Objekte empfangen. Dieses rätselhafte Verhalten ergibt sich aus der Notwendigkeit, serialisierbare Werte innerhalb der Auswertungsfunktion zurückzugeben.

Betrachten Sie den folgenden Puppeteer-Code, dessen Ziel darin besteht, die Titelelemente aus der beliebten Social-News-Aggregations-Website Reddit zu extrahieren:

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();
Nach dem Login kopieren

Bei der Ausführung gibt dieser Code möglicherweise ein Array leerer Objekte zurück, ähnlich dem in der Problembeschreibung erwähnten. Der Grund dafür liegt in der Tatsache, dass DOM-Elemente zwar nicht direkt in JSON serialisierbar sind, Puppeteer jedoch trotzdem versucht, sie in Strings umzuwandeln.

Um dieses Problem zu beheben, muss der Code die gewünschten Werte aus den Elementen extrahieren und zurückgeben sie in einem JSON-serialisierbaren Format. In diesem Fall enthält das href-Attribut der Titelelemente die eigentlichen Titellinks. Um diese zu erhalten, kann der Code wie folgt geändert werden:

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);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum gibt „page.evaluate()' beim Abfragen von Elementen in Puppeteer leere Objekte zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage