我想选择一个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>
答案 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);
}
}