Кукловод Выберите абзац по имени - PullRequest
0 голосов
/ 13 октября 2019

Я хочу выбрать ap, который является единственным с именем класса. Но почему не работает код javascript?

Примечание: я не могу делать элементы [i] .className == "test", потому что имя класса меняется каждый раз, когда я снова открываю сайт.

Когда я запускаю это в консоли, я получаю:

undefined
undefined
undefined

const puppeteer = require('puppeteer');

async function test() {
const browser = await puppeteer.launch({ headless: false, timeout: 0};
const page2 = await browser.newPage();
await page2.goto("localhost");
await page2.waitFor(2530);
const elements = await page2.evaluate(() => [...document.querySelectorAll('p')]);
for (var i = 0; i < elements.length; i++) {
  if(elements[i].className){
    console.log(elements[i].innerText);
  }
}

}
test();
<p>text1</p>
<p class="test">text2</p>
<p>text3</p>

Ответы [ 2 ]

0 голосов
/ 13 октября 2019
async function test() {

        const browser = await puppeteer.launch({ headless: false, timeout: 0};
        const page2 = await browser.newPage();
        await page2.goto("localhost");
        await page2.waitFor(2530);


        let elements = await page.$$('p');
        for (let i = 0; i < elements.length; i++) {
            let el_class = await page.evaluate(el => el.getAttribute('class'), elements[i]);
            console.log(el_class);
        }


}
0 голосов
/ 13 октября 2019

const puppeteer = require('puppeteer');

async function test() {
const browser = await puppeteer.launch({ headless: false, timeout: 0};
const page2 = await browser.newPage();
await page2.goto("localhost");
await page2.waitFor(2530);
const elements = await page2.evaluate(() => [...document.querySelectorAll('p')]);
for (var i = 0; i < elements.length; i++) {
  if(elements[i].className){
    console.log(elements[i].innerText[]);
  }
}

}
test();

Измените эту строку

console.log(elements[i].innerText[]);

на

console.log(elements[i].innerText);

И используйте ее для возврата массива абзацев из оценки

 const textsArray = await page2.evaluate(
        () => [...document.querySelectorAll('p')].map(elem => elem.innerText)
    );

Это вернет массив всего текста из тегов абзаца, иначе вы можете манипулировать картой, чтобы также возвращать объекты внутри массива с их именами классов, если вы хотите оба

LikeЭто

const textsArray = await page2.evaluate(() => 
     [...document.querySelectorAll('p')].map(elem => 
      { return {class: elem.className,  text:elem.innerText}
     )
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...