Javascript TypeError:无法读取属性';getProperty';未定义的?Node.js,puppeter

Javascript TypeError:无法读取属性';getProperty';未定义的?Node.js,puppeter,javascript,node.js,web-scraping,puppeteer,getproperty,Javascript,Node.js,Web Scraping,Puppeteer,Getproperty,当尝试获取我的scraper的'name'元素的文本时。我尝试使用完整的Xpath获取它,并得到错误“TypeError:无法读取未定义的”的属性“getProperty”,我尝试只使用常规Xpath,但名称是:“跳过导航”,为什么get属性返回为未定义?它只在尝试获取频道标题时发生,在获取配置文件图像时起作用 scaper.js const puppeteer = require('puppeteer'); async function scrapeChannel(url) {

当尝试获取我的scraper的'name'元素的文本时。我尝试使用完整的Xpath获取它,并得到错误“TypeError:无法读取未定义的”的属性“getProperty”,我尝试只使用常规Xpath,但名称是:“跳过导航”,为什么get属性返回为未定义?它只在尝试获取频道标题时发生,在获取配置文件图像时起作用

scaper.js


const puppeteer = require('puppeteer');


async function scrapeChannel(url) {
    const browser = await puppeteer.launch()
    const page = await browser.newPage();
    await page.goto(url);

    // const xpath_expression = '/html/body/ytd-app/div/ytd-page-manager/ytd-browse[2]/div[3]/ytd-c4-tabbed-header-renderer/tp-yt-app-header-layout/div/tp-yt-app-header/div[2]/div[2]/div/div[1]/div/div[1]/ytd-channel-name/div/div/yt-formatted-string';
    // await page.waitForXPath(xpath_expression);
    const [el] = await page.$x('/html/body/ytd-app/div/ytd-page-manager/ytd-browse[2]/div[3]/ytd-c4-tabbed-header-renderer/tp-yt-app-header-layout/div/tp-yt-app-header/div[2]/div[2]/div/div[1]/div/div[1]/ytd-channel-name/div/div/yt-formatted-string');
    const text = await el.getProperty('textContent');
    const name = await text.jsonValue();

    const [el2] = await page.$x('//*[@id="img"]');
    const src = await el2.getProperty('src');
    const avatarURL = await src.jsonValue();

    browser.close();


    console.log({name, avatarURL});

    return { name, avatarURL}
} 
}

scrapeChannel('https://www.youtube.com/channel/UC8butISFwT-Wl7EV0hUK0BQ')

index.html

  function newEl(type, attrs = {}) {
        const el = document.createElement(type);
        for (let attr in attrs) {
            const value = attrs[attr];
          if (attr == "innerText") el.innerText = value;
          else el.setAttribute(attr, value);
        }
        return el;
      }


看起来您可能在XPath中有输入错误。当我在浏览器控制台中尝试XPath时,它不会返回任何元素。但是,通过这一更改,它将返回一个元素:

$x('/html/body/ytd-app/div/ytd-page manager/ytd-browse[1]/div[3]/ytd-c4-tabbed-header-renderer/tp-yt-app-header布局/div/tp-yt-app-header/div[2]/div/div/div[1]/div/div[1]/ytd-channel-name/div/div/div/div/yt格式字符串')
1而不是2

“获取属性”不会返回为未定义。“el”和/或“el2”未定义!因为你从未初始化过它们!“el”和“el2”在哪里没有初始化我得到了输出或者“el2”我不明白你说它没有初始化是什么意思。我还在原始文章中添加了index.html中的一个片段。1)找出哪一行出现了错误(我打赌您找到的第一行是
wait el.getProperty('textContent')
。2)逐步完成调试器(您正在使用调试器,例如Chrome Developer Tools,对吗?),3)在出现错误之前停止。4) 查看变量(例如“el”)。5) 它的定义是。。。还是空?如果没有定义。。。那为什么不呢?请更新你的帖子,显示错误发生的那一行。您可以通过调试器确定这一点。