Page
Класс Page предоставляет методы для взаимодействия с одной вкладкой в Browser или со страницей фонового расширения в Chromium. Один экземпляр Browser может иметь несколько экземпляров Page.
В этом примере создаётся страница, выполняется переход по URL, а затем сохраняется скриншот:
- Sync
- Async
from playwright.sync_api import sync_playwright, Playwright
def run(playwright: Playwright):
webkit = playwright.webkit
browser = webkit.launch()
context = browser.new_context()
page = context.new_page()
page.goto("https://example.com")
page.screenshot(path="screenshot.png")
browser.close()
with sync_playwright() as playwright:
run(playwright)
import asyncio
from playwright.async_api import async_playwright, Playwright
async def run(playwright: Playwright):
webkit = playwright.webkit
browser = await webkit.launch()
context = await browser.new_context()
page = await context.new_page()
await page.goto("https://example.com")
await page.screenshot(path="screenshot.png")
await browser.close()
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Класс Page генерирует различные события (описаны ниже), которые можно обрабатывать с помощью любых нативных методов Node EventEmitter, таких как on, once или removeListener.
В этом примере выводится сообщение при одиночном событии загрузки страницы load:
page.once("load", lambda: print("page loaded!"))
Чтобы отписаться от событий, используйте метод removeListener:
def log_request(intercepted_request):
print("a request was made:", intercepted_request.url)
page.on("request", log_request)
# sometime later...
page.remove_listener("request", log_request)
Методы
add_init_script
Добавлено до v1.9Добавляет скрипт, который будет выполнен в одном из следующих случаев:
- При каждом переходе страницы.
- При каждом присоединении или навигации дочернего фрейма. В этом случае скрипт выполняется в контексте только что присоединённого фрейма.
Скрипт выполняется после создания документа, но до запуска любых его собственных скриптов. Это полезно для изменения JavaScript-окружения, например, чтобы зафиксировать значение Math.random.
Использование
Пример переопределения Math.random до загрузки страницы:
// preload.js
Math.random = () => 42;
- Sync
- Async
# in your playwright script, assuming the preload.js file is in same directory
page.add_init_script(path="./preload.js")
# in your playwright script, assuming the preload.js file is in same directory
await page.add_init_script(path="./preload.js")
Порядок выполнения нескольких скриптов, установленных через browser_context.add_init_script() и page.add_init_script(), не определён.
Аргументы
-
pathUnion[str, pathlib.Path] (опционально)#Путь к JavaScript-файлу. Если
pathявляется относительным путём, он разрешается относительно текущей рабочей директории. Необязательный параметр. -
Скрипт, который будет выполнен на всех страницах в контексте браузера. Необязательный параметр.
Возвращает
add_locator_handler
Добавлено в: v1.42При тестировании веб-страницы иногда появляются неожиданные оверлеи, например диалог «Sign up», которые блокируют действия, которые вы хотите автоматизировать, например клик по кнопке. Такие оверлеи не всегда появляются одинаково или в одно и то же время, из‑за чего их сложно обрабатывать в автоматических тестах.
Этот метод позволяет настроить специальную функцию — обработчик (handler), — которая срабатывает, когда обнаруживает, что оверлей стал видимым. Задача обработчика — убрать оверлей, чтобы тест мог продолжаться так, как будто его не было.
Что важно учитывать:
- Если оверлей появляется предсказуемо, рекомендуется явно ожидать его в тесте и закрывать как часть обычного сценария теста, вместо использования page.add_locator_handler().
- Playwright проверяет наличие оверлея каждый раз перед выполнением или повторной попыткой действия, требующего проверки возможности действия (actionability check), либо перед выполнением автождущего утверждения (assertion). Если оверлей видим, Playwright сначала вызывает обработчик, а затем продолжает действие или проверку. Обратите внимание: обработчик вызывается только при выполнении действия или утверждения — если оверлей стал видимым, но вы не выполняете никаких действий, обработчик не будет вызван.
- После выполнения обработчика Playwright удостоверится, что оверлей, вызвавший обработчик, больше не виден. От этого поведения можно отказаться с помощью no_wait_after.
- Время выполнения обработчика засчитывается в таймаут действия или утверждения, которое его вызвало. Если обработчик выполняется слишком долго, это может привести к таймаутам.
- Можно зарегистрировать несколько обработчиков. Однако одновременно будет выполняться только один обработчик. Убедитесь, что действия внутри обработчика не зависят от другого обработчика.
Выполнение обработчика изменяет состояние страницы в середине теста. Например, может измениться элемент в фокусе или положение мыши. Убедитесь, что действия, выполняемые после обработчика, являются самодостаточными и не зависят от того, что фокус и состояние мыши остались неизменными.
Например, рассмотрим тест, который вызывает locator.focus(), а затем keyboard.press(). Если ваш обработчик нажмёт кнопку между этими двумя действиями, элемент в фокусе, скорее всего, будет другим, и нажатие клавиши произойдёт не на том элементе. Используйте locator.press(), чтобы избежать этой проблемы.
Другой пример — серия действий мышью, где mouse.move() вызывается перед mouse.down(). Если обработчик выполнится между этими действиями, позиция мыши будет неверной во время mouse.down. Предпочитайте самодостаточные действия, такие как locator.click(), которые не зависят от неизменности состояния при выполнении обработчика.
Использование
Пример, который закрывает диалог «Sign up to the newsletter», когда он появляется:
- Sync
- Async
# Setup the handler.
def handler():
page.get_by_role("button", name="No thanks").click()
page.add_locator_handler(page.get_by_text("Sign up to the newsletter"), handler)
# Write the test as usual.
page.goto("https://example.com")
page.get_by_role("button", name="Start here").click()
# Setup the handler.
async def handler():
await page.get_by_role("button", name="No thanks").click()
await page.add_locator_handler(page.get_by_text("Sign up to the newsletter"), handler)
# Write the test as usual.
await page.goto("https://example.com")
await page.get_by_role("button", name="Start here").click()
Пример, который пропускает страницу «Confirm your security details», когда она появляется:
- Sync
- Async
# Setup the handler.
def handler():
page.get_by_role("button", name="Remind me later").click()
page.add_locator_handler(page.get_by_text("Confirm your security details"), handler)
# Write the test as usual.
page.goto("https://example.com")
page.get_by_role("button", name="Start here").click()
# Setup the handler.
async def handler():
await page.get_by_role("button", name="Remind me later").click()
await page.add_locator_handler(page.get_by_text("Confirm your security details"), handler)
# Write the test as usual.
await page.goto("https://example.com")
await page.get_by_role("button", name="Start here").click()
Пример с пользовательским колбэком при каждой проверке actionability. Используется локатор <body>, который всегда видим, поэтому обработчик вызывается перед каждой проверкой actionability. Важно указать no_wait_after, так как обработчик не скрывает элемент <body>.
- Sync
- Async
# Setup the handler.
def handler():
page.evaluate("window.removeObstructionsForTestIfNeeded()")
page.add_locator_handler(page.locator("body"), handler, no_wait_after=True)
# Write the test as usual.
page.goto("https://example.com")
page.get_by_role("button", name="Start here").click()
# Setup the handler.
async def handler():
await page.evaluate("window.removeObstructionsForTestIfNeeded()")
await page.add_locator_handler(page.locator("body"), handler, no_wait_after=True)
# Write the test as usual.
await page.goto("https://example.com")
await page.get_by_role("button", name="Start here").click()
Обработчик принимает исходный локатор в качестве аргумента. Вы также можете автоматически удалить обработчик после определённого количества вызовов, задав параметр times:
- Sync
- Async
def handler(locator):
locator.click()
page.add_locator_handler(page.get_by_label("Close"), handler, times=1)
async def handler(locator):
await locator.click()
await page.add_locator_handler(page.get_by_label("Close"), handler, times=1)
Аргументы
-
Локатор, который инициирует вызов обработчика.
-
handlerCallable[Locator]:Promise[Any]#Функция, которая должна быть выполнена, когда появляется locator. Эта функция должна устранить элемент, блокирующий действия, такие как клик.
-
no_wait_afterbool (опционально) Добавлено в: v1.44#По умолчанию после вызова обработчика Playwright будет ждать, пока оверлей не станет скрытым, и только затем продолжит действие или утверждение, вызвавшее обработчик. Этот параметр позволяет отказаться от такого поведения, чтобы оверлей мог оставаться видимым после выполнения обработчика.
-
timesint (опционально) Добавлено в: v1.44#Задаёт максимальное количество вызовов этого обработчика. По умолчанию — без ограничений.
Возвращает
add_script_tag
Добавлено до v1.9Добавляет на страницу тег <script> с указанным URL или содержимым. Возвращает добавленный тег, когда срабатывает событие onload скрипта или когда содержимое скрипта было внедрено во фрейм.
Использование
page.add_script_tag()
page.add_script_tag(**kwargs)
Аргументы
-
Необработанное JavaScript-содержимое для внедрения во фрейм.
-
pathUnion[str, pathlib.Path] (опционально)#Путь к JavaScript-файлу для внедрения во фрейм. Если
pathявляется относительным путём, он разрешается относительно текущей рабочей директории. -
Тип скрипта. Используйте
'module'для загрузки JavaScript ES6‑модуля. Подробнее см. script. -
URL скрипта, который необходимо добавить.
Возвращает
add_style_tag
Добавлено до v1.9Добавляет на страницу тег <link rel="stylesheet"> с указанным URL или тег <style type="text/css"> с содержимым. Возвращает добавленный тег, когда срабатывает событие onload таблицы стилей или когда CSS‑содержимое было внедрено во фрейм.
Использование
page.add_style_tag()
page.add_style_tag(**kwargs)
Аргументы
-
Необработанное CSS‑содержимое для внедрения во фрейм.
-
pathUnion[str, pathlib.Path] (опционально)#Путь к CSS‑файлу для внедрения во фрейм. Если
pathявляется относительным путём, он разрешается относительно текущей рабочей директории. -
URL для тега
<link>.
Возвращает
bring_to_front
Добавлено до v1.9Перемещает страницу на передний план (активирует вкладку).
Использование
page.bring_to_front()
Возвращает
close
Добавлено до v1.9Если run_before_unload равно false, обработчики выгрузки не запускаются, и метод ожидает закрытия страницы. Если run_before_unload равно true, метод запустит обработчики выгрузки, но не будет ждать фактического закрытия страницы.
По умолчанию page.close() не запускает обработчики beforeunload.
Если run_before_unload передан как true, может появиться диалог beforeunload, который необходимо обрабатывать вручную через событие page.on("dialog").
Использование
page.close()
page.close(**kwargs)
Аргументы
-
reasonstr (опционально) Добавлено в: v1.40#Причина, которая будет передана операциям, прерванным закрытием страницы.
-
run_before_unloadbool (опционально)#По умолчанию
false. Определяет, следует ли запускать обработчики страницы before unload.
Возвращает
console_messages
Добавлено в: v1.56Возвращает до (на данный момент) 200 последних сообщений консоли со страницы. Подробнее см. page.on("console").
Использование
page.console_messages()
Возвращает
content
Добавлено до v1.9Возвращает полный HTML‑код страницы, включая doctype.
Использование
page.content()
Возвращает
drag_and_drop
Добавлено в: v1.13Этот метод перетаскивает исходный элемент к целевому элементу. Сначала выполняется перемещение к исходному элементу и mousedown, затем перемещение к целевому элементу и mouseup.
Использование
- Sync
- Async
page.drag_and_drop("#source", "#target")
# or specify exact positions relative to the top-left corners of the elements:
page.drag_and_drop(
"#source",
"#target",
source_position={"x": 34, "y": 7},
target_position={"x": 10, "y": 20}
)
await page.drag_and_drop("#source", "#target")
# or specify exact positions relative to the top-left corners of the elements:
await page.drag_and_drop(
"#source",
"#target",
source_position={"x": 34, "y": 7},
target_position={"x": 10, "y": 20}
)
Аргументы
-
Селектор для поиска элемента, который нужно перетащить. Если селектору соответствует несколько элементов, будет использован первый.
-
Селектор для поиска элемента, на который нужно выполнить сброс. Если селектору соответствует несколько элементов, будет использован первый.
-
Следует ли обходить проверки actionability. По умолчанию
false. -
no_wait_afterbool (опционально)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
source_positionDict (опционально) Добавлено в: v1.14#Клик по исходному элементу в этой точке относительно верхнего левого угла области padding элемента. Если не указано, используется некоторая видимая точка элемента.
-
stepsint (опционально) Добавлено в: v1.57#По умолчанию равно 1. Отправляет
nинтерполированных событийmousemove, представляющих перемещение междуmousedownиmouseupво время перетаскивания. При значении 1 отправляется одно событиеmousemoveв конечной точке. -
strictbool (опционально) Добавлено в: v1.14#Если установлено в
true, селектор должен однозначно разрешаться в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
target_positionDict (опционально) Добавлено в: v1.14#Сбрасывает на целевой элемент в этой точке относительно верхнего левого угла области padding элемента. Если не указано, используется некоторая видимая точка элемента.
-
Максимальное время в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout(). -
Если установлено, метод выполняет только проверки actionability и пропускает само действие. По умолчанию
false. Полезно для ожидания готовности элемента к действию без его выполнения.
Возвращает
emulate_media
Добавлено до v1.9Этот метод изменяет CSS media type с помощью аргумента media и/или медиавыражение 'prefers-colors-scheme' с помощью аргумента colorScheme.
Использование
- Sync
- Async
page.evaluate("matchMedia('screen').matches")
# → True
page.evaluate("matchMedia('print').matches")
# → False
page.emulate_media(media="print")
page.evaluate("matchMedia('screen').matches")
# → False
page.evaluate("matchMedia('print').matches")
# → True
page.emulate_media()
page.evaluate("matchMedia('screen').matches")
# → True
page.evaluate("matchMedia('print').matches")
# → False
await page.evaluate("matchMedia('screen').matches")
# → True
await page.evaluate("matchMedia('print').matches")
# → False
await page.emulate_media(media="print")
await page.evaluate("matchMedia('screen').matches")
# → False
await page.evaluate("matchMedia('print').matches")
# → True
await page.emulate_media()
await page.evaluate("matchMedia('screen').matches")
# → True
await page.evaluate("matchMedia('print').matches")
# → False
- Sync
- Async
page.emulate_media(color_scheme="dark")
page.evaluate("matchMedia('(prefers-color-scheme: dark)').matches")
# → True
page.evaluate("matchMedia('(prefers-color-scheme: light)').matches")
# → False
await page.emulate_media(color_scheme="dark")
await page.evaluate("matchMedia('(prefers-color-scheme: dark)').matches")
# → True
await page.evaluate("matchMedia('(prefers-color-scheme: light)').matches")
# → False
Аргументы
-
color_scheme"light" | "dark" | "no-preference" | "null" (опционально) Добавлено в: v1.9#Эмулирует медиавыражение prefers-colors-scheme. Поддерживаемые значения:
'light'и'dark'. Передача'Null'отключает эмуляцию цветовой схемы.'no-preference'устарело. -
contrast"no-preference" | "more" | "null" (опционально) Добавлено в: v1.51# -
forced_colors"active" | "none" | "null" (опционально) Добавлено в: v1.15# -
media"screen" | "print" | "null" (опционально) Добавлено в: v1.9#Изменяет тип CSS media страницы. Допустимые значения:
'Screen','Print'и'Null'. Передача'Null'отключает эмуляцию CSS media. -
reduced_motion"reduce" | "no-preference" | "null" (опционально) Добавлено в: v1.12#Эмулирует медиавыражение
'prefers-reduced-motion'. Поддерживаемые значения:'reduce','no-preference'. Передачаnullотключает эмуляцию уменьшенного движения.
Возвращает
evaluate
Добавлено до v1.9Возвращает значение выполнения expression.
Если функция, переданная в page.evaluate(), возвращает Promise, то page.evaluate() дождётся его выполнения и вернёт результат.
Если функция, переданная в page.evaluate(), возвращает не-Serializable значение, то page.evaluate() завершится с результатом undefined. Playwright также поддерживает передачу некоторых дополнительных значений, которые не сериализуются с помощью JSON: -0, NaN, Infinity, -Infinity.
Использование
Передача аргумента в expression:
- Sync
- Async
result = page.evaluate("([x, y]) => Promise.resolve(x * y)", [7, 8])
print(result) # выводит "56"
result = await page.evaluate("([x, y]) => Promise.resolve(x * y)", [7, 8])
print(result) # выводит "56"
Вместо функции также можно передать строку:
- Sync
- Async
print(page.evaluate("1 + 2")) # выводит "3"
x = 10
print(page.evaluate(f"1 + {x}")) # выводит "11"
print(await page.evaluate("1 + 2")) # выводит "3"
x = 10
print(await page.evaluate(f"1 + {x}")) # выводит "11"
Экземпляры ElementHandle можно передавать как аргумент в page.evaluate():
- Sync
- Async
body_handle = page.evaluate("document.body")
html = page.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
body_handle.dispose()
body_handle = await page.evaluate("document.body")
html = await page.evaluate("([body, suffix]) => body.innerHTML + suffix", [body_handle, "hello"])
await body_handle.dispose()
Аргументы
-
JavaScript-выражение, которое будет выполнено в контексте браузера. Если выражение вычисляется в функцию, эта функция будет автоматически вызвана.
-
argEvaluationArgument (опционально)#Необязательный аргумент, передаваемый в expression.
Возвращает
evaluate_handle
Добавлено до v1.9Возвращает значение выполнения expression в виде JSHandle.
Единственное отличие между page.evaluate() и page.evaluate_handle() заключается в том, что page.evaluate_handle() возвращает JSHandle.
Если функция, переданная в page.evaluate_handle(), возвращает Promise, то page.evaluate_handle() дождётся его выполнения и вернёт результат.
Использование
- Sync
- Async
a_window_handle = page.evaluate_handle("Promise.resolve(window)")
a_window_handle # handle для объекта window
a_window_handle = await page.evaluate_handle("Promise.resolve(window)")
a_window_handle # handle для объекта window
Вместо функции также можно передать строку:
- Sync
- Async
a_handle = page.evaluate_handle("document") # handle для "document"
a_handle = await page.evaluate_handle("document") # handle для "document"
Экземпляры JSHandle можно передавать как аргумент в page.evaluate_handle():
- Sync
- Async
a_handle = page.evaluate_handle("document.body")
result_handle = page.evaluate_handle("body => body.innerHTML", a_handle)
print(result_handle.json_value())
result_handle.dispose()
a_handle = await page.evaluate_handle("document.body")
result_handle = await page.evaluate_handle("body => body.innerHTML", a_handle)
print(await result_handle.json_value())
await result_handle.dispose()
Аргументы
-
JavaScript-выражение, которое будет выполнено в контексте браузера. Если выражение вычисляется в функцию, эта функция будет автоматически вызвана.
-
argEvaluationArgument (опционально)#Необязательный аргумент, передаваемый в expression.
Возвращает
expect_console_message
Добавлено в: v1.9Выполняет действие и ожидает, пока на странице будет залогировано сообщение ConsoleMessage. Если передан predicate, он получает значение ConsoleMessage и ожидание продолжается до тех пор, пока predicate(message) не вернёт истинное значение. Будет выброшена ошибка, если страница будет закрыта до возникновения события page.on("console").
Использование
page.expect_console_message()
page.expect_console_message(**kwargs)
Аргументы
-
predicateCallable[ConsoleMessage]:bool (опционально)#Получает объект ConsoleMessage и должно вернуть истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью browser_context.set_default_timeout().
Возвращает
expect_download
Добавлено в: v1.9Выполняет действие и ожидает новый Download. Если передан predicate, он получает значение Download и ожидание продолжается до тех пор, пока predicate(download) не вернёт истинное значение. Будет выброшена ошибка, если страница будет закрыта до возникновения события загрузки.
Использование
page.expect_download()
page.expect_download(**kwargs)
Аргументы
-
predicateCallable[Download]:bool (опционально)#Получает объект Download и должно вернуть истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью browser_context.set_default_timeout().
Возвращает
expect_event
Добавлено до v1.9Ожидает срабатывания события и передаёт его данные в функцию-предикат. Возвращается, когда предикат возвращает истинное значение. Будет выброшена ошибка, если страница будет закрыта до срабатывания события. Возвращает значение данных события.
Использование
- Sync
- Async
with page.expect_event("framenavigated") as event_info:
page.get_by_role("button")
frame = event_info.value
async with page.expect_event("framenavigated") as event_info:
await page.get_by_role("button")
frame = await event_info.value
Аргументы
-
Имя события, такое же, какое обычно передаётся в
*.on(event). -
predicateCallable (опционально)#Получает данные события и должно вернуть истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью browser_context.set_default_timeout().
Возвращает
expect_file_chooser
Добавлено в: v1.9Выполняет действие и ожидает создание нового FileChooser. Если передан predicate, он получает значение FileChooser и ожидание продолжается до тех пор, пока predicate(fileChooser) не вернёт истинное значение. Будет выброшена ошибка, если страница будет закрыта до открытия диалога выбора файла.
Использование
page.expect_file_chooser()
page.expect_file_chooser(**kwargs)
Аргументы
-
predicateCallable[FileChooser]:bool (опционально)#Получает объект FileChooser и должно вернуть истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью browser_context.set_default_timeout().
Возвращает
expect_popup
Добавлено в: v1.9Выполняет действие и ожидает появления всплывающего окна (Page). Если передан predicate, значение [Popup] передаётся в функцию predicate, и ожидание продолжается до тех пор, пока predicate(page) не вернёт истинное значение. Будет выброшена ошибка, если страница будет закрыта до того, как произойдёт событие появления всплывающего окна.
Использование
page.expect_popup()
page.expect_popup(**kwargs)
Аргументы
-
predicateCallable[Page]:bool (необязательно)#Получает объект Page и должна вернуть истинное значение, когда ожидание должно завершиться.
-
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью browser_context.set_default_timeout().
Возвращает
expect_request
Добавлено до v1.9Ожидает подходящий запрос и возвращает его. Подробнее о событиях см. в разделе ожидание события.
Использование
- Sync
- Async
with page.expect_request("http://example.com/resource") as first:
page.get_by_text("trigger request").click()
first_request = first.value
# или с использованием lambda
with page.expect_request(lambda request: request.url == "http://example.com" and request.method == "get") as second:
page.get_by_text("trigger request").click()
second_request = second.value
async with page.expect_request("http://example.com/resource") as first:
await page.get_by_text("trigger request").click()
first_request = await first.value
# или с использованием lambda
async with page.expect_request(lambda request: request.url == "http://example.com" and request.method == "get") as second:
await page.get_by_text("trigger request").click()
second_request = await second.value
Аргументы
-
url_or_predicatestr | Pattern | Callable[Request]:bool#Строка URL запроса, регулярное выражение или предикат, принимающий объект Request. Если в параметрах контекста был указан base_url и переданный URL является путём, он будет объединён с помощью конструктора
new URL(). -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах, по умолчанию 30 секунд. Передайте
0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью метода page.set_default_timeout().
Возвращает
expect_request_finished
Добавлено в: v1.12Выполняет действие и ожидает завершения загрузки Request. Если передан predicate, значение Request передаётся в функцию predicate, и ожидание продолжается до тех пор, пока predicate(request) не вернёт истинное значение. Будет выброшена ошибка, если страница будет закрыта до того, как произойдёт событие page.on("requestfinished").
Использование
page.expect_request_finished()
page.expect_request_finished(**kwargs)
Аргументы
-
predicateCallable[Request]:bool (необязательно)#Получает объект Request и должна вернуть истинное значение, когда ожидание должно завершиться.
-
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью browser_context.set_default_timeout().
Возвращает
expect_response
Добавлено до v1.9Возвращает соответствующий ответ. Подробнее о событиях см. в разделе ожидание события.
Использование
- Sync
- Async
with page.expect_response("https://example.com/resource") as response_info:
page.get_by_text("trigger response").click()
response = response_info.value
return response.ok
# или с использованием lambda
with page.expect_response(lambda response: response.url == "https://example.com" and response.status == 200 and response.request.method == "get") as response_info:
page.get_by_text("trigger response").click()
response = response_info.value
return response.ok
async with page.expect_response("https://example.com/resource") as response_info:
await page.get_by_text("trigger response").click()
response = await response_info.value
return response.ok
# или с использованием lambda
async with page.expect_response(lambda response: response.url == "https://example.com" and response.status == 200 and response.request.method == "get") as response_info:
await page.get_by_text("trigger response").click()
response = await response_info.value
return response.ok
Аргументы
-
url_or_predicatestr | Pattern | Callable[Response]:bool#Строка URL запроса, регулярное выражение или предикат, принимающий объект Response. Если в параметрах контекста был указан base_url и переданный URL является путём, он будет объединён с помощью конструктора
new URL(). -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах, по умолчанию 30 секунд. Передайте
0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
expect_websocket
Добавлено в: v1.9Выполняет действие и ожидает новый WebSocket. Если передан predicate, значение WebSocket передаётся в функцию predicate, и ожидание продолжается до тех пор, пока predicate(webSocket) не вернёт истинное значение. Будет выброшена ошибка, если страница будет закрыта до возникновения события WebSocket.
Использование
page.expect_websocket()
page.expect_websocket(**kwargs)
Аргументы
-
predicateCallable[WebSocket]:bool (необязательно)#Получает объект WebSocket и должна вернуть истинное значение, когда ожидание должно завершиться.
-
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью browser_context.set_default_timeout().
Возвращает
expect_worker
Добавлено в: v1.9Выполняет действие и ожидает новый Worker. Если передан predicate, значение Worker передаётся в функцию predicate, и ожидание продолжается до тех пор, пока predicate(worker) не вернёт истинное значение. Будет выброшена ошибка, если страница будет закрыта до возникновения события worker.
Использование
page.expect_worker()
page.expect_worker(**kwargs)
Аргументы
-
predicateCallable[Worker]:bool (необязательно)#Получает объект Worker и должна вернуть истинное значение, когда ожидание должно завершиться.
-
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью browser_context.set_default_timeout().
Возвращает
expose_binding
Добавлено до v1.9Метод добавляет функцию с именем name в объект window каждого фрейма на странице. При вызове эта функция выполняет callback и возвращает Promise, который резолвится в возвращаемое значение callback. Если [callback] возвращает Promise, он будет ожидаться.
Первый аргумент функции callback содержит информацию о вызывающей стороне: { browserContext: BrowserContext, page: Page, frame: Frame }.
См. browser_context.expose_binding() для версии, действующей на уровне контекста.
Функции, установленные через page.expose_binding(), сохраняются при навигациях.
Использование
Пример экспонирования URL страницы во все фреймы страницы:
- Sync
- Async
from playwright.sync_api import sync_playwright, Playwright
def run(playwright: Playwright):
webkit = playwright.webkit
browser = webkit.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.expose_binding("pageURL", lambda source: source["page"].url)
page.set_content("""
<script>
async function onClick() {
document.querySelector('div').textContent = await window.pageURL();
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
""")
page.click("button")
with sync_playwright() as playwright:
run(playwright)
import asyncio
from playwright.async_api import async_playwright, Playwright
async def run(playwright: Playwright):
webkit = playwright.webkit
browser = await webkit.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
await page.expose_binding("pageURL", lambda source: source["page"].url)
await page.set_content("""
<script>
async function onClick() {
document.querySelector('div').textContent = await window.pageURL();
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
""")
await page.click("button")
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Аргументы
-
Имя функции в объекте window.
-
Callback-функция, которая будет вызываться в контексте Playwright.
-
Устарело
Этот параметр будет удалён в будущем.
Определяет, передавать ли аргумент как handle вместо передачи по значению. При передаче handle поддерживается только один аргумент. При передаче по значению поддерживается несколько аргументов.
Возвращает
expose_function
Добавлено до v1.9Метод добавляет функцию с именем name в объект window каждого фрейма на странице. При вызове эта функция выполняет callback и возвращает Promise, который резолвится в возвращаемое значение callback.
Если [callback] возвращает Promise, он будет ожидаться.
См. browser_context.expose_function() для версии, действующей на уровне контекста.
Функции, установленные через page.expose_function(), сохраняются при навигациях.
Использование
Пример добавления функции sha256 на страницу:
- Sync
- Async
import hashlib
from playwright.sync_api import sync_playwright, Playwright
def sha256(text):
m = hashlib.sha256()
m.update(bytes(text, "utf8"))
return m.hexdigest()
def run(playwright: Playwright):
webkit = playwright.webkit
browser = webkit.launch(headless=False)
page = browser.new_page()
page.expose_function("sha256", sha256)
page.set_content("""
<script>
async function onClick() {
document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
""")
page.click("button")
with sync_playwright() as playwright:
run(playwright)
import asyncio
import hashlib
from playwright.async_api import async_playwright, Playwright
def sha256(text):
m = hashlib.sha256()
m.update(bytes(text, "utf8"))
return m.hexdigest()
async def run(playwright: Playwright):
webkit = playwright.webkit
browser = await webkit.launch(headless=False)
page = await browser.new_page()
await page.expose_function("sha256", sha256)
await page.set_content("""
<script>
async function onClick() {
document.querySelector('div').textContent = await window.sha256('PLAYWRIGHT');
}
</script>
<button onclick="onClick()">Click me</button>
<div></div>
""")
await page.click("button")
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Аргументы
-
Имя функции в объекте window.
-
Callback-функция, которая будет вызываться в контексте Playwright.
Возвращает
frame
Добавлено до v1.9Возвращает фрейм, соответствующий указанным критериям. Должен быть указан либо name, либо url.
Использование
frame = page.frame(name="frame-name")
frame = page.frame(url=r".*domain.*")
Аргументы
-
Имя фрейма, указанное в атрибуте
nameэлементаiframe. -
urlstr | Pattern | Callable[URL]:bool (необязательно)#Glob-паттерн, регулярное выражение или предикат, принимающий
urlфрейма в виде объекта URL.
Возвращает
frame_locator
Добавлено в: v1.17При работе с iframe вы можете создать frame locator, который позволит войти во iframe и выбирать элементы внутри него.
Использование
Следующий пример находит элемент с текстом «Submit» внутри iframe с id my-frame, например <iframe id="my-frame">:
- Sync
- Async
locator = page.frame_locator("#my-iframe").get_by_text("Submit")
locator.click()
locator = page.frame_locator("#my-iframe").get_by_text("Submit")
await locator.click()
Аргументы
Возвращает
get_by_alt_text
Добавлено в: v1.27Позволяет находить элементы по их alt-тексту.
Использование
Например, этот метод найдёт изображение по alt-тексту «Playwright logo»:
<img alt='Playwright logo'>
- Sync
- Async
page.get_by_alt_text("Playwright logo").click()
await page.get_by_alt_text("Playwright logo").click()
Аргументы
-
Текст, по которому нужно найти элемент.
-
Определяет, требуется ли точное совпадение: с учётом регистра и всей строки целиком. По умолчанию
false. Игнорируется при использовании регулярного выражения. Обратите внимание, что при точном совпадении пробелы по краям всё равно обрезаются.
Возвращает
get_by_label
Добавлено в: v1.27Позволяет находить элементы ввода по тексту связанного элемента <label> или aria-labelledby, либо по атрибуту aria-label.
Использование
Например, этот метод найдёт поля ввода по меткам «Username» и «Password» в следующем DOM:
<input aria-label="Username">
<label for="password-input">Password:</label>
<input id="password-input">
- Sync
- Async
page.get_by_label("Username").fill("john")
page.get_by_label("Password").fill("secret")
await page.get_by_label("Username").fill("john")
await page.get_by_label("Password").fill("secret")
Аргументы
-
Текст, по которому нужно найти элемент.
-
Определяет, требуется ли точное совпадение: с учётом регистра и по всей строке. По умолчанию
false. Игнорируется при поиске с использованием регулярного выражения. Обратите внимание, что при точном совпадении пробелы по краям всё равно обрезаются.
Возвращает
get_by_placeholder
Добавлено в: v1.27Позволяет находить элементы ввода по тексту плейсхолдера.
Использование
Рассмотрим следующую структуру DOM.
<input type="email" placeholder="name@example.com" />
Вы можете заполнить поле, найдя его по тексту плейсхолдера:
- Sync
- Async
page.get_by_placeholder("name@example.com").fill("playwright@microsoft.com")
await page.get_by_placeholder("name@example.com").fill("playwright@microsoft.com")
Аргументы
-
Текст, по которому нужно найти элемент.
-
Определяет, требуется ли точное совпадение: с учётом регистра и по всей строке. По умолчанию
false. Игнорируется при поиске с использованием регулярного выражения. Обратите внимание, что при точном совпадении пробелы по краям всё равно обрезаются.
Возвращает
get_by_role
Добавлено в: v1.27Позволяет находить элементы по их ARIA‑роли, ARIA‑атрибутам и доступному имени.
Использование
Рассмотрим следующую структуру DOM.
<h3>Sign up</h3>
<label>
<input type="checkbox" /> Subscribe
</label>
<br/>
<button>Submit</button>
Вы можете найти каждый элемент по его неявной роли:
- Sync
- Async
expect(page.get_by_role("heading", name="Sign up")).to_be_visible()
page.get_by_role("checkbox", name="Subscribe").check()
page.get_by_role("button", name=re.compile("submit", re.IGNORECASE)).click()
await expect(page.get_by_role("heading", name="Sign up")).to_be_visible()
await page.get_by_role("checkbox", name="Subscribe").check()
await page.get_by_role("button", name=re.compile("submit", re.IGNORECASE)).click()
Аргументы
-
role"alert" | "alertdialog" | "application" | "article" | "banner" | "blockquote" | "button" | "caption" | "cell" | "checkbox" | "code" | "columnheader" | "combobox" | "complementary" | "contentinfo" | "definition" | "deletion" | "dialog" | "directory" | "document" | "emphasis" | "feed" | "figure" | "form" | "generic" | "grid" | "gridcell" | "group" | "heading" | "img" | "insertion" | "link" | "list" | "listbox" | "listitem" | "log" | "main" | "marquee" | "math" | "meter" | "menu" | "menubar" | "menuitem" | "menuitemcheckbox" | "menuitemradio" | "navigation" | "none" | "note" | "option" | "paragraph" | "presentation" | "progressbar" | "radio" | "radiogroup" | "region" | "row" | "rowgroup" | "rowheader" | "scrollbar" | "search" | "searchbox" | "separator" | "slider" | "spinbutton" | "status" | "strong" | "subscript" | "superscript" | "switch" | "tab" | "table" | "tablist" | "tabpanel" | "term" | "textbox" | "time" | "timer" | "toolbar" | "tooltip" | "tree" | "treegrid" | "treeitem"#Обязательная ARIA‑роль.
-
Атрибут, который обычно задаётся с помощью
aria-checkedили нативных элементов<input type=checkbox>.Подробнее см.
aria-checked. -
disabledbool (необязательно)#Атрибут, который обычно задаётся с помощью
aria-disabledилиdisabled.примечаниеВ отличие от большинства других атрибутов,
disabledнаследуется по иерархии DOM. Подробнее см.aria-disabled. -
exactbool (необязательно) Добавлено в: v1.28#Определяет, должно ли name совпадать точно: с учётом регистра и по всей строке. По умолчанию
false. Игнорируется, если name является регулярным выражением. Обратите внимание, что при точном совпадении пробелы по краям всё равно обрезаются. -
expandedbool (необязательно)#Атрибут, который обычно задаётся с помощью
aria-expanded.Подробнее см.
aria-expanded. -
include_hiddenbool (необязательно)#Параметр, управляющий тем, учитываются ли скрытые элементы. По умолчанию по селектору ролей сопоставляются только нескрытые элементы, как определено в ARIA.
Подробнее см.
aria-hidden. -
Числовой атрибут, который обычно присутствует для ролей
heading,listitem,row,treeitem, с значениями по умолчанию для элементов<h1>-<h6>.Подробнее см.
aria-level. -
namestr | Pattern (необязательно)#Параметр для сопоставления доступного имени. По умолчанию сопоставление регистронезависимое и ищет подстроку; используйте exact для управления этим поведением.
Подробнее см. accessible name.
-
Атрибут, который обычно задаётся с помощью
aria-pressed.Подробнее см.
aria-pressed. -
selectedbool (необязательно)#Атрибут, который обычно задаётся с помощью
aria-selected.Подробнее см.
aria-selected.
Возвращает
Подробности
Селектор по роли не заменяет аудит доступности и тесты на соответствие стандартам, а лишь даёт раннюю обратную связь по соблюдению рекомендаций ARIA.
Многие HTML‑элементы имеют неявно определённую роль, которая распознаётся селектором ролей. Все поддерживаемые роли перечислены здесь. Рекомендации ARIA не советуют дублировать неявные роли и атрибуты, устанавливая role и/или aria-* со значениями по умолчанию.
get_by_test_id
Добавлено в: v1.27Находит элемент по тестовому идентификатору.
Использование
Рассмотрим следующую структуру DOM.
<button data-testid="directions">Itinéraire</button>
Вы можете найти элемент по его test id:
- Sync
- Async
page.get_by_test_id("directions").click()
await page.get_by_test_id("directions").click()
Аргументы
Возвращает
Подробности
По умолчанию в качестве test id используется атрибут data-testid. При необходимости вы можете настроить другой атрибут test id с помощью selectors.set_test_id_attribute().
get_by_text
Добавлено в: v1.27Позволяет находить элементы, содержащие заданный текст.
См. также locator.filter(), который позволяет сначала сопоставлять по другим критериям, например по доступной роли, а затем фильтровать по текстовому содержимому.
Использование
Рассмотрим следующую структуру DOM:
<div>Hello <span>world</span></div>
<div>Hello</div>
Вы можете искать по подстроке текста, точной строке или регулярному выражению:
- Sync
- Async
# Совпадает с <span>
page.get_by_text("world")
# Совпадает с первым <div>
page.get_by_text("Hello world")
# Совпадает со вторым <div>
page.get_by_text("Hello", exact=True)
# Совпадает с обоими <div>
page.get_by_text(re.compile("Hello"))
# Совпадает со вторым <div>
page.get_by_text(re.compile("^hello$", re.IGNORECASE))
# Совпадает с <span>
page.get_by_text("world")
# Совпадает с первым <div>
page.get_by_text("Hello world")
# Совпадает со вторым <div>
page.get_by_text("Hello", exact=True)
# Совпадает с обоими <div>
page.get_by_text(re.compile("Hello"))
# Совпадает со вторым <div>
page.get_by_text(re.compile("^hello$", re.IGNORECASE))
Аргументы
-
Текст, по которому нужно найти элемент.
-
Определяет, требуется ли точное совпадение: с учётом регистра и по всей строке. По умолчанию
false. Игнорируется при поиске с использованием регулярного выражения. Обратите внимание, что при точном совпадении пробелы по краям всё равно обрезаются.
Возвращает
Подробности
Сопоставление по тексту всегда нормализует пробелы, даже при точном совпадении. Например, несколько пробелов преобразуются в один, переносы строк заменяются пробелами, а начальные и конечные пробелы игнорируются.
Элементы ввода типов button и submit сопоставляются по их атрибуту value, а не по текстовому содержимому. Например, поиск по тексту "Log in" найдёт <input type=button value="Log in">.
get_by_title
Добавлено в: v1.27Позволяет находить элементы по их атрибуту title.
Использование
Рассмотрим следующую структуру DOM.
<span title='Issues count'>25 issues</span>
Вы можете проверить количество задач, найдя элемент по тексту заголовка:
- Sync
- Async
expect(page.get_by_title("Issues count")).to_have_text("25 issues")
await expect(page.get_by_title("Issues count")).to_have_text("25 issues")
Аргументы
-
Текст, по которому нужно найти элемент.
-
Определяет, требуется ли точное совпадение: с учётом регистра и по всей строке. По умолчанию
false. Игнорируется при поиске с использованием регулярного выражения. Обратите внимание, что при точном совпадении пробелы по краям всё равно обрезаются.
Возвращает
go_back
Добавлено до v1.9Возвращает ответ основного ресурса. В случае нескольких редиректов навигация завершится с ответом последнего редиректа. Если вернуться назад невозможно, возвращает null.
Переход на предыдущую страницу в истории.
Использование
page.go_back()
page.go_back(**kwargs)
Аргументы
-
timeoutfloat (необязательно)#Максимальное время выполнения операции в миллисекундах, по умолчанию 30 секунд. Передайте
0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_navigation_timeout(), browser_context.set_default_timeout(), page.set_default_navigation_timeout() или page.set_default_timeout(). -
wait_until"load" | "domcontentloaded" | "networkidle" | "commit" (необязательно)#Условие, при котором операция считается успешно завершённой, по умолчанию
load. Возможные события:'domcontentloaded'— операция считается завершённой при срабатывании событияDOMContentLoaded.'load'— операция считается завершённой при срабатывании событияload.'networkidle'— НЕ РЕКОМЕНДУЕТСЯ: операция считается завершённой, когда в течение как минимум500мс нет сетевых соединений. Не используйте этот режим для тестирования; вместо этого полагайтесь на веб‑ассерты.'commit'— операция считается завершённой, когда получен сетевой ответ и документ начал загружаться.
Возвращает
go_forward
Добавлено до v1.9Возвращает ответ основного ресурса. В случае нескольких редиректов навигация завершится с ответом последнего редиректа. Если перейти вперёд невозможно, возвращает null.
Переход на следующую страницу в истории.
Использование
page.go_forward()
page.go_forward(**kwargs)
Аргументы
-
timeoutfloat (необязательно)#Максимальное время выполнения операции в миллисекундах, по умолчанию 30 секунд. Передайте
0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_navigation_timeout(), browser_context.set_default_timeout(), page.set_default_navigation_timeout() или page.set_default_timeout(). -
wait_until"load" | "domcontentloaded" | "networkidle" | "commit" (необязательно)#Условие, при котором операция считается успешно завершённой, по умолчанию
load. Возможные события:'domcontentloaded'— операция считается завершённой при срабатывании событияDOMContentLoaded.'load'— операция считается завершённой при срабатывании событияload.'networkidle'— НЕ РЕКОМЕНДУЕТСЯ: операция считается завершённой, когда в течение как минимум500мс нет сетевых соединений. Не используйте этот режим для тестирования; вместо этого полагайтесь на веб‑ассерты.'commit'— операция считается завершённой, когда получен сетевой ответ и документ начал загружаться.
Возвращает
goto
Добавлено до v1.9Возвращает ответ основного ресурса. В случае нескольких редиректов навигация завершится с первым ответом, который не является редиректом.
Метод выбрасывает ошибку, если:
- возникает ошибка SSL (например, при использовании самоподписанных сертификатов);
- целевой URL некорректен;
- превышен timeout во время навигации;
- удалённый сервер не отвечает или недоступен;
- основной ресурс не удалось загрузить.
Метод не выбрасывает ошибку, если удалённый сервер возвращает любой допустимый HTTP‑статус, включая 404 «Not Found» и 500 «Internal Server Error». Статус такого ответа можно получить с помощью response.status.
Метод либо выбрасывает ошибку, либо возвращает ответ основного ресурса. Единственные исключения — навигация на about:blank или навигация на тот же URL с другим хэшем: в этих случаях операция считается успешной и возвращает null.
В режиме headless не поддерживается навигация к PDF‑документам. См. вышестоящую задачу.
Использование
page.goto(url)
page.goto(url, **kwargs)
Аргументы
-
URL, на который нужно перейти. URL должен включать схему, например
https://. Если в параметрах контекста был задан base_url и переданный URL является путём, они объединяются с помощью конструктораnew URL(). -
Значение заголовка Referer. Если указано, оно имеет приоритет над заголовком Referer, заданным с помощью page.set_extra_http_headers().
-
timeoutfloat (необязательно)#Максимальное время выполнения операции в миллисекундах, по умолчанию 30 секунд. Передайте
0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_navigation_timeout(), browser_context.set_default_timeout(), page.set_default_navigation_timeout() или page.set_default_timeout(). -
wait_until"load" | "domcontentloaded" | "networkidle" | "commit" (необязательно)#Условие, при котором операция считается успешно завершённой, по умолчанию
load. Возможные события:'domcontentloaded'— операция считается завершённой при срабатывании событияDOMContentLoaded.'load'— операция считается завершённой при срабатывании событияload.'networkidle'— НЕ РЕКОМЕНДУЕТСЯ: операция считается завершённой, когда в течение как минимум500мс нет сетевых соединений. Не используйте этот режим для тестирования; вместо этого полагайтесь на веб‑ассерты.'commit'— операция считается завершённой, когда получен сетевой ответ и документ начал загружаться.
Возвращает
locator
Добавлено в: v1.14Метод возвращает локатор элемента, который можно использовать для выполнения действий на этой странице / в этом фрейме. Локатор разрешается до элемента непосредственно перед выполнением действия, поэтому серия действий с одним и тем же локатором фактически может быть выполнена над разными DOM-элементами. Это происходит, если структура DOM между этими действиями изменилась.
Использование
page.locator(selector)
page.locator(selector, **kwargs)
Аргументы
-
Селектор, используемый для поиска DOM-элемента.
-
Сужает результаты метода до элементов, которые содержат элементы, соответствующие этому относительному локатору. Например,
article, который содержитtext=Playwright, соответствует<article><div>Playwright</div></article>.Внутренний локатор должен быть относительным к внешнему локатору и запрашивается, начиная с совпадения внешнего локатора, а не от корня документа. Например, вы можете найти
content, который содержитdiv, в<article><content><div>Playwright</div></content></article>. Однако поискcontent, который содержитarticle div, завершится неудачей, потому что внутренний локатор должен быть относительным и не должен использовать элементы внеcontent.Обратите внимание, что внешний и внутренний локаторы должны принадлежать одному и тому же фрейму. Внутренний локатор не должен содержать FrameLocators.
-
has_notLocator (необязательно) Добавлено в: v1.33#Соответствует элементам, которые не содержат элемент, совпадающий с внутренним локатором. Внутренний локатор запрашивается относительно внешнего. Например,
article, который не содержитdiv, соответствует<article><span>Playwright</span></article>.Обратите внимание, что внешний и внутренний локаторы должны принадлежать одному и тому же фрейму. Внутренний локатор не должен содержать FrameLocators.
-
has_not_textstr | Pattern (необязательно) Добавлено в: v1.33#Соответствует элементам, которые не содержат указанный текст где-либо внутри, возможно, в дочернем или вложенном элементе. При передаче [string] поиск нечувствителен к регистру и ищет подстроку.
-
has_textstr | Pattern (необязательно)#Соответствует элементам, содержащим указанный текст где-либо внутри, возможно, в дочернем или вложенном элементе. При передаче [string] поиск нечувствителен к регистру и ищет подстроку. Например,
"Playwright"соответствует<article><div>Playwright</div></article>.
Возвращает
opener
Добавлено до v1.9Возвращает страницу-открыватель (opener) для всплывающих страниц и null для остальных. Если страница-открыватель уже была закрыта, также возвращается null.
Использование
page.opener()
Возвращает
page_errors
Добавлено в: v1.56Возвращает до (в настоящее время) 200 последних ошибок страницы. Подробнее см. page.on("pageerror").
Использование
page.page_errors()
Возвращает
pause
Добавлено в: v1.9Приостанавливает выполнение скрипта. Playwright прекращает выполнение скрипта и ждёт, пока пользователь либо нажмёт кнопку «Resume» в оверлее страницы, либо вызовет playwright.resume() в консоли DevTools.
Во время паузы пользователь может исследовать селекторы или выполнять ручные шаги. Возобновление продолжит выполнение исходного скрипта с места остановки.
Этот метод требует запуска Playwright в режиме с интерфейсом (headed mode) с ложным значением параметра headless.
Использование
page.pause()
Возвращает
pdf
Добавлено до v1.9Возвращает буфер PDF.
page.pdf() генерирует PDF страницы с использованием CSS media print. Чтобы сгенерировать PDF с media screen, вызовите page.emulate_media() перед вызовом page.pdf():
По умолчанию page.pdf() генерирует PDF с изменёнными цветами для печати. Используйте свойство -webkit-print-color-adjust, чтобы принудительно отрисовать точные цвета.
Использование
- Sync
- Async
# генерирует PDF с типом media "screen".
page.emulate_media(media="screen")
page.pdf(path="page.pdf")
# генерирует PDF с типом media "screen".
await page.emulate_media(media="screen")
await page.pdf(path="page.pdf")
Параметры width, height и margin принимают значения с указанием единиц измерения. Значения без указания единиц интерпретируются как пиксели.
Несколько примеров:
page.pdf({width: 100})— печать с шириной 100 пикселейpage.pdf({width: '100px'})— печать с шириной 100 пикселейpage.pdf({width: '10cm'})— печать с шириной 10 сантиметров
Все возможные единицы измерения:
px— пиксельin— дюймcm— сантиметрmm— миллиметр
Параметры format:
Letter: 8.5in x 11inLegal: 8.5in x 14inTabloid: 11in x 17inLedger: 17in x 11inA0: 33.1in x 46.8inA1: 23.4in x 33.1inA2: 16.54in x 23.4inA3: 11.7in x 16.54inA4: 8.27in x 11.7inA5: 5.83in x 8.27inA6: 4.13in x 5.83in
Разметка header_template и footer_template имеет следующие ограничения: > 1. Теги <script> внутри шаблонов не выполняются. > 2. Стили страницы не видны внутри шаблонов.
Аргументы
-
display_header_footerbool (необязательно)#Отображать колонтитулы. По умолчанию
false. -
footer_templatestr (необязательно)#HTML-шаблон нижнего колонтитула для печати. Должен использовать тот же формат, что и header_template.
-
Формат бумаги. Если задан, имеет приоритет над параметрами width и height. По умолчанию
'Letter'. -
header_templatestr (необязательно)#HTML-шаблон верхнего колонтитула для печати. Должен быть валидной HTML-разметкой со следующими классами для подстановки значений:
'date'— отформатированная дата печати'title'— заголовок документа'url'— адрес документа'pageNumber'— номер текущей страницы'totalPages'— общее количество страниц документа
-
heightstr | float (необязательно)#Высота бумаги, принимает значения с указанием единиц измерения.
-
landscapebool (необязательно)#Ориентация бумаги. По умолчанию
false. -
-
topstr | float (необязательно)Верхний отступ, принимает значения с указанием единиц. По умолчанию
0. -
rightstr | float (необязательно)Правый отступ, принимает значения с указанием единиц. По умолчанию
0. -
bottomstr | float (необязательно)Нижний отступ, принимает значения с указанием единиц. По умолчанию
0. -
leftstr | float (необязательно)Левый отступ, принимает значения с указанием единиц. По умолчанию
0.
Отступы страницы, по умолчанию отсутствуют.
-
-
outlinebool (необязательно) Добавлено в: v1.42#Встраивать ли структуру документа (outline) в PDF. По умолчанию
false. -
page_rangesstr (необязательно)#Диапазоны страниц для печати, например
'1-5, 8, 11-13'. По умолчанию пустая строка, что означает печать всех страниц. -
pathUnion[str, pathlib.Path] (необязательно)#Путь к файлу для сохранения PDF. Если путь относительный, он разрешается относительно текущего рабочего каталога. Если путь не указан, PDF не будет сохранён на диск.
-
prefer_css_page_sizebool (необязательно)#Отдавать приоритет CSS-правилу
@pageнад параметрами width, height или format. По умолчаниюfalse, при этом контент масштабируется под размер бумаги. -
print_backgroundbool (необязательно)#Печатать фоновые изображения. По умолчанию
false. -
Масштаб рендеринга страницы. По умолчанию
1. Значение должно быть в диапазоне от 0.1 до 2. -
taggedbool (необязательно) Добавлено в: v1.42#Генерировать ли тегированный (доступный) PDF. По умолчанию
false. -
widthstr | float (необязательно)#Ширина бумаги, принимает значения с указанием единиц измерения.
Возвращает
reload
Добавлено до v1.9Этот метод перезагружает текущую страницу так же, как если бы пользователь инициировал обновление браузера. Возвращает ответ основного ресурса. В случае нескольких редиректов навигация завершится ответом последнего редиректа.
Использование
page.reload()
page.reload(**kwargs)
Аргументы
-
timeoutfloat (необязательно)#Максимальное время выполнения операции в миллисекундах, по умолчанию 30 секунд. Передайте
0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_navigation_timeout(), browser_context.set_default_timeout(), page.set_default_navigation_timeout() или page.set_default_timeout(). -
wait_until"load" | "domcontentloaded" | "networkidle" | "commit" (необязательно)#Когда считать операцию завершённой. По умолчанию
load. Возможные события:'domcontentloaded'— операция считается завершённой при срабатывании событияDOMContentLoaded.'load'— операция считается завершённой при срабатывании событияload.'networkidle'— НЕ РЕКОМЕНДУЕТСЯ: операция считается завершённой, когда нет сетевых соединений в течение как минимум500мс. Не используйте для тестирования — вместо этого полагайтесь на веб-ассерты.'commit'— операция считается завершённой при получении сетевого ответа и начале загрузки документа.
Возвращает
remove_locator_handler
Добавлено в: v1.44Удаляет все обработчики локаторов, добавленные с помощью page.add_locator_handler(), для указанного локатора.
Использование
page.remove_locator_handler(locator)
Аргументы
-
Локатор, переданный в page.add_locator_handler().
Возвращает
request_gc
Добавлено в: v1.48Запрашивает выполнение сборки мусора на странице. Обратите внимание, что нет гарантии, что все недостижимые объекты будут собраны.
Это полезно для обнаружения утечек памяти. Например, если на странице есть большой объект 'suspect', который может утекать, вы можете проверить отсутствие утечки, используя WeakRef.
- Sync
- Async
# 1. На странице сохраняем WeakRef для объекта "suspect".
page.evaluate("globalThis.suspectWeakRef = new WeakRef(suspect)")
# 2. Запрашиваем сборку мусора.
page.request_gc()
# 3. Проверяем, что weak ref больше не указывает на исходный объект.
assert page.evaluate("!globalThis.suspectWeakRef.deref()")
# 1. На странице сохраняем WeakRef для объекта "suspect".
await page.evaluate("globalThis.suspectWeakRef = new WeakRef(suspect)")
# 2. Запрашиваем сборку мусора.
await page.request_gc()
# 3. Проверяем, что weak ref больше не указывает на исходный объект.
assert await page.evaluate("!globalThis.suspectWeakRef.deref()")
Использование
page.request_gc()
Возвращает
requests
Добавлено в: v1.56Возвращает до (в настоящее время) 100 последних сетевых запросов с этой страницы. Подробнее см. page.on("request").
Возвращённые запросы следует использовать сразу, иначе они могут быть собраны для предотвращения неограниченного роста памяти по мере поступления новых запросов. После сборки получение большей части информации о запросе становится невозможным.
Обратите внимание, что запросы, сообщаемые через page.on("request"), не собираются, поэтому существует компромисс между эффективным использованием памяти с page.requests() и объёмом доступной информации через page.on("request").
Использование
page.requests()
Возвращает
route
Добавлено до v1.9Маршрутизация предоставляет возможность изменять сетевые запросы, выполняемые страницей.
После включения маршрутизации каждый запрос, соответствующий шаблону URL, будет приостановлен, пока он не будет продолжен, выполнен (fulfilled) или отменён (aborted).
Обработчик будет вызван только для первого URL, если ответ является редиректом.
page.route() не перехватывает запросы, обработанные Service Worker. См. эту задачу. Рекомендуется отключать Service Worker при использовании перехвата запросов, установив service_workers в 'block'.
page.route() не перехватывает первый запрос всплывающей страницы. Используйте browser_context.route().
Использование
Пример наивного обработчика, который отменяет все запросы изображений:
- Sync
- Async
page = browser.new_page()
page.route("**/*.{png,jpg,jpeg}", lambda route: route.abort())
page.goto("https://example.com")
browser.close()
page = await browser.new_page()
await page.route("**/*.{png,jpg,jpeg}", lambda route: route.abort())
await page.goto("https://example.com")
await browser.close()
Или тот же пример с использованием регулярного выражения:
- Sync
- Async
page = browser.new_page()
page.route(re.compile(r"(\.png$)|(\.jpg$)"), lambda route: route.abort())
page.goto("https://example.com")
browser.close()
page = await browser.new_page()
await page.route(re.compile(r"(\.png$)|(\.jpg$)"), lambda route: route.abort())
await page.goto("https://example.com")
await browser.close()
Можно анализировать запрос, чтобы принять решение о действии маршрута. Например, подменять все запросы, содержащие определённые POST-данные, и пропускать остальные без изменений:
- Sync
- Async
def handle_route(route: Route):
if ("my-string" in route.request.post_data):
route.fulfill(body="mocked-data")
else:
route.continue_()
page.route("/api/**", handle_route)
async def handle_route(route: Route):
if ("my-string" in route.request.post_data):
await route.fulfill(body="mocked-data")
else:
await route.continue_()
await page.route("/api/**", handle_route)
Маршруты страницы имеют приоритет над маршрутами контекста браузера (настроенными с помощью browser_context.route()), если запрос соответствует обоим обработчикам.
Чтобы удалить маршрут вместе с обработчиком, используйте page.unroute().
Включение маршрутизации отключает HTTP-кэш.
Аргументы
-
urlstr | Pattern | Callable[URL]:bool#Glob-шаблон, регулярное выражение или предикат, принимающий URL для сопоставления при маршрутизации. Если в параметрах контекста задан base_url и переданный URL — строка, не начинающаяся с
*, он разрешается с помощью конструктораnew URL(). -
handlerCallable[Route, Request]:Promise[Any] | Any#Функция-обработчик для маршрутизации запроса.
-
timesint (необязательно) Добавлено в: v1.15#Сколько раз должен использоваться маршрут. По умолчанию используется каждый раз.
Возвращает
route_from_har
Добавлено в: v1.23Если указано, сетевые запросы, выполняемые на странице, будут обслуживаться из HAR-файла. Подробнее см. Воспроизведение из HAR.
Playwright не обслуживает из HAR-файла запросы, перехваченные Service Worker. См. эту задачу. Рекомендуется отключать Service Worker при использовании перехвата запросов, установив service_workers в 'block'.
Использование
page.route_from_har(har)
page.route_from_har(har, **kwargs)
Аргументы
-
harUnion[str, pathlib.Path]#Путь к HAR-файлу с заранее записанными сетевыми данными. Если путь относительный, он разрешается относительно текущего рабочего каталога.
-
not_found"abort" | "fallback" (необязательно)#- При значении
'abort'любой запрос, отсутствующий в HAR-файле, будет отменён. - При значении
'fallback'отсутствующие запросы будут отправлены в сеть.
По умолчанию
'abort'. - При значении
-
Если указано, обновляет переданный HAR фактической сетевой информацией вместо обслуживания из файла. Файл записывается на диск при вызове browser_context.close().
-
update_content"embed" | "attach" (необязательно) Добавлено в: v1.32#Необязательная настройка управления контентом ресурсов. При значении
attachресурсы сохраняются как отдельные файлы или записи в ZIP-архиве. При значенииembedконтент сохраняется непосредственно внутри HAR-файла. -
update_mode"full" | "minimal" (необязательно) Добавлено в: v1.32#При значении
minimalзаписывается только информация, необходимая для маршрутизации из HAR. Это исключает размеры, тайминги, страницы, cookies, безопасность и другие данные HAR, которые не используются при воспроизведении. По умолчаниюminimal. -
urlstr | Pattern (необязательно)#Glob-шаблон, регулярное выражение или предикат для сопоставления URL запроса. Только запросы с URL, соответствующим шаблону, будут обслуживаться из HAR-файла. Если не указано, все запросы обслуживаются из HAR-файла.
Возвращает
route_web_socket
Добавлено в: v1.48Этот метод позволяет модифицировать WebSocket‑соединения, которые создаются страницей.
Обратите внимание, что маршрутизироваться будут только те WebSocket, которые созданы после вызова этого метода. Рекомендуется вызывать этот метод до навигации по странице.
Использование
Ниже приведён пример простого мока, который отвечает на одно сообщение. См. WebSocketRoute для получения дополнительных сведений и примеров.
- Sync
- Async
def message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
if message == "request":
ws.send("response")
def handler(ws: WebSocketRoute):
ws.on_message(lambda message: message_handler(ws, message))
page.route_web_socket("/ws", handler)
def message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
if message == "request":
ws.send("response")
def handler(ws: WebSocketRoute):
ws.on_message(lambda message: message_handler(ws, message))
await page.route_web_socket("/ws", handler)
Аргументы
-
urlstr | Pattern | Callable[URL]:bool#Только WebSocket‑соединения с URL, соответствующим этому шаблону, будут маршрутизироваться. Строковый шаблон может быть относительным к параметру контекста base_url.
-
handlerCallable[WebSocketRoute]:Promise[Any] | Any#Функция-обработчик для маршрутизации WebSocket.
Возвращает
screenshot
Добавлено до v1.9Возвращает буфер с полученным снимком экрана.
Использование
page.screenshot()
page.screenshot(**kwargs)
Аргументы
-
animations"disabled" | "allow" (необязательно)#При значении
"disabled"останавливаются CSS‑анимации, CSS‑переходы и Web Animations. Анимации обрабатываются по‑разному в зависимости от их длительности:- конечные анимации перематываются до завершения, поэтому будет сгенерировано событие
transitionend; - бесконечные анимации отменяются и переводятся в начальное состояние, а затем возобновляются после снятия скриншота.
По умолчанию используется
"allow", что оставляет анимации без изменений. - конечные анимации перематываются до завершения, поэтому будет сгенерировано событие
-
caret"hide" | "initial" (необязательно)#При значении
"hide"на скриншоте будет скрыт текстовый курсор. При значении"initial"поведение курсора не изменяется. По умолчанию используется"hide". -
-
xfloatx‑координата левого верхнего угла области обрезки
-
yfloaty‑координата левого верхнего угла области обрезки
-
widthfloatширина области обрезки
-
heightfloatвысота области обрезки
Объект, задающий обрезку результирующего изображения.
-
-
full_pagebool (необязательно)#Если установлено в
true, делается снимок всей прокручиваемой страницы, а не только текущего видимого viewport. По умолчаниюfalse. -
maskList[Locator] (необязательно)#Указывает локаторы элементов, которые должны быть замаскированы при создании скриншота. Замаскированные элементы будут перекрыты розовым прямоугольником
#FF00FF(настраивается с помощью mask_color), полностью покрывающим их ограничивающий прямоугольник. Маска также применяется к невидимым элементам; см. Соответствие только видимым элементам, чтобы отключить это поведение. -
mask_colorstr (необязательно) Добавлено в: v1.35#Цвет перекрывающего прямоугольника для замаскированных элементов в CSS‑формате цвета. Цвет по умолчанию — розовый
#FF00FF. -
omit_backgroundbool (необязательно)#Скрывает стандартный белый фон и позволяет получать скриншоты с прозрачностью. Не применяется к изображениям
jpeg. По умолчаниюfalse. -
pathUnion[str, pathlib.Path] (необязательно)#Путь к файлу, в который будет сохранено изображение. Тип скриншота определяется по расширению файла. Если path является относительным, он разрешается относительно текущего рабочего каталога. Если путь не указан, изображение не будет сохранено на диск.
-
Качество изображения в диапазоне 0–100. Не применяется к изображениям
png. -
scale"css" | "device" (необязательно)#При значении
"css"скриншот будет иметь один пиксель на каждый CSS‑пиксель страницы. Для устройств с высоким DPI это позволяет уменьшить размер скриншотов. Использование"device"создаёт один пиксель на каждый пиксель устройства, поэтому скриншоты на high‑DPI устройствах будут вдвое больше или даже больше.По умолчанию используется
"device". -
stylestr (необязательно) Добавлено в: v1.41#Текст таблицы стилей, которая применяется во время создания скриншота. Здесь можно скрыть динамические элементы, сделать элементы невидимыми или изменить их свойства, чтобы получить воспроизводимые скриншоты. Эта таблица стилей проникает в Shadow DOM и применяется к внутренним фреймам.
-
timeoutfloat (необязательно)#Максимальное время в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout(). -
type"png" | "jpeg" (необязательно)#Тип скриншота. По умолчанию
png.
Возвращает
set_content
Добавлено до v1.9Этот метод внутри себя вызывает document.write(), наследуя все его особенности и поведение.
Использование
page.set_content(html)
page.set_content(html, **kwargs)
Аргументы
-
HTML‑разметка, которая будет назначена странице.
-
timeoutfloat (необязательно)#Максимальное время выполнения операции в миллисекундах, по умолчанию 30 секунд. Передайте
0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_navigation_timeout(), browser_context.set_default_timeout(), page.set_default_navigation_timeout() или page.set_default_timeout(). -
wait_until"load" | "domcontentloaded" | "networkidle" | "commit" (необязательно)#Когда считать операцию успешно завершённой. По умолчанию
load. Возможные события:'domcontentloaded'— считать операцию завершённой, когда срабатывает событиеDOMContentLoaded;'load'— считать операцию завершённой, когда срабатывает событиеload;'networkidle'— НЕ РЕКОМЕНДУЕТСЯ считать операцию завершённой, когда в течение как минимум500мс отсутствуют сетевые соединения. Не используйте этот метод для тестирования — вместо этого полагайтесь на веб‑проверки;'commit'— считать операцию завершённой, когда получен сетевой ответ и документ начал загружаться.
Возвращает
set_default_navigation_timeout
Добавлено до v1.9Эта настройка изменяет максимальное время навигации по умолчанию для следующих методов и связанных с ними сокращений:
- page.go_back()
- page.go_forward()
- page.goto()
- page.reload()
- page.set_content()
- page.expect_navigation()
- page.wait_for_url()
Использование
page.set_default_navigation_timeout(timeout)
Аргументы
set_default_timeout
Добавлено до v1.9Эта настройка изменяет максимальное время по умолчанию для всех методов, принимающих параметр timeout.
page.set_default_navigation_timeout() имеет приоритет над page.set_default_timeout().
Использование
page.set_default_timeout(timeout)
Аргументы
set_extra_http_headers
Добавлено до v1.9Дополнительные HTTP‑заголовки будут отправляться с каждым запросом, который инициирует страница.
page.set_extra_http_headers() не гарантирует порядок заголовков в исходящих запросах.
Использование
page.set_extra_http_headers(headers)
Аргументы
-
Объект, содержащий дополнительные HTTP‑заголовки, которые будут отправляться с каждым запросом. Все значения заголовков должны быть строками.
Возвращает
set_viewport_size
Добавлено до v1.9В случае нескольких страниц в одном браузере каждая страница может иметь собственный размер viewport. Однако browser.new_context() позволяет задать размер viewport (и другие параметры) сразу для всех страниц в контексте.
page.set_viewport_size() изменяет размер страницы. Многие сайты не ожидают, что размеры «телефона» будут меняться, поэтому рекомендуется задавать размер viewport до навигации на страницу. page.set_viewport_size() также сбрасывает размер screen; используйте browser.new_context() с параметрами screen и viewport, если вам нужен более точный контроль этих свойств.
Использование
- Sync
- Async
page = browser.new_page()
page.set_viewport_size({"width": 640, "height": 480})
page.goto("https://example.com")
page = await browser.new_page()
await page.set_viewport_size({"width": 640, "height": 480})
await page.goto("https://example.com")
Аргументы
Возвращает
title
Добавлено до v1.9Возвращает заголовок страницы.
Использование
page.title()
Возвращает
unroute
Добавлено до v1.9Удаляет маршрут, созданный с помощью page.route(). Если handler не указан, удаляются все маршруты для указанного url.
Использование
page.unroute(url)
page.unroute(url, **kwargs)
Аргументы
-
urlstr | Pattern | Callable[URL]:bool#Glob‑шаблон, регулярное выражение или предикат, принимающий URL, для сопоставления при маршрутизации.
-
handlerCallable[Route, Request]:Promise[Any] | Any (необязательно)#Необязательная функция‑обработчик для маршрутизации запроса.
Возвращает
unroute_all
Добавлено в: v1.41Удаляет все маршруты, созданные с помощью page.route() и page.route_from_har().
Использование
page.unroute_all()
page.unroute_all(**kwargs)
Аргументы
-
behavior"wait" | "ignoreErrors" | "default" (необязательно)#Определяет, нужно ли ждать завершения уже выполняющихся обработчиков и как обрабатывать возникающие в них ошибки:
'default'— не ждать завершения текущих вызовов обработчиков (если они есть); если обработчик после удаления маршрута выбросит ошибку, это может привести к необработанному исключению;'wait'— дождаться завершения текущих вызовов обработчиков (если они есть);'ignoreErrors'— не ждать завершения текущих вызовов обработчиков (если они есть); все ошибки, выброшенные обработчиками после удаления маршрута, будут молча перехвачены.
Возвращает
wait_for_event
Добавлено до v1.9В большинстве случаев следует использовать page.expect_event().
Ожидает срабатывания указанного event. Если передан предикат, значение события передаётся в функцию predicate, и ожидание продолжается до тех пор, пока predicate(event) не вернёт истинное значение. Будет выброшена ошибка, если страница будет закрыта до срабатывания события.
Использование
page.wait_for_event(event)
page.wait_for_event(event, **kwargs)
Аргументы
-
Имя события — такое же, какое обычно передаётся в
*.on(event). -
predicateCallable (необязательно)#Получает данные события и должна вернуть истинное значение, когда ожидание должно завершиться.
-
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью browser_context.set_default_timeout().
Возвращает
wait_for_function
Добавлено до v1.9Возвращает управление, когда expression возвращает истинное значение. Метод резолвится в JSHandle этого истинного значения.
Использование
Метод page.wait_for_function() можно использовать для отслеживания изменения размера viewport:
- Sync
- Async
from playwright.sync_api import sync_playwright, Playwright
def run(playwright: Playwright):
webkit = playwright.webkit
browser = webkit.launch()
page = browser.new_page()
page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
page.wait_for_function("() => window.x > 0")
browser.close()
with sync_playwright() as playwright:
run(playwright)
import asyncio
from playwright.async_api import async_playwright, Playwright
async def run(playwright: Playwright):
webkit = playwright.webkit
browser = await webkit.launch()
page = await browser.new_page()
await page.evaluate("window.x = 0; setTimeout(() => { window.x = 100 }, 1000);")
await page.wait_for_function("() => window.x > 0")
await browser.close()
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Чтобы передать аргумент в предикат функции page.wait_for_function():
- Sync
- Async
selector = ".foo"
page.wait_for_function("selector => !!document.querySelector(selector)", selector)
selector = ".foo"
await page.wait_for_function("selector => !!document.querySelector(selector)", selector)
Аргументы
-
JavaScript‑выражение, которое будет выполнено в контексте браузера. Если выражение вычисляется в функцию, она будет автоматически вызвана.
-
argEvaluationArgument (необязательно)#Необязательный аргумент, передаваемый в expression.
-
pollingfloat | "raf" (необязательно)#Если значение polling равно
'raf', то expression будет постоянно выполняться в колбэкеrequestAnimationFrame. Если polling является числом, оно трактуется как интервал в миллисекундах, с которым будет выполняться функция. По умолчанию используетсяraf. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
wait_for_load_state
Добавлено до v1.9Возвращает управление, когда достигнуто требуемое состояние загрузки.
Метод завершается, когда страница достигает требуемого состояния загрузки — по умолчанию load. Навигация должна быть зафиксирована (committed) на момент вызова этого метода. Если текущий документ уже достиг требуемого состояния, метод завершается немедленно.
В большинстве случаев этот метод не требуется, так как Playwright автоматически ожидает перед каждым действием.
Использование
- Sync
- Async
page.get_by_role("button").click() # клик инициирует навигацию
page.wait_for_load_state() # промис завершается после события "load"
await page.get_by_role("button").click() # клик инициирует навигацию
await page.wait_for_load_state() # промис завершается после события "load"
- Sync
- Async
with page.expect_popup() as page_info:
page.get_by_role("button").click() # click triggers a popup.
popup = page_info.value
# Wait for the "DOMContentLoaded" event.
popup.wait_for_load_state("domcontentloaded")
print(popup.title()) # popup is ready to use.
async with page.expect_popup() as page_info:
await page.get_by_role("button").click() # click triggers a popup.
popup = await page_info.value
# Wait for the "DOMContentLoaded" event.
await popup.wait_for_load_state("domcontentloaded")
print(await popup.title()) # popup is ready to use.
Аргументы
-
state"load" | "domcontentloaded" | "networkidle" (опционально)#Необязательное состояние загрузки, ожидание которого нужно выполнить; по умолчанию
load. Если указанное состояние уже было достигнуто во время загрузки текущего документа, метод завершается сразу. Возможные значения:'load'— дождаться срабатывания событияload.'domcontentloaded'— дождаться срабатывания событияDOMContentLoaded.'networkidle'— НЕ РЕКОМЕНДУЕТСЯ ждать, пока в течение как минимум500мс не останется сетевых соединений. Не используйте этот метод для тестирования; вместо этого полагайтесь на веб-утверждения (assertions), чтобы оценить готовность.
-
Максимальное время выполнения операции в миллисекундах; по умолчанию 30 секунд. Передайте
0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_navigation_timeout(), browser_context.set_default_timeout(), page.set_default_navigation_timeout() или page.set_default_timeout().
Возвращает
wait_for_url
Добавлено в: v1.11Ожидает, пока главный фрейм выполнит навигацию к указанному URL.
Использование
- Sync
- Async
page.click("a.delayed-navigation") # клик по ссылке косвенно вызовет навигацию
page.wait_for_url("**/target.html")
await page.click("a.delayed-navigation") # клик по ссылке косвенно вызовет навигацию
await page.wait_for_url("**/target.html")
Аргументы
-
urlstr | Pattern | Callable[URL]:bool#Glob‑шаблон, регулярное выражение или предикат, принимающий URL, для сопоставления во время ожидания навигации. Обратите внимание: если параметр — строка без wildcard‑символов, метод будет ожидать навигацию к URL, который в точности равен этой строке.
-
Максимальное время выполнения операции в миллисекундах. По умолчанию — 30 секунд. Передайте
0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_navigation_timeout(), browser_context.set_default_timeout(), page.set_default_navigation_timeout() или page.set_default_timeout(). -
wait_until"load" | "domcontentloaded" | "networkidle" | "commit" (опционально)#Указывает, когда считать операцию успешно завершённой. По умолчанию —
load. Возможные события:'domcontentloaded'— считать операцию завершённой при срабатывании событияDOMContentLoaded.'load'— считать операцию завершённой при срабатывании событияload.'networkidle'— НЕ РЕКОМЕНДУЕТСЯ считать операцию завершённой, когда отсутствуют сетевые соединения как минимум500мс. Не используйте этот метод для тестирования, вместо этого полагайтесь на веб‑проверки.'commit'— считать операцию завершённой, когда получен сетевой ответ и документ начал загружаться.
Возвращает
Свойства
clock
Добавлено в: v1.45Playwright предоставляет возможность подменять часы и ход времени.
Использование
page.clock
Тип
context
Добавлено до v1.9Возвращает контекст браузера, к которому принадлежит страница.
Использование
page.context
Возвращает
frames
Добавлено до v1.9Массив всех фреймов, прикреплённых к странице.
Использование
page.frames
Возвращает
is_closed
Добавлено до v1.9Указывает, что страница была закрыта.
Использование
page.is_closed()
Возвращает
keyboard
Добавлено до v1.9Использование
page.keyboard
Тип
main_frame
Добавлено до v1.9Главный фрейм страницы. У страницы всегда есть главный фрейм, который сохраняется при навигациях.
Использование
page.main_frame
Возвращает
mouse
Добавлено до v1.9Использование
page.mouse
Тип
request
Добавлено в: v1.16Вспомогательный API для тестирования запросов, связанный с этой страницей. Метод возвращает тот же экземпляр, что и browser_context.request в контексте страницы. Подробнее см. browser_context.request.
Использование
page.request
Тип
touchscreen
Добавлено до v1.9Использование
page.touchscreen
Тип
url
Добавлено до v1.9Использование
page.url
Возвращает
video
Добавлено до v1.9Объект видео, связанный с этой страницей.
Использование
page.video
Возвращает
viewport_size
Добавлено до v1.9Использование
page.viewport_size
Возвращает
workers
Добавлено до v1.9Метод возвращает все выделенные WebWorkers, связанные со страницей.
ServiceWorker’ы сюда не входят
Использование
page.workers
Возвращает
События
on("close")
Добавлено до v1.9Испускается, когда страница закрывается.
Использование
page.on("close", handler)
Данные события
on("console")
Добавлено до v1.9Испускается, когда JavaScript на странице вызывает один из методов console API, например console.log или console.dir.
Аргументы, переданные в console.log, доступны в аргументе обработчика события ConsoleMessage.
Использование
- Sync
- Async
def print_args(msg):
for arg in msg.args:
print(arg.json_value())
page.on("console", print_args)
page.evaluate("console.log('hello', 5, { foo: 'bar' })")
async def print_args(msg):
values = []
for arg in msg.args:
values.append(await arg.json_value())
print(values)
page.on("console", print_args)
await page.evaluate("console.log('hello', 5, { foo: 'bar' })")
Данные события
on("crash")
Добавлено до v1.9Испускается при аварийном завершении страницы. Страницы браузера могут падать, если пытаются выделить слишком много памяти. После сбоя страницы текущие и последующие операции будут выбрасывать исключения.
Наиболее распространённый способ обработки сбоев — перехват исключения:
- Sync
- Async
try:
# сбой может произойти во время клика.
page.click("button")
# или во время ожидания события.
page.wait_for_event("popup")
except Error as e:
pass
# при сбое страницы сообщение исключения содержит "crash".
try:
# сбой может произойти во время клика.
await page.click("button")
# или во время ожидания события.
await page.wait_for_event("popup")
except Error as e:
pass
# при сбое страницы сообщение исключения содержит "crash".
Использование
page.on("crash", handler)
Данные события
on("dialog")
Добавлено до v1.9Испускается при появлении JavaScript‑диалога, такого как alert, prompt, confirm или beforeunload. Обработчик обязан либо вызвать dialog.accept(), либо dialog.dismiss() — иначе страница зависнет в ожидании диалога, и такие действия, как клик, никогда не завершатся.
Использование
page.on("dialog", lambda dialog: dialog.accept())
Если отсутствуют обработчики page.on("dialog") или browser_context.on("dialog"), все диалоги автоматически отклоняются.
Данные события
on("domcontentloaded")
Добавлено в: v1.9Испускается при отправке JavaScript‑события DOMContentLoaded.
Использование
page.on("domcontentloaded", handler)
Данные события
on("download")
Добавлено до v1.9Испускается при начале загрузки вложения. Пользователь может выполнять базовые файловые операции с загруженным содержимым через переданный экземпляр Download.
Использование
page.on("download", handler)
Данные события
on("filechooser")
Добавлено в: v1.9Испускается, когда должен появиться диалог выбора файла, например после клика по <input type=file>. Playwright может обработать его, установив файлы для загрузки с помощью file_chooser.set_files().
page.on("filechooser", lambda file_chooser: file_chooser.set_files("/tmp/myfile.pdf"))
Использование
page.on("filechooser", handler)
Данные события
on("frameattached")
Добавлено в: v1.9Испускается при присоединении фрейма.
Использование
page.on("frameattached", handler)
Данные события
on("framedetached")
Добавлено в: v1.9Срабатывает, когда фрейм был отсоединён.
Использование
page.on("framedetached", handler)
Данные события
on("framenavigated")
Добавлено в: v1.9Срабатывает, когда фрейм переходит на новый URL.
Использование
page.on("framenavigated", handler)
Данные события
on("load")
Добавлено до v1.9Срабатывает, когда происходит JavaScript‑событие load.
Использование
page.on("load", handler)
Данные события
on("pageerror")
Добавлено в: v1.9Срабатывает, когда на странице происходит неперехваченное исключение.
- Sync
- Async
# Логируем все неперехваченные ошибки в терминал
page.on("pageerror", lambda exc: print(f"uncaught exception: {exc}"))
# Переходим на страницу с исключением.
page.goto("data:text/html,<script>throw new Error('test')</script>")
# Логируем все неперехваченные ошибки в терминал
page.on("pageerror", lambda exc: print(f"uncaught exception: {exc}"))
# Переходим на страницу с исключением.
await page.goto("data:text/html,<script>throw new Error('test')</script>")
Использование
page.on("pageerror", handler)
Данные события
on("popup")
Добавлено до v1.9Срабатывает, когда страница открывает новую вкладку или окно. Это событие генерируется в дополнение к browser_context.on("page"), но только для всплывающих окон, относящихся к данной странице.
Самый ранний момент, когда страница доступна, — это момент, когда она перешла на начальный URL. Например, при открытии popup с помощью window.open('http://example.com') это событие будет сгенерировано, когда сетевой запрос к "http://example.com" завершится и его ответ начнёт загружаться во всплывающем окне. Если вы хотите маршрутизировать или отслеживать этот сетевой запрос, используйте browser_context.route() и browser_context.on("request") вместо аналогичных методов на уровне Page.
- Sync
- Async
with page.expect_event("popup") as page_info:
page.get_by_text("open the popup").click()
popup = page_info.value
print(popup.evaluate("location.href"))
async with page.expect_event("popup") as page_info:
await page.get_by_text("open the popup").click()
popup = await page_info.value
print(await popup.evaluate("location.href"))
Используйте page.wait_for_load_state(), чтобы дождаться, пока страница достигнет определённого состояния загрузки (в большинстве случаев это не требуется).
Использование
page.on("popup", handler)
Данные события
on("request")
Добавлено до v1.9Срабатывает, когда страница отправляет запрос. Объект request доступен только для чтения. Чтобы перехватывать и изменять запросы, используйте page.route() или browser_context.route().
Использование
page.on("request", handler)
Данные события
on("requestfailed")
Добавлено в: v1.9Срабатывает, когда запрос завершается неудачно, например из‑за тайм‑аута.
page.on("requestfailed", lambda request: print(request.url + " " + request.failure.error_text))
HTTP‑ответы с ошибками, такие как 404 или 503, с точки зрения HTTP считаются успешными ответами, поэтому запрос завершится событием page.on("requestfinished"), а не page.on("requestfailed"). Запрос считается неудачным только в том случае, если клиент не может получить HTTP‑ответ от сервера, например из‑за сетевой ошибки net::ERR_FAILED.
Использование
page.on("requestfailed", handler)
Данные события
on("requestfinished")
Добавлено в: v1.9Срабатывает, когда запрос успешно завершается после загрузки тела ответа. Для успешного ответа последовательность событий выглядит так: request, response, requestfinished.
Использование
page.on("requestfinished", handler)
Данные события
on("response")
Добавлено до v1.9Срабатывает, когда для запроса получены статус и заголовки response. Для успешного ответа последовательность событий выглядит так: request, response, requestfinished.
Использование
page.on("response", handler)
Данные события
on("websocket")
Добавлено в: v1.9Срабатывает, когда отправляется запрос WebSocket.
Использование
page.on("websocket", handler)
Данные события
on("worker")
Добавлено до v1.9Срабатывает, когда страница создаёт выделенный WebWorker.
Использование
page.on("worker", handler)
Данные события
Устаревшее
check
Добавлено до v1.9Используйте локатор‑ориентированный метод locator.check(). Подробнее см. про локаторы.
Этот метод отмечает элемент, соответствующий selector, выполняя следующие шаги:
- Находит элемент, соответствующий selector. Если такого элемента нет, ожидает, пока соответствующий элемент будет добавлен в DOM.
- Убеждается, что найденный элемент является чекбоксом или радиокнопкой. Если нет — метод выбрасывает исключение. Если элемент уже отмечен, метод сразу возвращается.
- Выполняет проверки actionability для найденного элемента, если не установлен параметр force. Если элемент отсоединяется во время проверок, всё действие повторяется.
- При необходимости прокручивает элемент в область видимости.
- Использует page.mouse, чтобы кликнуть по центру элемента.
- Убеждается, что элемент теперь отмечен. Если нет — метод выбрасывает исключение.
Если все шаги не завершились в течение указанного timeout, метод выбрасывает TimeoutError. Передача тайм‑аута 0 отключает ограничение по времени.
Использование
page.check(selector)
page.check(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
Нужно ли обходить проверки actionability. По умолчанию
false. -
no_wait_afterbool (опционально)#УстарелоЭта опция не влияет на поведение.
Эта опция не влияет на поведение.
-
positionDict (опционально) Добавлено в: v1.11#Точка относительно верхнего левого угла padding-box элемента. Если не указана, используется какая-то видимая точка элемента.
-
strictbool (опционально) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор однозначно соответствовал одному элементу. Если селектор соответствует более чем одному элементу, вызов выбрасывает исключение. -
Максимальное время в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout(). -
trialbool (опционально) Добавлено в: v1.11#Если задано, метод выполняет только проверки actionability и пропускает само действие. По умолчанию
false. Полезно, чтобы дождаться готовности элемента к действию, не выполняя его.
Возвращает
click
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов: locator.click(). Подробнее о локаторах.
Этот метод кликает по элементу, соответствующему selector, выполняя следующие шаги:
- Находит элемент, соответствующий selector. Если такого элемента нет, ждёт, пока соответствующий элемент будет добавлен в DOM.
- Ожидает прохождения проверок actionability для найденного элемента, если не задана опция force. Если во время проверок элемент будет удалён из DOM, всё действие будет повторено.
- При необходимости прокручивает страницу так, чтобы элемент оказался в области видимости.
- Использует page.mouse, чтобы кликнуть по центру элемента или по указанной position.
- Ожидает, пока инициированные переходы (navigation) завершатся успехом или ошибкой, если не задана опция no_wait_after.
Если все шаги в совокупности не завершились за указанное время timeout, метод выбрасывает TimeoutError. Передайте нулевой таймаут, чтобы отключить его.
Использование
page.click(selector)
page.click(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
button"left" | "right" | "middle" (опционально)#По умолчанию
left. -
click_countint (опционально)#По умолчанию 1. См. UIEvent.detail.
-
Время ожидания между
mousedownиmouseupв миллисекундах. По умолчанию 0. -
Нужно ли обходить проверки actionability. По умолчанию
false. -
modifiersList["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (опционально)#Модификаторы клавиш, которые нужно зажать. Гарантирует, что во время операции будут нажаты только эти модификаторы, а затем восстанавливает прежнее состояние модификаторов. Если не указано, используются модификаторы, нажатые в данный момент. "ControlOrMeta" соответствует "Control" в Windows и Linux и "Meta" в macOS.
-
no_wait_afterbool (опционально)#УстарелоВ будущем значение этой опции по умолчанию станет
true.Действия, которые инициируют переходы (navigation), ждут, пока эти переходы произойдут и страницы начнут загружаться. Вы можете отказаться от ожидания, установив этот флаг. Обычно он нужен только в исключительных случаях, например при переходе на недоступные страницы. По умолчанию
false. -
Точка относительно верхнего левого угла padding-box элемента. Если не указана, используется какая-то видимая точка элемента.
-
strictbool (опционально) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор однозначно соответствовал одному элементу. Если селектор соответствует более чем одному элементу, вызов выбрасывает исключение. -
Максимальное время в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout(). -
trialbool (опционально) Добавлено в: v1.11#Если задано, метод выполняет только проверки actionability и пропускает само действие. По умолчанию
false. Полезно, чтобы дождаться готовности элемента к действию, не выполняя его. Обратите внимание: модификаторы клавиатурыmodifiersбудут нажаты независимо отtrial, чтобы можно было тестировать элементы, которые видимы только при нажатых этих клавишах.
Возвращает
dblclick
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов: locator.dblclick(). Подробнее о локаторах.
Этот метод делает двойной клик по элементу, соответствующему selector, выполняя следующие шаги:
- Находит элемент, соответствующий selector. Если такого элемента нет, ждёт, пока соответствующий элемент будет добавлен в DOM.
- Ожидает прохождения проверок actionability для найденного элемента, если не задана опция force. Если во время проверок элемент будет удалён из DOM, всё действие будет повторено.
- При необходимости прокручивает страницу так, чтобы элемент оказался в области видимости.
- Использует page.mouse, чтобы сделать двойной клик по центру элемента или по указанной position.
Если все шаги в совокупности не завершились за указанное время timeout, метод выбрасывает TimeoutError. Передайте нулевой таймаут, чтобы отключить его.
page.dblclick() отправляет два события click и одно событие dblclick.
Использование
page.dblclick(selector)
page.dblclick(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
button"left" | "right" | "middle" (опционально)#По умолчанию
left. -
Время ожидания между
mousedownиmouseupв миллисекундах. По умолчанию 0. -
Нужно ли обходить проверки actionability. По умолчанию
false. -
modifiersList["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (опционально)#Модификаторы клавиш, которые нужно зажать. Гарантирует, что во время операции будут нажаты только эти модификаторы, а затем восстанавливает прежнее состояние модификаторов. Если не указано, используются модификаторы, нажатые в данный момент. "ControlOrMeta" соответствует "Control" в Windows и Linux и "Meta" в macOS.
-
no_wait_afterbool (опционально)#УстарелоЭта опция не влияет на поведение.
Эта опция не влияет на поведение.
-
Точка относительно верхнего левого угла padding-box элемента. Если не указана, используется какая-то видимая точка элемента.
-
strictbool (опционально) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор однозначно соответствовал одному элементу. Если селектор соответствует более чем одному элементу, вызов выбрасывает исключение. -
Максимальное время в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout(). -
trialbool (опционально) Добавлено в: v1.11#Если задано, метод выполняет только проверки actionability и пропускает само действие. По умолчанию
false. Полезно, чтобы дождаться готовности элемента к действию, не выполняя его. Обратите внимание: модификаторы клавиатурыmodifiersбудут нажаты независимо отtrial, чтобы можно было тестировать элементы, которые видимы только при нажатых этих клавишах.
Возвращает
dispatch_event
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов: locator.dispatch_event(). Подробнее о локаторах.
Фрагмент ниже отправляет событие click элементу. Независимо от того, видим элемент или нет, событие click будет отправлено. Это эквивалентно вызову element.click().
Использование
- Sync
- Async
page.dispatch_event("button#submit", "click")
await page.dispatch_event("button#submit", "click")
Внутри метод создаёт экземпляр события на основе указанного type, инициализирует его свойствами event_init и отправляет его на элемент. По умолчанию события являются composed, cancelable и всплывают (bubble).
Поскольку event_init зависит от конкретного события, список начальных свойств смотрите в документации по событиям:
- DeviceMotionEvent
- DeviceOrientationEvent
- DragEvent
- Event
- FocusEvent
- KeyboardEvent
- MouseEvent
- PointerEvent
- TouchEvent
- WheelEvent
Также вы можете указать JSHandle в качестве значения свойства, если хотите передать в событие «живые» объекты:
- Sync
- Async
# обратите внимание: создать data_transfer можно только в Chromium и Firefox
data_transfer = page.evaluate_handle("new DataTransfer()")
page.dispatch_event("#source", "dragstart", { "dataTransfer": data_transfer })
# обратите внимание: создать data_transfer можно только в Chromium и Firefox
data_transfer = await page.evaluate_handle("new DataTransfer()")
await page.dispatch_event("#source", "dragstart", { "dataTransfer": data_transfer })
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
Тип DOM‑события:
"click","dragstart"и т. д. -
event_initEvaluationArgument (необязательно)#Необязательные свойства инициализации события, специфичные для конкретного события.
-
strictbool (необязательно) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
eval_on_selector
Добавлено в: v1.9Этот метод не ожидает, пока элемент пройдет проверки пригодности к действию (actionability), и поэтому может приводить к нестабильным тестам. Вместо этого используйте locator.evaluate(), другие вспомогательные методы Locator или web-first ассерты.
Метод находит элемент на странице, соответствующий указанному селектору, и передает его в качестве первого аргумента в expression. Если ни один элемент не соответствует селектору, метод выбрасывает ошибку. Возвращает значение expression.
Если expression возвращает Promise, то page.eval_on_selector() будет ожидать его разрешения и вернет результат.
Использование
- Sync
- Async
search_value = page.eval_on_selector("#search", "el => el.value")
preload_href = page.eval_on_selector("link[rel=preload]", "el => el.href")
html = page.eval_on_selector(".main-container", "(e, suffix) => e.outer_html + suffix", "hello")
search_value = await page.eval_on_selector("#search", "el => el.value")
preload_href = await page.eval_on_selector("link[rel=preload]", "el => el.href")
html = await page.eval_on_selector(".main-container", "(e, suffix) => e.outer_html + suffix", "hello")
Аргументы
-
Селектор для поиска элемента.
-
JavaScript‑выражение, которое будет выполнено в контексте браузера. Если выражение вычисляется в функцию, функция будет автоматически вызвана.
-
argEvaluationArgument (необязательно)#Необязательный аргумент, передаваемый в expression.
-
strictbool (необязательно) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение.
Возвращает
eval_on_selector_all
Добавлено в: v1.9В большинстве случаев locator.evaluate_all(), другие вспомогательные методы Locator и web-first ассерты работают лучше.
Метод находит все элементы на странице, соответствующие указанному селектору, и передает массив найденных элементов в качестве первого аргумента в expression. Возвращает результат вызова expression.
Если expression возвращает Promise, то page.eval_on_selector_all() будет ожидать его разрешения и вернет результат.
Использование
- Sync
- Async
div_counts = page.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
div_counts = await page.eval_on_selector_all("div", "(divs, min) => divs.length >= min", 10)
Аргументы
-
Селектор для поиска элементов.
-
JavaScript‑выражение, которое будет выполнено в контексте браузера. Если выражение вычисляется в функцию, функция будет автоматически вызвана.
-
argEvaluationArgument (необязательно)#Необязательный аргумент, передаваемый в expression.
Возвращает
expect_navigation
Добавлено до v1.9Этот метод по своей природе подвержен состояниям гонки. Пожалуйста, используйте page.wait_for_url() вместо него.
Ожидает навигацию основного фрейма и возвращает ответ основного ресурса. В случае нескольких редиректов навигация завершится с ответом последнего редиректа. В случае навигации к другому якорю или навигации из‑за использования History API, навигация завершится со значением null.
Использование
Метод завершается, когда страница переходит на новый URL или перезагружается. Это полезно, когда вы выполняете код, который косвенно вызывает навигацию, например, клик по элементу с обработчиком onclick, который запускает навигацию через setTimeout. Рассмотрим пример:
- Sync
- Async
with page.expect_navigation():
# Это действие запускает навигацию после тайм-аута.
page.get_by_text("Navigate after timeout").click()
# Завершается после окончания навигации
async with page.expect_navigation():
# Это действие запускает навигацию после тайм-аута.
await page.get_by_text("Navigate after timeout").click()
# Завершается после окончания навигации
Использование History API для изменения URL считается навигацией.
Аргументы
-
timeoutfloat (необязательно)#Максимальное время выполнения операции в миллисекундах, по умолчанию 30 секунд. Передайте
0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_navigation_timeout(), browser_context.set_default_timeout(), page.set_default_navigation_timeout() или page.set_default_timeout(). -
urlstr | Pattern | Callable[URL]:bool (необязательно)#Glob‑шаблон, регулярное выражение или предикат, принимающий URL, для сопоставления во время ожидания навигации. Обратите внимание: если параметр — строка без подстановочных символов, метод будет ожидать навигацию ровно к этому URL.
-
wait_until"load" | "domcontentloaded" | "networkidle" | "commit" (необязательно)#Когда считать операцию успешно завершенной. По умолчанию
load. Возможные события:'domcontentloaded'— считать операцию завершенной, когда сработает событиеDOMContentLoaded.'load'— считать операцию завершенной, когда сработает событиеload.'networkidle'— НЕ РЕКОМЕНДУЕТСЯ считать операцию завершенной, когда нет сетевых соединений как минимум500мс. Не используйте это для тестирования, вместо этого полагайтесь на web‑ассерты.'commit'— считать операцию завершенной, когда получен сетевой ответ и документ начал загружаться.
Возвращает
fill
Добавлено до v1.9Используйте вариант на основе локаторов — locator.fill(). Подробнее о локаторах.
Метод ожидает элемент, соответствующий selector, выполняет проверки actionability, фокусирует элемент, заполняет его и после заполнения инициирует событие input. Обратите внимание, что вы можете передать пустую строку, чтобы очистить поле ввода.
Если целевой элемент не является <input>, <textarea> или [contenteditable], метод выбрасывает ошибку. Однако если элемент находится внутри <label>, который имеет связанный control, будет заполнен именно этот control.
Для отправки более тонких событий клавиатуры используйте locator.press_sequentially().
Использование
page.fill(selector, value)
page.fill(selector, value, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
Значение для заполнения элемента
<input>,<textarea>или[contenteditable]. -
forcebool (необязательно) Добавлено в: v1.13#Нужно ли обходить проверки actionability. По умолчанию
false. -
no_wait_afterbool (необязательно)#УстаревшийЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
strictbool (необязательно) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
focus
Добавлено до v1.9Используйте вариант на основе локаторов — locator.focus(). Подробнее о локаторах.
Метод получает элемент по selector и фокусирует его. Если элемент, соответствующий selector, отсутствует, метод будет ждать, пока такой элемент появится в DOM.
Использование
page.focus(selector)
page.focus(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
strictbool (необязательно) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
get_attribute
Добавлено до v1.9Используйте вариант на основе локаторов — locator.get_attribute(). Подробнее о локаторах.
Возвращает значение атрибута элемента.
Использование
page.get_attribute(selector, name)
page.get_attribute(selector, name, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
Имя атрибута, значение которого нужно получить.
-
strictbool (необязательно) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
hover
Добавлено до v1.9Используйте вариант на основе локаторов — locator.hover(). Подробнее о локаторах.
Метод наводит курсор на элемент, соответствующий selector, выполняя следующие шаги:
- Найти элемент, соответствующий selector. Если такого элемента нет, ожидать, пока он будет прикреплен к DOM.
- Ожидать прохождения проверок actionability для найденного элемента, если не установлен параметр force. Если элемент будет отсоединен во время проверок, все действие будет повторено.
- Прокрутить элемент в область видимости при необходимости.
- Использовать page.mouse для наведения курсора на центр элемента или в указанную position.
Если все шаги в совокупности не завершатся в течение указанного timeout, метод выбросит TimeoutError. Передача нулевого таймаута отключает это поведение.
Использование
page.hover(selector)
page.hover(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
Нужно ли обходить проверки actionability. По умолчанию
false. -
modifiersList["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (необязательно)#Клавиши‑модификаторы, которые нужно зажать. Обеспечивает, что во время операции нажаты только эти модификаторы, а затем восстанавливает текущее состояние модификаторов. Если не указано, используются текущие нажатые модификаторы.
"ControlOrMeta"соответствует"Control"на Windows и Linux и"Meta"на macOS. -
no_wait_afterbool (необязательно) Добавлено в: v1.28#УстаревшийЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
positionDict (необязательно)#Точка, используемая относительно верхнего левого угла padding‑бокса элемента. Если не указана, используется какая‑либо видимая точка элемента.
-
strictbool (необязательно) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout(). -
trialbool (необязательно) Добавлено в: v1.11#Если установлено, метод выполняет только проверки actionability и пропускает само действие. По умолчанию
false. Полезно для ожидания готовности элемента к действию без его выполнения. Обратите внимание, что клавиатурныеmodifiersбудут нажаты независимо отtrial, чтобы позволить тестировать элементы, видимые только при зажатых клавишах.
Возвращает
inner_html
Добавлено до v1.9Используйте вариант на основе локаторов — locator.inner_html(). Подробнее о локаторах.
Возвращает element.innerHTML.
Использование
page.inner_html(selector)
page.inner_html(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
strictbool (необязательно) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
inner_text
Добавлено до v1.9Используйте вариант на основе локаторов — locator.inner_text(). Подробнее о локаторах.
Возвращает element.innerText.
Использование
page.inner_text(selector)
page.inner_text(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
strictbool (необязательно) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
input_value
Добавлено в: v1.13Используйте вариант на основе локаторов — locator.input_value(). Подробнее о локаторах.
Возвращает input.value для выбранного элемента <input>, <textarea> или <select>.
Для элементов, не являющихся полями ввода, метод выбрасывает исключение. Однако если элемент находится внутри <label>, который имеет связанный control, возвращается значение этого control.
Использование
page.input_value(selector)
page.input_value(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
strictbool (необязательно) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
is_checked
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.is_checked(). Подробнее о локаторах.
Возвращает, отмечен ли элемент. Генерирует исключение, если элемент не является чекбоксом или radio-инпутом.
Использование
page.is_checked(selector)
page.is_checked(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
strictbool (необязательно) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
is_disabled
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.is_disabled(). Подробнее о локаторах.
Возвращает, отключён ли элемент — противоположность состоянию enabled.
Использование
page.is_disabled(selector)
page.is_disabled(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
strictbool (необязательно) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
is_editable
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.is_editable(). Подробнее о локаторах.
Возвращает, является ли элемент редактируемым.
Использование
page.is_editable(selector)
page.is_editable(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
strictbool (необязательно) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
is_enabled
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.is_enabled(). Подробнее о локаторах.
Возвращает, находится ли элемент в состоянии enabled.
Использование
page.is_enabled(selector)
page.is_enabled(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
strictbool (необязательно) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
is_hidden
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.is_hidden(). Подробнее о локаторах.
Возвращает, скрыт ли элемент — противоположность состоянию visible. selector, который не соответствует ни одному элементу, считается скрытым.
Использование
page.is_hidden(selector)
page.is_hidden(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
strictbool (необязательно) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#УстарелоЭтот параметр игнорируется. page.is_hidden() не ожидает, пока элемент станет скрытым, и возвращает результат немедленно.
Возвращает
is_visible
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.is_visible(). Подробнее о локаторах.
Возвращает, является ли элемент видимым. selector, который не соответствует ни одному элементу, считается невидимым.
Использование
page.is_visible(selector)
page.is_visible(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
strictbool (необязательно) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#УстарелоЭтот параметр игнорируется. page.is_visible() не ожидает, пока элемент станет видимым, и возвращает результат немедленно.
Возвращает
press
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.press(). Подробнее о локаторах.
Фокусирует элемент, а затем использует keyboard.down() и keyboard.up().
Параметр key может задавать предполагаемое значение keyboardEvent.key или одиночный символ для генерации текста. Расширенный список допустимых значений key можно найти здесь. Примеры клавиш:
F1 - F12, Digit0- Digit9, KeyA- KeyZ, Backquote, Minus, Equal, Backslash, Backspace, Tab, Delete, Escape, ArrowDown, End, Enter, Home, Insert, PageDown, PageUp, ArrowRight, ArrowUp и т.д.
Также поддерживаются сочетания с модификаторами: Shift, Control, Alt, Meta, ShiftLeft, ControlOrMeta. ControlOrMeta соответствует Control на Windows и Linux и Meta на macOS.
Удерживание Shift приведёт к вводу текста, соответствующего значению key в верхнем регистре.
Если key — это одиночный символ, регистр учитывается, поэтому значения a и A сгенерируют разный текст.
Также поддерживаются сочетания клавиш, такие как key: "Control+o", key: "Control++" или key: "Control+Shift+T". При указании модификатора он нажимается и удерживается во время нажатия последующей клавиши.
Использование
- Sync
- Async
page = browser.new_page()
page.goto("https://keycode.info")
page.press("body", "A")
page.screenshot(path="a.png")
page.press("body", "ArrowLeft")
page.screenshot(path="arrow_left.png")
page.press("body", "Shift+O")
page.screenshot(path="o.png")
browser.close()
page = await browser.new_page()
await page.goto("https://keycode.info")
await page.press("body", "A")
await page.screenshot(path="a.png")
await page.press("body", "ArrowLeft")
await page.screenshot(path="arrow_left.png")
await page.press("body", "Shift+O")
await page.screenshot(path="o.png")
await browser.close()
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
Имя клавиши для нажатия или символ для генерации, например
ArrowLeftилиa. -
Время ожидания между событиями
keydownиkeyupв миллисекундах. По умолчанию 0. -
no_wait_afterbool (необязательно)#УстарелоВ будущем значение по умолчанию для этого параметра будет
true.Действия, инициирующие навигацию, ожидают её завершения и начала загрузки страницы. Вы можете отключить ожидание, установив этот флаг. Обычно это требуется только в исключительных случаях, например при переходе на недоступные страницы. По умолчанию
false. -
strictbool (необязательно) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
query_selector
Добавлено в: v1.9Вместо этого используйте вариант на основе локаторов — page.locator(). Подробнее о локаторах.
Метод находит элемент на странице, соответствующий указанному селектору. Если ни один элемент не соответствует селектору, возвращаемое значение будет null. Чтобы ожидать появления элемента на странице, используйте locator.wait_for().
Использование
page.query_selector(selector)
page.query_selector(selector, **kwargs)
Аргументы
-
Селектор для поиска.
-
strictbool (необязательно) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение.
Возвращает
query_selector_all
Добавлено в: v1.9Вместо этого используйте вариант на основе локаторов — page.locator(). Подробнее о локаторах.
Метод находит все элементы на странице, соответствующие указанному селектору. Если ни один элемент не соответствует селектору, возвращаемое значение будет [].
Использование
page.query_selector_all(selector)
Аргументы
Возвращает
select_option
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.select_option(). Подробнее о локаторах.
Метод ожидает появления элемента, соответствующего selector, выполняет проверки actionability, ожидает, пока все указанные опции появятся в элементе <select>, и выбирает эти опции.
Если целевой элемент не является <select>, метод выбрасывает ошибку. Однако если элемент находится внутри элемента <label>, который имеет связанный control, вместо него будет использован соответствующий control.
Возвращает массив значений опций, которые были успешно выбраны.
После выбора всех переданных опций инициирует события change и input.
Использование
- Sync
- Async
# Одиночный выбор по значению или метке
page.select_option("select#colors", "blue")
# одиночный выбор по метке
page.select_option("select#colors", label="blue")
# множественный выбор
page.select_option("select#colors", value=["red", "green", "blue"])
# Одиночный выбор по значению или метке
await page.select_option("select#colors", "blue")
# одиночный выбор по метке
await page.select_option("select#colors", label="blue")
# множественный выбор
await page.select_option("select#colors", value=["red", "green", "blue"])
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
forcebool (необязательно) Добавлено в: v1.13#Нужно ли обходить проверки actionability. По умолчанию
false. -
no_wait_afterbool (необязательно)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
strictbool (необязательно) Добавлено в: v1.14#Если
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout(). -
elementElementHandle | List[ElementHandle] (необязательно)#Элементы опций для выбора. Необязательно.
-
indexint | List[int] (необязательно)#Опции для выбора по индексу. Необязательно.
-
valuestr | List[str] (необязательно)#Опции для выбора по значению. Если
<select>имеет атрибутmultiple, будут выбраны все переданные опции, иначе будет выбрана только первая опция, соответствующая одному из переданных значений. Необязательно. -
labelstr | List[str] (необязательно)#Опции для выбора по метке. Если
<select>имеет атрибутmultiple, будут выбраны все переданные опции, иначе будет выбрана только первая опция, соответствующая одной из переданных меток. Необязательно.
Возвращает
set_checked
Добавлено в: v1.15Вместо этого используйте вариант на основе локаторов — locator.set_checked(). Подробнее о локаторах.
Метод отмечает или снимает отметку с элемента, соответствующего selector, выполняя следующие шаги:
- Находит элемент, соответствующий selector. Если такого элемента нет, ожидает, пока подходящий элемент будет добавлен в DOM.
- Убеждается, что найденный элемент является чекбоксом или radio-инпутом. В противном случае метод выбрасывает ошибку.
- Если элемент уже находится в требуемом состоянии (отмечен или не отмечен), метод немедленно возвращает управление.
- Ожидает прохождения проверок actionability для найденного элемента, если не задан параметр force. Если элемент будет отсоединён во время проверок, всё действие будет повторено.
- Прокручивает элемент в область видимости при необходимости.
- Использует page.mouse для клика в центр элемента.
- Убеждается, что элемент теперь отмечен или не отмечен. В противном случае метод выбрасывает ошибку.
Если все шаги не были завершены в течение указанного timeout, метод выбрасывает TimeoutError. Передача таймаута 0 отключает это поведение.
Использование
page.set_checked(selector, checked)
page.set_checked(selector, checked, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
Нужно ли установить или снять отметку с чекбокса.
-
Нужно ли обходить проверки actionability. По умолчанию
false. -
no_wait_afterbool (необязательно)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
positionDict (необязательно)#Точка относительно левого верхнего угла области padding элемента. Если не указано, используется некоторая видимая точка элемента.
-
Если
true, вызов требует, чтобы селектор разрешался ровно в один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательно)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout(). -
Если задано, метод выполняет только проверки actionability и пропускает само действие. По умолчанию
false. Полезно для ожидания готовности элемента к действию без его выполнения.
Возвращает
set_input_files
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.set_input_files(). Подробнее о локаторах.
Устанавливает значение поля ввода файлов в указанные пути к файлам или файлы. Если некоторые из filePaths являются относительными путями, они будут разрешены относительно текущего рабочего каталога. Для пустого массива очищает выбранные файлы. Для полей ввода с атрибутом [webkitdirectory] поддерживается только один путь к каталогу.
Этот метод ожидает, что selector указывает на элемент input. Однако если элемент находится внутри элемента <label>, который имеет связанный control, в качестве цели используется именно control.
Использование
page.set_input_files(selector, files)
page.set_input_files(selector, files, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
filesUnion[str, pathlib.Path] | List[Union[str, pathlib.Path]] | Dict | List[Dict]# -
no_wait_afterbool (необязательный)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
strictbool (необязательный) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор однозначно указывал на один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательный)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
tap
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.tap(). Подробнее о локаторах.
Этот метод выполняет касание (tap) элемента, соответствующего selector, выполняя следующие шаги:
- Находит элемент, соответствующий selector. Если такого элемента нет, ожидает, пока соответствующий элемент будет добавлен в DOM.
- Ожидает прохождения проверок actionability для найденного элемента, если не установлен параметр force. Если элемент будет отсоединён во время проверок, вся операция будет повторена.
- Прокручивает элемент в область видимости при необходимости.
- Использует page.touchscreen для касания центра элемента или указанной position.
Если все шаги не завершатся в течение указанного timeout, метод выбросит TimeoutError. Передача таймаута 0 отключает ограничение по времени.
Метод page.tap() выбросит исключение, если параметр has_touch контекста браузера равен false.
Использование
page.tap(selector)
page.tap(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
Следует ли обходить проверки actionability. По умолчанию
false. -
modifiersList["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (необязательный)#Клавиши-модификаторы, которые нужно зажать. Гарантирует, что во время операции будут нажаты только эти модификаторы, а затем восстановит текущее состояние. Если не указано, используются уже нажатые модификаторы.
"ControlOrMeta"соответствует"Control"на Windows и Linux и"Meta"на macOS. -
no_wait_afterbool (необязательный)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
positionDict (необязательный)#Точка относительно левого верхнего угла области padding элемента. Если не указано, используется некоторая видимая точка элемента.
-
strictbool (необязательный) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор однозначно указывал на один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательный)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout(). -
trialbool (необязательный) Добавлено в: v1.11#Если установлено, метод выполняет только проверки actionability и пропускает само действие. По умолчанию
false. Полезно для ожидания готовности элемента к действию без его выполнения. Обратите внимание, что клавиатурныеmodifiersбудут нажаты независимо от значенияtrial, чтобы позволить тестировать элементы, которые видимы только при нажатых клавишах.
Возвращает
text_content
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.text_content(). Подробнее о локаторах.
Возвращает element.textContent.
Использование
page.text_content(selector)
page.text_content(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
strictbool (необязательный) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор однозначно указывал на один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательный)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
type
Добавлено до v1.9В большинстве случаев следует использовать locator.fill(). Нажимать клавиши по одной нужно только при наличии специальной обработки клавиатуры на странице — в этом случае используйте locator.press_sequentially().
Отправляет события keydown, keypress/input и keyup для каждого символа в тексте. page.type можно использовать для отправки детализированных событий клавиатуры. Для заполнения значений в полях формы используйте page.fill().
Чтобы нажать специальную клавишу, такую как Control или ArrowDown, используйте keyboard.press().
Использование
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
Текст, который нужно ввести в сфокусированный элемент.
-
Время ожидания между нажатиями клавиш в миллисекундах. По умолчанию 0.
-
no_wait_afterbool (необязательный)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
strictbool (необязательный) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор однозначно указывал на один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательный)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
uncheck
Добавлено до v1.9Вместо этого используйте вариант на основе локаторов — locator.uncheck(). Подробнее о локаторах.
Этот метод снимает отметку с элемента, соответствующего selector, выполняя следующие шаги:
- Находит элемент, соответствующий selector. Если такого элемента нет, ожидает, пока соответствующий элемент будет добавлен в DOM.
- Убеждается, что найденный элемент является чекбоксом или radio-кнопкой. Если это не так, метод выбросит исключение. Если элемент уже не отмечен, метод сразу возвращается.
- Ожидает прохождения проверок actionability для найденного элемента, если не установлен параметр force. Если элемент будет отсоединён во время проверок, вся операция будет повторена.
- Прокручивает элемент в область видимости при необходимости.
- Использует page.mouse для клика по центру элемента.
- Убеждается, что элемент теперь не отмечен. Если это не так, метод выбросит исключение.
Если все шаги не завершатся в течение указанного timeout, метод выбросит TimeoutError. Передача таймаута 0 отключает ограничение по времени.
Использование
page.uncheck(selector)
page.uncheck(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если селектору соответствует несколько элементов, будет использован первый.
-
Следует ли обходить проверки actionability. По умолчанию
false. -
no_wait_afterbool (необязательный)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
positionDict (необязательный) Добавлено в: v1.11#Точка относительно левого верхнего угла области padding элемента. Если не указано, используется некоторая видимая точка элемента.
-
strictbool (необязательный) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор однозначно указывал на один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательный)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout(). -
trialbool (необязательный) Добавлено в: v1.11#Если установлено, метод выполняет только проверки actionability и пропускает само действие. По умолчанию
false. Полезно для ожидания готовности элемента к действию без его выполнения.
Возвращает
wait_for_selector
Добавлено до v1.9Вместо этого используйте веб-ассерты, проверяющие видимость, или вариант на основе локаторов — locator.wait_for(). Подробнее о локаторах.
Возвращается, когда элемент, указанный селектором, удовлетворяет параметру state. Возвращает null при ожидании состояний hidden или detached.
Playwright автоматически ожидает готовности элемента перед выполнением действия. Использование объектов Locator и web-first ассертов позволяет обходиться без wait_for_selector.
Ожидает, пока selector удовлетворит параметру state (появится/исчезнет из DOM или станет видимым/скрытым). Если на момент вызова метода селектор уже удовлетворяет условию, метод вернётся сразу. Если селектор не удовлетворит условию в течение timeout миллисекунд, будет выброшено исключение.
Использование
Этот метод работает между навигациями:
- Sync
- Async
from playwright.sync_api import sync_playwright, Playwright
def run(playwright: Playwright):
chromium = playwright.chromium
browser = chromium.launch()
page = browser.new_page()
for current_url in ["https://google.com", "https://bbc.com"]:
page.goto(current_url, wait_until="domcontentloaded")
element = page.wait_for_selector("img")
print("Loaded image: " + str(element.get_attribute("src")))
browser.close()
with sync_playwright() as playwright:
run(playwright)
import asyncio
from playwright.async_api import async_playwright, Playwright
async def run(playwright: Playwright):
chromium = playwright.chromium
browser = await chromium.launch()
page = await browser.new_page()
for current_url in ["https://google.com", "https://bbc.com"]:
await page.goto(current_url, wait_until="domcontentloaded")
element = await page.wait_for_selector("img")
print("Loaded image: " + str(await element.get_attribute("src")))
await browser.close()
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Аргументы
-
Селектор для поиска.
-
state"attached" | "detached" | "visible" | "hidden" (необязательный)#По умолчанию
'visible'. Возможные значения:'attached'— ожидать, пока элемент появится в DOM.'detached'— ожидать, пока элемент исчезнет из DOM.'visible'— ожидать, пока элемент будет иметь ненулевой bounding box и не будет иметьvisibility:hidden. Обратите внимание, что элемент без содержимого или сdisplay:noneимеет пустой bounding box и не считается видимым.'hidden'— ожидать, пока элемент будет либо отсоединён от DOM, либо иметь пустой bounding box, либоvisibility:hidden. Это противоположно значению'visible'.
-
strictbool (необязательный) Добавлено в: v1.14#Если установлено в
true, вызов требует, чтобы селектор однозначно указывал на один элемент. Если селектор соответствует более чем одному элементу, будет выброшено исключение. -
timeoutfloat (необязательный)#Максимальное время ожидания в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить таймаут. Значение по умолчанию можно изменить с помощью методов browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
wait_for_timeout
Добавлено до v1.9Никогда не используйте ожидание по таймауту в продакшене. Тесты, которые ждут фиксированное время, по своей природе нестабильны. Используйте действия Locator и веб-ассерты, которые ожидают автоматически.
Ожидает указанный timeout в миллисекундах.
Обратите внимание, что page.waitForTimeout() следует использовать только для отладки. Тесты, использующие таймер в продакшене, будут нестабильными. Вместо этого используйте сигналы, такие как сетевые события, появление элементов и другие.
Использование
- Sync
- Async
# ждать 1 секунду
page.wait_for_timeout(1000)
# ждать 1 секунду
await page.wait_for_timeout(1000)
Аргументы
Возвращает