Javascript 使用木偶演员选择角色
我正试图用Puppeter从页面中提取一些Javascript 使用木偶演员选择角色,javascript,dom,puppeteer,Javascript,Dom,Puppeteer,我正试图用Puppeter从页面中提取一些URL 但是,我的脚本返回的是未定义的 const puppeteer = require('puppeteer'); async function run() { const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']}); const page = await browser.newPage();
URL
但是,我的脚本返回的是未定义的
const puppeteer = require('puppeteer');
async function run() {
const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
const page = await browser.newPage();
await page.goto('https://divisare.com/');
let projects = await page.evaluate((sel) => {
return document.getElementsByClassName(sel)
}, 'homepage-project-image');
var aNode = projects[0].href;
console.log(aNode);
console.log(projects.length)
browser.close();
}
run();
然而,当我运行下面这样的程序时,我至少能够获得我试图提取的链接的正确数量
let projects = await page.evaluate((sel) => {
return document.getElementsByClassName(sel).length
}, 'homepage-project-image');
console.log(projects);
我是否试图错误地访问我的项目HTMLCollection
?我错过了什么?谢谢。Puppeter无法从evaluate
语句返回不可序列化的值(请参阅和以下内容)
解决这一问题的一种方法是:
let projects = await page.evaluate((sel) => {
return document.getElementsByClassName(sel)[0].href;
}, 'homepage-project-image');
请记住,document.getElementsByCassName
返回HTMLCollection
,因此,如果要迭代结果,需要类似以下内容:
let projects = await page.evaluate((sel) => {
return Array.from(document.getElementsByClassName(sel)).map(node => node.href);
}, 'homepage-project-image');
令人惊叹的。非常感谢。