В puppeteer в node.js это делается так:
const puppeteer = require('puppeteer'); // подключаем puppeteer
const browser = await puppeteer.launch(); // запускаем браузер
const page1 = await browser.newPage(); // открываем новую вкладку
await page1.goto('https://google.com'); // переходим на google.com
await page1.waitForSelector('#fsl > a:nth-child(4)'); // ожидаем загрузку объекта
const link = await page1.$('#fsl > a:nth-child(4)'); // объявляем объект по селектору
const newPagePromise = new Promise(x => browser.once('targetcreated', target => x(target.page()))); // объявляем промис
await link.click({button: 'middle'}); // кликаем средней кнопкой, ссылка открывается в новой вкладке
const page2 = await newPagePromise; // объявляем новую вкладку/окно, теперь с ней можно работать
await page2.bringToFront(); // делаем вкладку активной
...
await browser.close(); // закрываем браузер
Как сделать то же самое, но на питоне с pyppeteer?
Заковыка в этом самом «объявляем промис». Что там делать в питоне?