木偶使用xPath返回未定义(JS)

时间:2020-10-02 07:04:19

标签: javascript node.js puppeteer

我正在尝试抓取此元素:enter image description here上的this website

我的JS代码:

const puppeteer = require("puppeteer");

const url = 'https://magicseaweed.com/Bore-Surf-Report/1886/'
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url);
const title = await page.$x('/html/body/div[1]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div/div/div[1]/div/header/h3/div[1]/span[1]')
let text = await page.evaluate(res => res.textContext, title[0])
console.log(text) // UNDEFINED

文本未定义。这里有什么问题?谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您需要在代码中修复1或2个问题。

  1. textContent与textContext
  2. xpath

对于您想要的xpath内容应该是:

const title = await page.$x('/html/body/div[1]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div/div/div[1]/div/div[1]/div[1]/div/div[2]/ul[1]/li[1]/text()')

并获得此内容:

const text = await page.evaluate(el => {
    return el.textContent.trim()
}, title[0])

请注意,您需要将title [0]发送为页面函数的参数。

OR

如果您不需要使用xpath,似乎可以直接使用类名来查找元素:

const rating = await page.evaluate(() => {
    return $('.rating.rating-large.clearfix > li.rating-text')[0].textContent.trim()
})