Playwright

Найнадійніший спосіб отримати значення input:

# html
<input id="myInput">
# python
value = page.query_selector('#myInput').evaluate('el => el.value')

Обробити відкриття другої вкладки браузеру:

from playwright import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    context = browser.newContext()
    page = context.newPage()
    page.goto('<site url>')
    with context.expect_page() as tab:
        page.click('.newTabByLink')
    # do some steps
    ...
    tab.value.close()
        
    browser.close()

Обробка lazy-loading. Якщо елемент просто завантажується через ajax, на нього можна просто зачекати. Якщо елементи завантажуються при скролі, треба придумувати своє рішення, як ініціювати скрол (можна через playwright, можна через JS window.scroll())

import playwright.sync_api

with playwright.sync_api.sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto('https://qamania.org/')
    page.wait_for_load_state()

    ITERATIONS = 50

    for i in range(ITERATIONS):
        page.keyboard.press('PageDown')
        page.wait_for_timeout(300)
        if page.query_selector('text="Postman Intercept"') is not None:
            break
    else:
        assert False, f"element Postman Intercept was not found for {ITERATIONS} iterations"

    page.click('text="Postman Intercept"')
    page.wait_for_load_state()
    page.screenshot(path='aaa.png')

Взаємодія з input, що знаходиться на сторінці в iframe:

frame = self.page.query_selector('body >> iframe').content_frame()
frame.fill('id=inputId', "hello world")

Якщо при роботі з браузером відкривається popup, як на скріншоті нижче, з ним можна взаємодіяти наступним чином:

... 
with page.expect_popup() as pp:
    # click on "sign in" to open popup
    page.click('button:visible >> text="Sign in"')
# pp.value -> page of popup
pp.value.click('.table')
...