puppeteer无法获取登陆后主页面中的元素,无法拿到evaluate中的参数
### 问题描述
登录网站 => 进入主页 => 获取导航列表标签(无法获取)
以下是UI和HTML布局
// 相关代码
const puppeteer = require("puppeteer");
(async () => {
let timeout = function (delay) {
return new Promise((resolve, reject) => {
setTimeout(() => {
try {
resolve(1)
} catch (e) {
reject(0)
}
}, delay);
})
}
const browser = await puppeteer.launch({
headless: false,
// slowMo: 250
});
const page = await browser.newPage();
// waitUtil:load页面加载完成是触发
await page.goto("https://example.com", { waitUntil: 'load'});
// 登录
await page.type("#username", "username");
await page.type("#password", "password");
await page.click("#btn_submit");
await timeout(3000)
const body = await page.$(".nav"); //页面上的导航ul的类名
const result = await page.evaluate((el) => {
console.log(el) //取不到el的值
return el;
}, body);
// 监听console输出
page.on('console', msg => console.log('PAGE LOG:', ...msg.args));
await page.evaluate(() => console.log(`url is ${location.href}`));
//页面登录成功后,需要保证redirect 跳转到请求的页面
await page.waitForNavigation();
})()
能获取到导航下面的子元素li并给a标签添加hover事件
各位大神帮我看看代码有没有问题,我给怎么修改或是问题出自哪里。感谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
1、输入完整名称的 class 。
2、dom 渲染需要时间,你可以使用
page.waitForSelector
方法等待找到这个元素。3、
page.waitFor(1000)
直接输入数字就是 timeout 操作,不需要你重写延时方法。