puppeteer无法获取登陆后主页面中的元素,无法拿到evaluate中的参数

发布于 2022-09-11 18:36:31 字数 1722 浏览 24 评论 0

### 问题描述
登录网站 => 进入主页 => 获取导航列表标签(无法获取)

以下是UI和HTML布局
clipboard.png

clipboard.png

// 相关代码
    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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

山有枢 2022-09-18 18:36:31

1、输入完整名称的 class 。
2、dom 渲染需要时间,你可以使用 page.waitForSelector 方法等待找到这个元素。
3、page.waitFor(1000) 直接输入数字就是 timeout 操作,不需要你重写延时方法。

夏夜暖风 2022-09-18 18:36:31
await page.$eval(".nav li a", elements => {
    // 此时的elements 是个List类型的伪数组(又或者是Array类型我忘了。。。)
    // 然后你就可以遍历对每个a进行操作 , 当然了 如果你想事件委托么 selector写到.nav li或者.nav这就是另一个话题了
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文