3 回答

TA貢獻1820條經驗 獲得超10個贊
您可以使用page.evaluate:
const myDiv = await page.evaluate(() => {
const divs = Array.from(document.querySelectorAll('.myDiv'))
return divs.map(d => d.textContent)
});
傳遞給的函數(shù)page.evaluate將被序列化并發(fā)送到瀏覽器,因此它在瀏覽器上下文(而不是節(jié)點)中執(zhí)行。

TA貢獻1828條經驗 獲得超3個贊
由于您沒有提供更多代碼,因此這個答案非常自以為是,可能無法解決您的問題。但它向您展示了一種了解正在發(fā)生的事情的方法。
特別是在開發(fā)過程中,結合使用page.exposeFunction()和page.evaluate()來查看瀏覽器以及節(jié)點/木偶操縱者中發(fā)生的事情非常有幫助。這是一個草稿,我希望它能幫助你理解。
(async () => {
function executedInNodeContext(result) {
//this prints in the Node Console
console.log(result);
}
function executedInBrowserContext() {
console.log('Im in the Browser');
const myDiv = [...document.querySelectorAll('.myDiv')];
window.nameOfNodeFunction(myDiv);
}
// See the browser
const browser = await puppeteer.launch({ headless: false });
// Create a new page
const page = await browser.newPage();
// Callback in Node Context
await page.exposeFunction('nameOfNodeFunction', executedInNodeContext);
// Send puppeteer to a Url
await page.goto('http://localhost/awesome/URL');
// Function executed in the Browser on the given page
await page.evaluate(executedInBrowserContext);
})();

TA貢獻1811條經驗 獲得超4個贊
page.$$eval()
在其回調中發(fā)送一個包含元素的數(shù)組,因此您需要這樣的東西來獲取所有元素數(shù)據(jù):
const myDivs = await page.$$eval(".myDiv", divs => divs.map(div => div.textContent));
添加回答
舉報