如何在 Puppeteer Node js 中从 xPath 获取文本

Raj*_*h G 5 puppeteer jest-puppeteer

在此输入图像描述

我需要从 span 标签获取文本并验证文本是否等于“check”。

我怎样才能在木偶师中实现这一目标?

下面是我编写的代码示例,如果有人可以帮我解决这个问题,请。

const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({
    headless: false,
    // "slowMo": 50,
    args: ["--start-fullscreen"],
    defaultViewport: null,
  });
  //Page
  const page2 = await browser.newPage();

  await page2.goto("https://www.flipkart.com");
  await page2.waitFor(2000);
  await page2.$x("//input[@class='_2zrpKA _1dBPDZ']").then(async (ele) => {
    await ele[0].type(username);
  });
  await page2.waitFor(2000);
  await page2.$x("//input[@type='password']").then(async (ele) => {
    await ele[0].type(password);
  });
  await page2.waitFor(2000);
  await page2
    .$x("//button[@class='_2AkmmA _1LctnI _7UHT_c']")
    .then(async (ele) => {
      await ele[0].click();
    });
  await page2.waitFor(2000);
  await page2.$x("//input[@class='LM6RPg']").then(async (ele) => {
    await ele[0].type("iPhone 11");
  });
  await page2.waitFor(2000);
  await page2.$x("//button[@class='vh79eN']").then(async (ele) => {
    await ele[0].click();
  });
  await page2.waitFor(2000);
  await page2.$x("//div[@class='col col-7-12']/div").then(async (ele) => {
    await ele[0].click();
  });
  await page2.waitFor(2000);
  let [element] = await page2.$x('//span[@class="_2aK_gu"]');
  let text = await page2.evaluate((element) => element.textContent, element);
  if (text.includes("Check")) {
    console.log("Check Present");
  }
  if (text.includes("Change")) {
    console.log("Change Present");
  }
})();

Run Code Online (Sandbox Code Playgroud)

mbi*_*bit 1

您可以从所选元素中获取文本,如下所示:

await page.goto(url, {waitUntil: "networkidle2"});
await page.waitForXPath('//span[@class="_2aK_gu"]');
//assuming it's the first element
let [element] = await page.$x('//span[@class="_2aK_gu"]');
let text = await page.evaluate(element => element.textContent, element);
Run Code Online (Sandbox Code Playgroud)

请注意,page.$x返回一个 ElementHandles 数组,因此此处的代码假设它是第一个元素。我建议您选择比类更具体的 XPath,因为许多元素可能都具有它。


对于条件:

if (text.includes("Check"))
    //do this
else if (text.includes("Change"))
    //do that
Run Code Online (Sandbox Code Playgroud)