How to switch between tabs with Puppeteer?

后端 未结 3 1688
孤独总比滥情好
孤独总比滥情好 2021-01-12 04:27

Here is my use case:

I have a link which on clicking opens a new tab and loads the content.

What I am looking for:

Is there a way to switch the refe

相关标签:
3条回答
  • 2021-01-12 04:44

    To get the page that was opened after a link is clicked, you can listen on the popup event. It is emitted when the page opens a new tab or window.

    Code sample (from the docs linked above)

    const [newPage] = await Promise.all([
        new Promise(resolve => page.once('popup', resolve)),
        page.click('a[target=_blank]'),
    ]);
    

    This will click on the link while waiting for a window to be opened by the current page. newPage will be the opened page.


    Alternative approach: To get a list of all open pages, you can use browser.pages:

    const pages = await browser.pages();
    

    pages will be an array with all open pages.

    0 讨论(0)
  • 2021-01-12 04:46

    Use next function:

    let clickAndWaitForTarget = async (clickSelector, page, browser) => {
      const pageTarget = page.target(); //save this to know that this was the opener
      await page.click(clickSelector); //click on a link
      const newTarget = await browser.waitForTarget(target => target.opener() === pageTarget); //check that you opened this page, rather than just checking the url
      const newPage = await newTarget.page(); //get the page object
      // await newPage.once("load",()=>{}); //this doesn't work; wait till page is loaded
      await newPage.waitForSelector("body"); //wait for page to be loaded
    
      return newPage;
    };
    

    and use it:

    await page.waitForSelector('a[href="/admin"]');
    page = await clickAndWaitForTarget('a[href="/admin"]', page, browser);
    
    // Admin page
    //console.log(JSON.stringify(page.target()));
    await page.waitForSelector('a[href="/users"]');
    
    0 讨论(0)
  • 2021-01-12 04:49

    Currently, you can follow this issue https://github.com/GoogleChrome/puppeteer/pull/554 to know when the ability is added to puppeteer. Or you can use repo where JoelEinbinder folked

    0 讨论(0)
提交回复
热议问题