Как получить текст из xPath в Puppeteer node js - PullRequest
0 голосов
/ 10 января 2020

enter image description here

Мне нужно получить текст из тега span и проверить, равен ли этот текст слову "check". Как этого добиться у кукловода?

const puppeteer = require ('puppeteer');

(asyn c () => {

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

}) ();

1 Ответ

0 голосов
/ 11 января 2020

Вы можете получить текст из выбранного элемента следующим образом:

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, поэтому код здесь предполагает, что это первый элемент. Я бы посоветовал вам выбрать более конкретный c XPath, чем класс, так как многие элементы могут иметь его.


Для условия:

if (text.includes("Check"))
    //do this
else if (text.includes("Change"))
    //do that
...