V
V
Vyacheslav Grachunov2020-10-24 16:53:47
Python
Vyacheslav Grachunov, 2020-10-24 16:53:47

Opening a link in a new tab. How to do it in pyppeteer?

In puppeteer in node.js, this is done like this:

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();                                // закрываем браузер


How to do the same but in python with pyppeteer?
Zakovyka in this very "we declare a promise." What is there to do in python?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
V
Vyacheslav Grachunov, 2020-11-06
@Qwentor

result_page_future = asyncio.get_event_loop().create_future()
browser.once('targetcreated', lambda target: result_page_future.set_result(target))
await page.click('a[data-listing-id="'+reklama_id+'"]', { "button": "middle" })
result_page = await (await result_page_future).page()
await result_page.bringToFront()

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question