3

在此处输入图像描述

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

如何在 puppeteer 中实现这一点?

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

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");
  }
})();

4

2 回答 2

3

//获取webelement的xpath

const [getXpath] = await page.$x('//div[]');

// 使用来自该 web 元素的 innerText 获取文本

const getMsg = await page.evaluate(name => name.innerText, getXpath);

//在屏幕上记录消息

console.log(getMsg)
于 2020-08-21T10:12:13.477 回答
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);

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


对于条件:

if (text.includes("Check"))
    //do this
else if (text.includes("Change"))
    //do that
于 2020-01-11T08:52:50.127 回答