Найнадійніший спосіб отримати значення 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')
...