木偶返回空对象

时间:2020-10-28 18:15:17

标签: javascript node.js web-scraping puppeteer

我正在使用p操纵者抓取网站。但是,即使我可以看到那里的许多班级,班级仍继续以空状态回来。有什么建议吗?

我正在寻找“门户型人”的课程。页面上大约有90个。但是所有对象都是空的。

const axios = require('axios');
const cheerio = require('cheerio');
const puppeteer = require('puppeteer');
const mainurl = "https://www.fbi.gov/wanted/kidnap";


(async () => {
    //const browser = await puppeteer.launch({headless: false});
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
  
    await page.goto(mainurl);
    await page.evaluate(() => {
        window.scrollBy(0, document.body.scrollHeight);
      });
    await page.waitForTimeout(1000);

    let persons = await page.evaluate(() => {
        return document.querySelectorAll('.portal-type-person');
        //return document.querySelector('.portal-type-person');
    });

    //console.log(persons);
    for(let data in persons) {
        console.log(persons[data]);
    }
  
    browser.close();
  })();

1 个答案:

答案 0 :(得分:0)

不幸的是,page.evaluate()只能传输可序列化的值(粗糙地,JSON可以处理的值)。当document.querySelectorAll()返回不可序列化的DOM元素的集合(它们包含方法和循环引用)时,该集合中的每个元素都被一个空对象替换。您需要返回可序列化的值(例如,href数组)或使用类似page.$$(selector)ElementHandle API的东西。