木偶按他的班级名称选择一个段落

时间:2019-10-13 08:36:34

标签: javascript node.js web-scraping puppeteer

我想选择一个p,这是唯一一个具有类名的p。但是,为什么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 :(得分:0)

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)
    );

这将返回一个段落标签中所有文本的数组,否则,如果您希望两者同时使用,您也可以操纵map以其类名返回数组内的对象。

const textsArray = await page2.evaluate(() => 
     [...document.querySelectorAll('p')].map(elem => 
      { return {class: elem.className,  text:elem.innerText}
     )
    );

答案 1 :(得分:0)

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


}
相关问题