puppeteer

这样写有什么问题么?
获取不到这个iframe是怎么回事?
clipboard.png


const puppeteer = require('puppeteer');

(async() => {
    const browser = await puppeteer.launch({
        devtools: true,
        headless: false
    });
    const page = await browser.newPage();
    await page.goto('https://e.qq.com/dev/index.html');
    await page.click('a#login', {
        delay: 1000
    })
    
    // 怎么样一直等到iframe出现的时候在获取button?waitFor(3000)这种方法有问题
    const iframe = await page.waitForSelector('iframe[name="ui_ptlogin"]');
    
    console.log(iframe.name()) // UnhandledPromiseRejectionWarning: TypeError: iframe.name is not a function



    // 这样可以
    // await page.waitFor(3000);
    // let iframe = await page.frames().find(f => f.name() === 'ui_ptlogin');
    // const unfoldButton = await iframe.$('#bottom_qlogin #switcher_plogin');
    // await unfoldButton.click();
})();
阅读 3k
1 个回答

你图片和代码不一样啊?


        // 怎么样一直等到iframe出现的时候在获取button?waitFor(3000)这种方法有问题
        // 等待iframe出现
        await page.waitForSelector('iframe[name="ui_ptlogin"]');
        // 选中frame 我用的childFrames这个方法
        const frame = page.mainFrame().childFrames()[0];
        // 等待按钮出现,注意是frame.waitFor而不是page.waitFor
        await frame.waitFor("#bottom_qlogin #switcher_plogin");
        
        const button = await frame.$("#bottom_qlogin #switcher_plogin");

        await frame.click("#bottom_qlogin #switcher_plogin");
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进