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 генерирует различные события (описанные ниже), которые могут быть обработаны с использованием любых методов нативного EventEmitter
в Node, таких как 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)
# позже...
page.remove_listener("request", log_request)
Методы
add_init_script
Добавлено до v1.9Добавляет скрипт, который будет выполнен в одном из следующих случаев:
- Каждый раз, когда страница переходит на новый URL.
- Каждый раз, когда дочерний фрейм присоединяется или переходит на новый URL. В этом случае скрипт выполняется в контексте вновь присоединенного фрейма.
Скрипт выполняется после создания документа, но до выполнения любых его скриптов. Это полезно для изменения среды JavaScript, например, для задания начального значения Math.random
.
Использование
Пример переопределения Math.random
перед загрузкой страницы:
// preload.js
Math.random = () => 42;
- Sync
- Async
# в вашем скрипте playwright, предполагая, что файл preload.js находится в той же директории
page.add_init_script(path="./preload.js")
# в вашем скрипте playwright, предполагая, что файл preload.js находится в той же директории
await page.add_init_script(path="./preload.js")
Порядок выполнения нескольких скриптов, установленных через browser_context.add_init_script() и page.add_init_script(), не определен.
Аргументы
-
path
Union[str, pathlib.Path] (опционально)#Путь к файлу JavaScript. Если
path
является относительным путем, то он разрешается относительно текущей рабочей директории. Опционально. -
Скрипт, который будет выполнен на всех страницах в контексте браузера. Опционально.
Возвращает
add_locator_handler
Добавлено в: v1.42При тестировании веб-страницы иногда появляются неожиданные наложения, такие как диалог "Зарегистрироваться", которые блокируют действия, которые вы хотите автоматизировать, например, нажатие кнопки. Эти наложения не всегда появляются одинаково или в одно и то же время, что делает их сложными для обработки в автоматизированных тестах.
Этот метод позволяет вам настроить специальную функцию, называемую обработчиком, которая активируется, когда обнаруживает, что наложение видно. Задача обработчика - удалить наложение, позволяя вашему тесту продолжаться так, как будто наложения не было.
Вещи, которые нужно учитывать:
- Когда наложение показывается предсказуемо, мы рекомендуем явно ожидать его в вашем тесте и закрывать его как часть вашего обычного тестового потока, вместо использования page.add_locator_handler().
- Playwright проверяет наличие наложения каждый раз перед выполнением или повторной попыткой действия, требующего проверки возможности действия, или перед выполнением проверки с автоматическим ожиданием. Когда наложение видно, Playwright сначала вызывает обработчик, а затем продолжает с действием/проверкой. Обратите внимание, что обработчик вызывается только тогда, когда вы выполняете действие/проверку - если наложение становится видимым, но вы не выполняете никаких действий, обработчик не будет вызван.
- После выполнения обработчика Playwright убедится, что наложение, вызвавшее обработчик, больше не видно. Вы можете отказаться от этого поведения с помощью no_wait_after.
- Время выполнения обработчика учитывается в тайм-ауте действия/проверки, которое вызвало обработчик. Если ваш обработчик занимает слишком много времени, это может вызвать тайм-ауты.
- Вы можете зарегистрировать несколько обработчиков. Однако в любой момент времени будет выполняться только один обработчик. Убедитесь, что действия внутри обработчика не зависят от другого обработчика.
Выполнение обработчика изменит состояние вашей страницы в середине теста. Например, это изменит текущий фокус элемента и переместит мышь. Убедитесь, что действия, выполняемые после обработчика, являются автономными и не зависят от неизменности состояния фокуса и мыши.
Например, рассмотрим тест, который вызывает locator.focus() с последующим keyboard.press(). Если ваш обработчик нажимает кнопку между этими двумя действиями, скорее всего, фокусированный элемент будет неправильным, и нажатие клавиши произойдет на неожиданном элементе. Используйте locator.press() вместо этого, чтобы избежать этой проблемы.
Другой пример - серия действий с мышью, где mouse.move() следует за mouse.down(). Опять же, когда обработчик выполняется между этими двумя действиями, позиция мыши будет неправильной во время нажатия мыши. Предпочитайте автономные действия, такие как locator.click(), которые не зависят от состояния, измененного обработчиком.
Использование
Пример, который закрывает диалог "Подписаться на рассылку", когда он появляется:
- Sync
- Async
# Настройка обработчика.
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)
# Напишите тест как обычно.
page.goto("https://example.com")
page.get_by_role("button", name="Start here").click()
# Настройка обработчика.
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)
# Напишите тест как обычно.
await page.goto("https://example.com")
await page.get_by_role("button", name="Start here").click()
Пример, который пропускает страницу "Подтвердите свои данные безопасности", когда она показывается:
- Sync
- Async
# Настройка обработчика.
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)
# Напишите тест как обычно.
page.goto("https://example.com")
page.get_by_role("button", name="Start here").click()
# Настройка обработчика.
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)
# Напишите тест как обычно.
await page.goto("https://example.com")
await page.get_by_role("button", name="Start here").click()
Пример с пользовательским обратным вызовом на каждую проверку возможности действия. Он использует локатор <body>
, который всегда виден, поэтому обработчик вызывается перед каждой проверкой возможности действия. Важно указать no_wait_after, потому что обработчик не скрывает элемент <body>
.
- Sync
- Async
# Настройка обработчика.
def handler():
page.evaluate("window.removeObstructionsForTestIfNeeded()")
page.add_locator_handler(page.locator("body"), handler, no_wait_after=True)
# Напишите тест как обычно.
page.goto("https://example.com")
page.get_by_role("button", name="Start here").click()
# Настройка обработчика.
def handler():
await page.evaluate("window.removeObstructionsForTestIfNeeded()")
await page.add_locator_handler(page.locator("body"), handler, no_wait_after=True)
# Напишите тест как обычно.
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)
def handler(locator):
await locator.click()
await page.add_locator_handler(page.get_by_label("Close"), handler, times=1)
Аргументы
-
Локатор, который вызывает обработчик.
-
handler
Callable[Locator]:Promise[Any]#Функция, которая должна быть выполнена, когда локатор появляется. Эта функция должна избавиться от элемента, который блокирует действия, такие как клик.
-
no_wait_after
bool (опционально) Добавлено в: v1.44#По умолчанию, после вызова обработчика Playwright будет ждать, пока наложение не станет скрытым, и только затем продолжит с действием/проверкой, которое вызвало обработчик. Эта опция позволяет отказаться от этого поведения, чтобы наложение могло оставаться видимым после выполнения обработчика.
-
times
int (опционально) Добавлено в: v1.44#Указывает максимальное количество раз, которое этот обработчик должен быть вызван. По умолчанию не ограничено.
Возвращает
add_script_tag
Добавлено до v1.9Добавляет тег <script>
на страницу с желаемым URL или содержимым. Возвращает добавленный тег, когда срабатывает событие onload скрипта или когда содержимое скрипта было внедрено в фрейм.
Использование
page.add_script_tag()
page.add_script_tag(**kwargs)
Аргументы
-
Сырой JavaScript-контент, который будет внедрен в фрейм.
-
path
Union[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-контент для внедрения в фрейм.
-
path
Union[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)
Аргументы
-
reason
str (опционально) Добавлено в: v1.40#Причина, которая будет сообщена операциям, прерванным закрытием страницы.
-
run_before_unload
bool (опционально)#По умолчанию
false
. Выполнять ли обработчики страницы before unload.
Возвращает
content
Добавлено до версии v1.9Получает полный HTML-контент страницы, включая doctype.
Использование
page.content()
Возвращает
drag_and_drop
Добавлено в: v1.13Этот метод перетаскивает исходный элемент на целевой элемент. Сначала он перемещается к исходному элементу, выполняет mousedown
, затем перемещается к целевому элементу и выполняет mouseup
.
Использование
- Sync
- Async
page.drag_and_drop("#source", "#target")
# или укажите точные позиции относительно верхнего левого угла элементов:
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")
# или укажите точные позиции относительно верхнего левого угла элементов:
await page.drag_and_drop(
"#source",
"#target",
source_position={"x": 34, "y": 7},
target_position={"x": 10, "y": 20}
)
Аргументы
-
Селектор для поиска элемента, который нужно перетащить. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Селектор для поиска элемента, на который нужно сбросить. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Следует ли обходить проверки действительности. По умолчанию
false
. -
no_wait_after
bool (опционально)#УстарелоЭта опция не имеет эффекта.
Эта опция не имеет эффекта.
-
source_position
Dict (опционально) Добавлено в: v1.14#Кликает на исходный элемент в этой точке относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
target_position
Dict (опционально) Добавлено в: v1.14#Сбрасывает на целевой элемент в этой точке относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout(). -
Если установлено, этот метод выполняет только проверки действительности и пропускает действие. По умолчанию
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Возвращает значение вызова выражения.
Если функция, переданная в page.evaluate(), возвращает Promise, то page.evaluate() будет ждать разрешения промиса и вернет его значение.
Если функция, переданная в page.evaluate(), возвращает значение, не являющееся Serializable, то page.evaluate() разрешается в undefined
. Playwright также поддерживает передачу некоторых дополнительных значений, которые не сериализуются через JSON
: -0
, NaN
, Infinity
, -Infinity
.
Использование
Передача аргумента в выражение:
- 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-выражение для выполнения в контексте браузера. Если выражение оценивается как функция, функция автоматически вызывается.
-
arg
EvaluationArgument (опционально)#Опциональный аргумент для передачи в выражение.
Возвращает
evaluate_handle
Добавлено до v1.9Возвращает значение вызова expression в виде JSHandle.
Единственное отличие между page.evaluate() и page.evaluate_handle() заключается в том, что page.evaluate_handle() возвращает JSHandle.
Если функция, переданная в page.evaluate_handle(), возвращает Promise, то page.evaluate_handle() будет ожидать разрешения промиса и вернет его значение.
Использование
- Синхронный
- Асинхронный
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.
Вместо функции также можно передать строку:
- Синхронный
- Асинхронный
a_handle = page.evaluate_handle("document") # handle для "document"
a_handle = await page.evaluate_handle("document") # handle для "document"
Экземпляры JSHandle могут быть переданы в качестве аргумента в page.evaluate_handle():
- Синхронный
- Асинхронный
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 выражение для выполнения в контексте браузера. Если выражение оценивается как функция, функция автоматически вызывается.
-
arg
EvaluationArgument (опционально)#Необязательный аргумент для передачи в expression.
Возвращает
expect_console_message
Добавлено в: v1.9Выполняет действие и ожидает, пока ConsoleMessage не будет зарегистрировано на странице. Если предоставлен предикат, он передает значение ConsoleMessage в функцию predicate
и ожидает, пока predicate(message)
не вернет истинное значение. Выдаст ошибку, если страница будет закрыта до того, как событие page.on("console") будет вызвано.
Использование
page.expect_console_message()
page.expect_console_message(**kwargs)
Аргументы
-
predicate
Callable[ConsoleMessage]:bool (опционально)#Получает объект ConsoleMessage и разрешается в истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя browser_context.set_default_timeout().
Возвращает
expect_download
Добавлено в: v1.9Выполняет действие и ожидает нового Download. Если предоставлен предикат, он передает значение Download в функцию predicate
и ожидает, пока predicate(download)
не вернет истинное значение. Выдаст ошибку, если страница будет закрыта до того, как событие загрузки будет вызвано.
Использование
page.expect_download()
page.expect_download(**kwargs)
Аргументы
-
predicate
Callable[Download]:bool (опционально)#Получает объект Download и разрешается в истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя browser_context.set_default_timeout().
Возвращает
expect_event
Добавлено до v1.9Ожидает, пока событие не будет вызвано, и передает его значение в функцию предиката. Возвращает, когда предикат возвращает истинное значение. Выдаст ошибку, если страница будет закрыта до того, как событие будет вызвано. Возвращает значение данных события.
Использование
- Синхронный
- Асинхронный
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)
. -
predicate
Callable (опционально)#Получает данные события и разрешается в истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя browser_context.set_default_timeout().
Возвращает
expect_file_chooser
Добавлено в: v1.9Выполняет действие и ожидает, пока не будет создан новый FileChooser. Если предоставлен предикат, он передает значение FileChooser в функцию predicate
и ожидает, пока predicate(fileChooser)
не вернет истинное значение. Выдаст ошибку, если страница будет закрыта до того, как будет открыт выбор файла.
Использование
page.expect_file_chooser()
page.expect_file_chooser(**kwargs)
Аргументы
-
predicate
Callable[FileChooser]:bool (опционально)#Получает объект FileChooser и разрешается в истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя browser_context.set_default_timeout().
Возвращает
expect_popup
Добавлено в: v1.9Выполняет действие и ожидает всплывающую Page. Если предоставлен предикат, он передает значение [Popup] в функцию predicate
и ожидает, пока predicate(page)
не вернет истинное значение. Выдаст ошибку, если страница будет закрыта до того, как событие всплывающего окна будет вызвано.
Использование
page.expect_popup()
page.expect_popup(**kwargs)
Аргументы
-
predicate
Callable[Page]:bool (опционально)#Получает объект Page и разрешается в истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя browser_context.set_default_timeout().
Возвращает
expect_request
Добавлено до v1.9Ожидает совпадающий запрос и возвращает его. См. ожидание события для получения более подробной информации о событиях.
Использование
- Синхронный
- Асинхронный
with page.expect_request("http://example.com/resource") as first:
page.get_by_text("trigger request").click()
first_request = first.value
# или с использованием лямбда-функции
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
# или с использованием лямбда-функции
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_predicate
str | Pattern | Callable[Request]:bool#URL запроса в виде строки, регулярного выражения или предиката, получающего объект Request. Когда base_url был предоставлен через параметры контекста и переданный URL является путем, он объединяется через конструктор
new URL()
. -
Максимальное время ожидания в миллисекундах, по умолчанию 30 секунд, передайте
0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя метод page.set_default_timeout().
Возвращает
expect_request_finished
Добавлено в: v1.12Выполняет действие и ожидает, пока Request не завершит загрузку. Если предоставлен предикат, он передает значение Request в функцию predicate
и ожидает, пока predicate(request)
не вернет истинное значение. Выдаст ошибку, если страница будет закрыта до того, как событие page.on("requestfinished") будет вызвано.
Использование
page.expect_request_finished()
page.expect_request_finished(**kwargs)
Аргументы
-
predicate
Callable[Request]:bool (опционально)#Получает объект Request и разрешается в истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя browser_context.set_default_timeout().
Возвращает
expect_response
Добавлено до v1.9Возвращает совпадающий ответ. См. ожидание события для получения более подробной информации о событиях.
Использование
- Синхронный
- Асинхронный
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
или с использованием лямбда-функции
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
</TabItem>
<TabItem value="async">
```py
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
# или с использованием лямбда-функции
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_predicate
str | Pattern | Callable[Response]:bool#URL запроса в виде строки, регулярного выражения или предиката, принимающего объект Response. Если через параметры контекста был предоставлен base_url и переданный URL является путем, он будет объединен с помощью конструктора
new URL()
. -
Максимальное время ожидания в миллисекундах, по умолчанию 30 секунд, передайте
0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
expect_websocket
Добавлено в: v1.9Выполняет действие и ожидает нового WebSocket. Если предикат предоставлен, он передает значение WebSocket в функцию predicate
и ожидает, пока predicate(webSocket)
не вернет истинное значение. Выдаст ошибку, если страница будет закрыта до того, как событие WebSocket будет вызвано.
Использование
page.expect_websocket()
page.expect_websocket(**kwargs)
Аргументы
-
predicate
Callable[WebSocket]:bool (опционально)#Получает объект WebSocket и разрешает в истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя метод browser_context.set_default_timeout().
Возвращает
expect_worker
Добавлено в: v1.9Выполняет действие и ожидает нового Worker. Если предикат предоставлен, он передает значение Worker в функцию predicate
и ожидает, пока predicate(worker)
не вернет истинное значение. Выдаст ошибку, если страница будет закрыта до того, как событие worker будет вызвано.
Использование
page.expect_worker()
page.expect_worker(**kwargs)
Аргументы
-
predicate
Callable[Worker]:bool (опционально)#Получает объект Worker и разрешает в истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
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 страницы всем фреймам на странице:
- Синхронный
- Асинхронный
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.
-
Функция обратного вызова, которая будет вызвана в контексте Playwright.
-
Устарело
Эта опция будет удалена в будущем.
Передавать ли аргумент как handle, вместо передачи по значению. При передаче handle поддерживается только один аргумент. При передаче по значению поддерживается несколько аргументов.
Возвращает
expose_function
Добавлено до v1.9Метод добавляет функцию с именем name в объект window
каждого фрейма на странице. При вызове функция выполняет callback и возвращает Promise, который разрешается в возвращаемое значение callback.
Если callback возвращает Promise, он будет ожидаться.
Смотрите browser_context.expose_function() для версии, охватывающей весь контекст.
Функции, установленные через page.expose_function(), сохраняются при навигации.
Использование
Пример добавления функции sha256
на страницу:
- Синхронный
- Асинхронный
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
-
Функция обратного вызова, которая будет вызвана в контексте Playwright.
Возвращает
frame
Добавлено до v1.9Возвращает фрейм, соответствующий указанным критериям. Должно быть указано либо name
, либо url
.
Использование
frame = page.frame(name="frame-name")
frame = page.frame(url=r".*domain.*")
Аргументы
-
Имя фрейма, указанное в атрибуте
name
тегаiframe
. Опционально. -
url
str | Pattern | Callable[URL]:bool (опционально)#Глобальный шаблон, регулярное выражение или предикат, принимающий URL фрейма как объект URL. Опционально.
Возвращает
frame_locator
Добавлено в: v1.17При работе с iframes вы можете создать локатор фрейма, который войдет в iframe и позволит выбирать элементы в этом iframe.
Использование
Следующий фрагмент кода находит элемент с текстом "Submit" в iframe с id my-frame
, например, <iframe id="my-frame">
:
- Синхронный
- Асинхронный
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'>
- Синхронный
- Асинхронный
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">
- Синхронный
- Асинхронный
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" />
Вы можете заполнить поле ввода, найдя его по тексту-заполнителю:
- Синхронный
- Асинхронный
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>
Вы можете найти каждый элемент по его неявной роли:
- Синхронный
- Асинхронный
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
. -
Атрибут, который обычно устанавливается с помощью
aria-disabled
илиdisabled
.примечаниеВ отличие от большинства других атрибутов,
disabled
наследуется через иерархию DOM. Узнайте больше оaria-disabled
. -
exact
bool (опционально) Добавлено в: v1.28#Совпадает ли name точно: с учетом регистра и всей строки. По умолчанию false. Игнорируется, когда name является регулярным выражением. Обратите внимание, что точное совпадение все равно обрезает пробелы.
-
Атрибут, который обычно устанавливается с помощью
aria-expanded
.Узнайте больше о
aria-expanded
. -
include_hidden
bool (опционально)#Опция, которая контролирует, будут ли скрытые элементы соответствовать. По умолчанию, только не скрытые элементы, как определено ARIA, соответствуют селектору роли.
Узнайте больше о
aria-hidden
. -
Числовой атрибут, который обычно присутствует для ролей
heading
,listitem
,row
,treeitem
, с значениями по умолчанию для элементов<h1>-<h6>
.Узнайте больше о
aria-level
. -
name
str | Pattern (опционально)#Опция для соответствия доступному имени. По умолчанию, соответствие не учитывает регистр и ищет подстроку, используйте exact для управления этим поведением.
Узнайте больше о доступном имени.
-
Атрибут, который обычно устанавливается с помощью
aria-pressed
.Узнайте больше о
aria-pressed
. -
Атрибут, который обычно устанавливается с помощью
aria-selected
.Узнайте больше о
aria-selected
.
Возвращает
Детали
Селектор роли не заменяет аудиты доступности и тесты на соответствие, но дает раннюю обратную связь о руководствах ARIA.
Многие HTML-элементы имеют неявно определенную роль, которая распознается селектором роли. Вы можете найти все поддерживаемые роли здесь. Руководства ARIA не рекомендуют дублировать неявные роли и атрибуты, устанавливая role
и/или aria-*
атрибуты на значения по умолчанию.
get_by_test_id
Добавлено в: v1.27Находит элемент по тестовому идентификатору.
Использование
Рассмотрим следующую структуру DOM.
<button data-testid="directions">Itinéraire</button>
Вы можете найти элемент по его тестовому идентификатору:
- Синхронный
- Асинхронный
page.get_by_test_id("directions").click()
await page.get_by_test_id("directions").click()
Аргументы
Возвращает
Детали
По умолчанию, атрибут data-testid
используется как тестовый идентификатор. Используйте selectors.set_test_id_attribute() для настройки другого атрибута тестового идентификатора, если это необходимо.
get_by_text
Добавлено в: v1.27Позволяет находить элементы, содержащие заданный текст.
Смотрите также locator.filter(), который позволяет сопоставлять по другим критериям, таким как доступная роль, а затем фильтровать по содержимому текста.
Использование
Рассмотрим следующую структуру DOM:
<div>Hello <span>world</span></div>
<div>Hello</div>
Вы можете найти по подстроке текста, точной строке или регулярному выражению:
- Синхронный
- Асинхронный
# Совпадает с <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)
Аргументы
-
Максимальное время операции в миллисекундах, по умолчанию 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)
Аргументы
-
Максимальное время операции в миллисекундах, по умолчанию 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
.
Режим без головы не поддерживает навигацию к PDF-документу. См. проблему в исходном коде.
Использование
page.goto(url)
page.goto(url, **kwargs)
Аргументы
-
URL для перехода на страницу. URL должен включать схему, например,
https://
. Когда base_url был предоставлен через параметры контекста и переданный URL является путем, он объединяется с помощью конструктораnew URL()
. -
Значение заголовка Referer. Если предоставлено, оно будет иметь приоритет над значением заголовка referer, установленным с помощью page.set_extra_http_headers().
-
Максимальное время операции в миллисекундах, по умолчанию 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_not
Locator (опционально) Добавлено в: v1.33#Совпадает с элементами, которые не содержат элемент, соответствующий внутреннему локатору. Внутренний локатор запрашивается относительно внешнего. Например,
article
, который не имеетdiv
, совпадает с<article><span>Playwright</span></article>
.Обратите внимание, что внешние и внутренние локаторы должны принадлежать одному и тому же фрейму. Внутренний локатор не должен содержать FrameLocators.
-
has_not_text
str | Pattern (опционально) Добавлено в: v1.33#Совпадает с элементами, которые не содержат указанный текст где-либо внутри, возможно, в дочернем или потомке элемента. При передаче [строки] совпадение не учитывает регистр и ищет подстроку.
-
has_text
str | Pattern (опционально)#Совпадает с элементами, содержащими указанный текст где-либо внутри, возможно, в дочернем или потомке элемента. При передаче [строки] совпадение не учитывает регистр и ищет подстроку. Например,
"Playwright"
совпадает с<article><div>Playwright</div></article>
.
Возвращает
opener
Добавлено до v1.9Возвращает открыватель для всплывающих страниц и null
для других. Если открыватель уже был закрыт, возвращает null
.
Использование
page.opener()
Возвращает
pause
Добавлено в: v1.9Приостанавливает выполнение скрипта. Playwright остановит выполнение скрипта и будет ждать, пока пользователь не нажмет кнопку 'Resume' в оверлее страницы или не вызовет playwright.resume()
в консоли DevTools.
Пользователь может исследовать селекторы или выполнять ручные шаги во время паузы. Возобновление продолжит выполнение оригинального скрипта с того места, где он был приостановлен.
Этот метод требует, чтобы Playwright был запущен в режиме с интерфейсом, с ложным значением headless.
Использование
page.pause()
Возвращает
pdf
Добавлено до v1.9Возвращает буфер PDF.
page.pdf()
генерирует PDF страницы с print
css media. Чтобы сгенерировать PDF с screen
media, вызовите page.emulate_media() перед вызовом page.pdf()
:
По умолчанию page.pdf()
генерирует PDF с измененными цветами для печати. Используйте свойство -webkit-print-color-adjust
, чтобы принудительно отобразить точные цвета.
Использование
- Sync
- Async
# генерирует PDF с типом медиа "screen".
page.emulate_media(media="screen")
page.pdf(path="page.pdf")
# генерирует PDF с типом медиа "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. Теги скриптов внутри шаблонов не оцениваются. > 2. Стили страницы не видны внутри шаблонов.
Аргументы
-
display_header_footer
bool (опционально)#Отображать заголовок и нижний колонтитул. По умолчанию
false
. -
footer_template
str (опционально)#HTML-шаблон для печатного нижнего колонтитула. Должен использовать тот же формат, что и header_template.
-
Формат бумаги. Если установлен, имеет приоритет над опциями width или height. По умолчанию 'Letter'.
-
header_template
str (опционально)#HTML-шаблон для печатного заголовка. Должен быть действительным HTML-разметкой с использованием следующих классов для вставки значений печати:
'date'
отформатированная дата печати'title'
заголовок документа'url'
местоположение документа'pageNumber'
текущий номер страницы'totalPages'
общее количество страниц в документе
-
height
str | float (опционально)#Высота бумаги, принимает значения с указанием единиц измерения.
-
Ориентация бумаги. По умолчанию
false
. -
-
Верхнее поле, принимает значения с указанием единиц измерения. По умолчанию
0
. -
right
str | float (опционально)Правое поле, принимает значения с указанием единиц измерения. По умолчанию
0
. -
bottom
str | float (опционально)Нижнее поле, принимает значения с указанием единиц измерения. По умолчанию
0
. -
left
str | float (опционально)Левое поле, принимает значения с указанием единиц измерения. По умолчанию
0
.
Поля бумаги, по умолчанию отсутствуют.
-
-
outline
bool (опционально) Добавлено в: v1.42#Встраивать ли контур документа в PDF. По умолчанию
false
. -
page_ranges
str (опционально)#Диапазоны страниц для печати, например, '1-5, 8, 11-13'. По умолчанию пустая строка, что означает печать всех страниц.
-
path
Union[str, pathlib.Path] (опционально)#Путь к файлу для сохранения PDF. Если path является относительным путем, то он разрешается относительно текущей рабочей директории. Если путь не предоставлен, PDF не будет сохранен на диск.
-
prefer_css_page_size
bool (опционально)#Предпочитать ли любой размер страницы CSS
@page
, объявленный на странице, над тем, что объявлено в опциях width и height или format. По умолчаниюfalse
, что будет масштабировать содержимое, чтобы оно соответствовало размеру бумаги. -
print_background
bool (опционально)#Печать фоновой графики. По умолчанию
false
. -
Масштаб рендеринга веб-страницы. По умолчанию
1
. Масштаб должен быть между 0.1 и 2. -
tagged
bool (опционально) Добавлено в: v1.42#Генерировать ли тегированный (доступный) PDF. По умолчанию
false
. -
width
str | float (опционально)#Ширина бумаги, принимает значения с указанием единиц измерения.
Возвращает
перезагрузка
Добавлено до v1.9Этот метод перезагружает текущую страницу так же, как если бы пользователь инициировал обновление браузера. Возвращает ответ основного ресурса. В случае нескольких перенаправлений навигация завершится с ответом последнего перенаправления.
Использование
page.reload()
page.reload(**kwargs)
Аргументы
-
Максимальное время выполнения операции в миллисекундах, по умолчанию 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
.
- Синхронный
- Асинхронный
# 1. На вашей странице сохраните WeakRef для "suspect".
page.evaluate("globalThis.suspectWeakRef = new WeakRef(suspect)")
# 2. Запросите сборку мусора.
page.request_gc()
# 3. Проверьте, что слабая ссылка не ссылается на оригинальный объект.
assert page.evaluate("!globalThis.suspectWeakRef.deref()")
# 1. На вашей странице сохраните WeakRef для "suspect".
await page.evaluate("globalThis.suspectWeakRef = new WeakRef(suspect)")
# 2. Запросите сборку мусора.
await page.request_gc()
# 3. Проверьте, что слабая ссылка не ссылается на оригинальный объект.
assert await page.evaluate("!globalThis.suspectWeakRef.deref()")
Использование
page.request_gc()
Возвращает
route
Добавлено до v1.9Маршрутизация предоставляет возможность изменять сетевые запросы, которые выполняются страницей.
Как только маршрутизация включена, каждый запрос, соответствующий шаблону URL, будет приостановлен, если он не будет продолжен, выполнен или прерван.
Обработчик будет вызван только для первого URL, если ответ является перенаправлением.
page.route() не будет перехватывать запросы, перехваченные Service Worker. См. эту проблему. Мы рекомендуем отключать Service Workers при использовании перехвата запросов, установив service_workers в 'block'
.
page.route() не будет перехватывать первый запрос всплывающей страницы. Используйте browser_context.route() вместо этого.
Использование
Пример простого обработчика, который прерывает все запросы изображений:
- Синхронный
- Асинхронный
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()
или тот же фрагмент кода, использующий регулярное выражение:
- Синхронный
- Асинхронный
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, и оставлять все остальные запросы без изменений:
- Синхронный
- Асинхронный
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-кэш.
Аргументы
-
url
str | Pattern | Callable[URL]:bool#Глобальный шаблон, регулярное выражение или предикат, получающий URL для сопоставления при маршрутизации. Когда base_url через параметры контекста был предоставлен и переданный URL является путем, он объединяется через конструктор
new URL()
. -
handler
Callable[Route, Request]:Promise[Any] | Any#Функция-обработчик для маршрутизации запроса.
-
times
int (опционально) Добавлено в: v1.15#Сколько раз маршрут должен использоваться. По умолчанию он будет использоваться каждый раз.
Возвращает
route_from_har
Добавлено в: v1.23Если указано, сетевые запросы, выполняемые на странице, будут обслуживаться из HAR-файла. Подробнее о Воспроизведении из HAR.
Playwright не будет обслуживать запросы, перехваченные Service Worker, из HAR-файла. См. эту проблему. Мы рекомендуем отключать Service Workers при использовании перехвата запросов, установив service_workers в 'block'
.
Использование
page.route_from_har(har)
page.route_from_har(har, **kwargs)
Аргументы
-
har
Union[str, pathlib.Path]#Путь к HAR файлу с предварительно записанными сетевыми данными. Если
path
является относительным путем, то он разрешается относительно текущей рабочей директории. -
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. Это исключает размеры, время, страницу, куки, безопасность и другие типы информации HAR, которые не используются при воспроизведении из HAR. По умолчаниюminimal
. -
url
str | Pattern (опционально)#Глобальный шаблон, регулярное выражение или предикат для сопоставления URL запроса. Только запросы с URL, соответствующим шаблону, будут обслуживаться из HAR-файла. Если не указано, все запросы обслуживаются из HAR-файла.
Возвращает
route_web_socket
Добавлено в: v1.48Этот метод позволяет изменять соединения WebSocket, которые создаются страницей.
Обратите внимание, что только WebSocket
, созданные после вызова этого метода, будут маршрутизированы. Рекомендуется вызывать этот метод перед навигацией по странице.
Использование
Ниже приведен пример простого мока, который отвечает на одно сообщение. См. WebSocketRoute для получения более подробной информации и примеров.
- Синхронный
- Асинхронный
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)
Аргументы
-
url
str | Pattern | Callable[URL]:bool#Только WebSocket с URL, соответствующим этому шаблону, будут маршрутизированы. Строковый шаблон может быть относительным к параметру контекста base_url.
-
handler
Callable[WebSocketRoute]:Promise[Any] | Any#Функция-обработчик для маршрутизации WebSocket.
Возвращает
скриншот
Добавлено до v1.9Возвращает буфер с захваченным скриншотом.
Использование
page.screenshot()
page.screenshot(**kwargs)
Аргументы
-
animations
"disabled" | "allow" (опционально)#При установке в
"disabled"
, останавливает CSS-анимации, CSS-переходы и веб-анимации. Анимации получают разное обращение в зависимости от их продолжительности:- конечные анимации быстро перематываются до завершения, так что они вызовут событие
transitionend
. - бесконечные анимации отменяются до начального состояния, а затем воспроизводятся после скриншота.
По умолчанию
"allow"
, что оставляет анимации нетронутыми. - конечные анимации быстро перематываются до завершения, так что они вызовут событие
-
caret
"hide" | "initial" (опционально)#При установке в
"hide"
, скриншот скроет текстовый курсор. При установке в"initial"
, поведение текстового курсора не будет изменено. По умолчанию"hide"
. -
-
x
floatx-координата верхнего левого угла области обрезки
-
y
floaty-координата верхнего левого угла области обрезки
-
width
floatширина области обрезки
-
height
floatвысота области обрезки
Объект, который указывает обрезку результирующего изображения.
-
-
Если установлено в
true
, делает скриншот всей прокручиваемой страницы, вместо текущей видимой области. По умолчаниюfalse
. -
mask
List[Locator] (опционально)#Укажите локаторы, которые должны быть замаскированы при создании скриншота. Замаскированные элементы будут покрыты розовым прямоугольником
#FF00FF
(настраивается с помощью mask_color), который полностью покрывает их ограничивающий прямоугольник. Маска также применяется к невидимым элементам, см. Сопоставление только видимых элементов, чтобы отключить это. -
mask_color
str (опционально) Добавлено в: v1.35#Укажите цвет наложения для замаскированных элементов в CSS-формате цвета. Цвет по умолчанию - розовый
#FF00FF
. -
omit_background
bool (опционально)#Скрывает белый фон по умолчанию и позволяет делать скриншоты с прозрачностью. Не применимо к изображениям
jpeg
. По умолчаниюfalse
. -
path
Union[str, pathlib.Path] (опционально)#Путь к файлу для сохранения изображения. Тип скриншота будет определен по расширению файла. Если path является относительным путем, то он разрешается относительно текущей рабочей директории. Если путь не указан, изображение не будет сохранено на диск.
-
Качество изображения, от 0 до 100. Не применимо к изображениям
png
. -
scale
"css" | "device" (опционально)#При установке в
"css"
, скриншот будет иметь один пиксель на каждый css-пиксель на странице. Для устройств с высоким разрешением это позволит сохранить скриншоты небольшими. Использование опции"device"
создаст один пиксель на каждый пиксель устройства, так что скриншоты устройств с высоким разрешением будут в два раза больше или даже больше.По умолчанию
"device"
. -
style
str (опционально) Добавлено в: v1.41#Текст стиля, который будет применен при создании скриншота. Здесь вы можете скрыть динамические элементы, сделать элементы невидимыми или изменить их свойства, чтобы помочь вам создать повторяемые скриншоты. Этот стиль проникает в Shadow DOM и применяется к внутренним фреймам.
-
Максимальное время в миллисекундах. По умолчанию
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-разметка, которую нужно назначить странице.
-
Максимальное время выполнения операции в миллисекундах, по умолчанию 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В случае нескольких страниц в одном браузере каждая страница может иметь свой собственный размер области просмотра. Однако browser.new_context() позволяет установить размер области просмотра (и не только) для всех страниц в контексте сразу.
page.set_viewport_size() изменит размер страницы. Многие веб-сайты не ожидают, что телефоны будут менять размер, поэтому вы должны установить размер области просмотра перед переходом на страницу. page.set_viewport_size() также сбросит размер screen
, используйте browser.new_context() с параметрами screen
и viewport
, если вам нужен более точный контроль над этими свойствами.
Использование
- Синхронный
- Асинхронный
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)
Аргументы
-
url
str | Pattern | Callable[URL]:bool#Глобальный шаблон, регулярное выражение или предикат, получающий URL для сопоставления при маршрутизации.
-
handler
Callable[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().
Ожидает, пока заданное событие
не будет вызвано. Если предикат предоставлен, он передает значение события в функцию predicate
и ждет, пока predicate(event)
не вернет истинное значение. Выдаст ошибку, если страница будет закрыта до вызова события
.
Использование
page.wait_for_event(event)
page.wait_for_event(event, **kwargs)
Аргументы
-
Имя события, то же самое, которое обычно передается в
*.on(event)
. -
predicate
Callable (опционально)#Получает данные события и разрешает истинное значение, когда ожидание должно завершиться.
-
Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя метод browser_context.set_default_timeout().
Возвращает
wait_for_function
Добавлено до версии v1.9Возвращает, когда выражение возвращает истинное значение. Разрешается в JSHandle истинного значения.
Использование
page.wait_for_function() может быть использован для наблюдения за изменением размера области просмотра:
- Синхронный
- Асинхронный
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():
- Синхронный
- Асинхронный
selector = ".foo"
page.wait_for_function("selector => !!document.querySelector(selector)", selector)
selector = ".foo"
await page.wait_for_function("selector => !!document.querySelector(selector)", selector)
Аргументы
-
JavaScript-выражение, которое будет выполнено в контексте браузера. Если выражение оценивается как функция, функция автоматически вызывается.
-
arg
EvaluationArgument (опционально)#Опциональный аргумент для передачи в выражение.
-
polling
float | "raf" (опционально)#Если polling равно
'raf'
, то выражение постоянно выполняется вrequestAnimationFrame
callback. Если polling является числом, то оно рассматривается как интервал в миллисекундах, с которым функция будет выполняться. По умолчаниюraf
. -
Максимальное время ожидания в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
wait_for_load_state
Добавлено до версии v1.9Возвращает, когда достигнуто требуемое состояние загрузки.
Этот метод завершается, когда страница достигает требуемого состояния загрузки, по умолчанию load
. Навигация должна быть завершена, когда вызывается этот метод. Если текущий документ уже достиг требуемого состояния, метод завершается немедленно.
В большинстве случаев этот метод не требуется, так как Playwright автоматически ожидает перед каждым действием.
Использование
- Синхронный
- Асинхронный
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".
- Синхронный
- Асинхронный
with page.expect_popup() as page_info:
page.get_by_role("button").click() # клик вызывает всплывающее окно.
popup = page_info.value
# Ожидание события "DOMContentLoaded".
popup.wait_for_load_state("domcontentloaded")
print(popup.title()) # всплывающее окно готово к использованию.
async with page.expect_popup() as page_info:
await page.get_by_role("button").click() # клик вызывает всплывающее окно.
popup = await page_info.value
# Ожидание события "DOMContentLoaded".
await popup.wait_for_load_state("domcontentloaded")
print(await popup.title()) # всплывающее окно готово к использованию.
Аргументы
-
state
"load" | "domcontentloaded" | "networkidle" (необязательно)#Необязательное состояние загрузки для ожидания, по умолчанию
load
. Если состояние уже было достигнуто при загрузке текущего документа, метод завершается немедленно. Может быть одним из:'load'
- ожидание событияload
.'domcontentloaded'
- ожидание событияDOMContentLoaded
.'networkidle'
- НЕ РЕКОМЕНДУЕТСЯ ожидание, пока не будет сетевых соединений в течение как минимум500
мс. Не используйте этот метод для тестирования, полагайтесь на веб-утверждения для оценки готовности.
-
timeout
float (необязательно)#Максимальное время операции в миллисекундах, по умолчанию 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.
Использование
- Синхронный
- Асинхронный
page.click("a.delayed-navigation") # клик по ссылке косвенно вызывает навигацию
page.wait_for_url("**/target.html")
await page.click("a.delayed-navigation") # клик по ссылке косвенно вызывает навигацию
await page.wait_for_url("**/target.html")
Аргументы
-
url
str | Pattern | Callable[URL]:bool#Глобальный шаблон, регулярное выражение или предикат, получающий URL для сопоставления во время ожидания навигации. Обратите внимание, что если параметр является строкой без символов подстановки, метод будет ожидать навигации на URL, который точно равен строке.
-
timeout
float (необязательно)#Максимальное время операции в миллисекундах, по умолчанию 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, связанные со страницей.
Это не включает ServiceWorkers
Использование
page.workers
Возвращает
События
on("close")
Добавлено до версии v1.9Вызывается, когда страница закрывается.
Использование
page.on("close", handler)
Данные события
on("console")
Добавлено до версии v1.9Вызывается, когда JavaScript на странице вызывает один из методов консольного API, например, console.log
или console.dir
.
Аргументы, переданные в console.log
, доступны в аргументе обработчика события ConsoleMessage.
Использование
- Синхронный
- Асинхронный
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Вызывается, когда страница падает. Страницы браузера могут падать, если они пытаются выделить слишком много памяти. Когда страница падает, текущие и последующие операции будут вызывать исключения.
Наиболее распространенный способ справиться с падениями - поймать исключение:
- Синхронный
- Асинхронный
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Вызывается, когда на странице происходит необработанное исключение.
- Синхронный
- Асинхронный
# Логировать все необработанные ошибки в терминал
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. Например, при открытии всплывающего окна с window.open('http://example.com')
, это событие сработает, когда сетевой запрос к "http://example.com" будет выполнен и его ответ начнет загружаться во всплывающем окне. Если вы хотите маршрутизировать/слушать этот сетевой запрос, используйте browser_context.route() и browser_context.on("request") соответственно, вместо аналогичных методов на Page.
- Синхронный
- Асинхронный
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)
Данные события
Устаревшие
accessibility
Добавлено до версии v1.9Это свойство не рекомендуется использовать. Пожалуйста, используйте другие библиотеки, такие как Axe, если вам нужно тестировать доступность страницы. См. наш руководство по интеграции с Axe для Node.js.
Использование
page.accessibility
Тип
check
Добавлено до версии v1.9Используйте основанный на локаторах locator.check() вместо этого. Подробнее о локаторах.
Этот метод отмечает элемент, соответствующий selector, выполняя следующие шаги:
- Найдите элемент, соответствующий selector. Если его нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Убедитесь, что найденный элемент является флажком или радиокнопкой. Если нет, этот метод выбрасывает исключение. Если элемент уже отмечен, этот метод возвращается немедленно.
- Подождите, пока не будут выполнены проверки actionability на найденном элементе, если только не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в видимую область, если это необходимо.
- Используйте page.mouse, чтобы щелкнуть в центре элемента.
- Убедитесь, что элемент теперь отмечен. Если нет, этот метод выбрасывает исключение.
Если все шаги в совокупности не завершились в течение указанного timeout, этот метод выбрасывает TimeoutError. Передача нулевого таймаута отключает это.
Использование
page.check(selector)
page.check(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Нужно ли обходить проверки actionability. По умолчанию
false
. -
no_wait_after
bool (опционально)#УстарелоЭта опция не имеет эффекта.
Эта опция не имеет эффекта.
-
position
Dict (опционально) Добавлено в: v1.11#Точка, используемая относительно верхнего левого угла элемента. Если не указано, используется видимая точка элемента.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить таймаут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout(). -
trial
bool (опционально) Добавлено в: v1.11#Если установлено, этот метод выполняет только проверки actionability и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию без его выполнения.
Возвращает
click
Добавлено до версии v1.9Используйте основанный на локаторах locator.click() вместо этого. Подробнее о локаторах.
Этот метод щелкает по элементу, соответствующему selector, выполняя следующие шаги:
- Найдите элемент, соответствующий selector. Если его нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Подождите, пока не будут выполнены проверки actionability на найденном элементе, если только не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в видимую область, если это необходимо.
- Используйте page.mouse, чтобы щелкнуть в центре элемента или в указанной position.
- Подождите, пока инициированные навигации не завершатся успешно или не завершатся с ошибкой, если только не установлена опция no_wait_after.
Если все шаги в совокупности не завершились в течение указанного timeout, этот метод выбрасывает TimeoutError. Передача нулевого таймаута отключает это.
Использование
page.click(selector)
page.click(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
button
"left" | "right" | "middle" (опционально)#По умолчанию
left
. -
click_count
int (опционально)#По умолчанию 1. См. UIEvent.detail.
-
Время ожидания между
mousedown
иmouseup
в миллисекундах. По умолчанию 0. -
Нужно ли обходить проверки actionability. По умолчанию
false
. -
modifiers
List["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (опционально)#Модификаторы клавиш для нажатия. Гарантирует, что только эти модификаторы нажаты во время операции, а затем восстанавливает текущие модификаторы. Если не указано, используются текущие нажатые модификаторы. "ControlOrMeta" разрешается в "Control" на Windows и Linux и в "Meta" на macOS.
-
no_wait_after
bool (опционально)#УстарелоЭта опция по умолчанию будет
true
в будущем.Действия, инициирующие навигации, ожидают, пока эти навигации не произойдут и страницы не начнут загружаться. Вы можете отказаться от ожидания, установив этот флаг. Вам понадобится эта опция только в исключительных случаях, таких как навигация на недоступные страницы. По умолчанию
false
. -
Точка, используемая относительно верхнего левого угла элемента. Если не указано, используется видимая точка элемента.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить таймаут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout(). -
trial
bool (опционально) Добавлено в: v1.11#Если установлено, этот метод выполняет только проверки actionability и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию без его выполнения. Обратите внимание, что клавиатурныеmodifiers
будут нажаты независимо отtrial
, чтобы позволить тестировать элементы, которые видны только при нажатии этих клавиш.
Возвращает
dblclick
Добавлено до версии v1.9Используйте основанный на локаторах locator.dblclick() вместо этого. Подробнее о локаторах.
Этот метод выполняет двойной щелчок по элементу, соответствующему selector, выполняя следующие шаги:
- Найдите элемент, соответствующий selector. Если его нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Подождите, пока не будут выполнены проверки actionability на найденном элементе, если только не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в видимую область, если это необходимо.
- Используйте 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
. -
modifiers
List["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (опционально)#Модификаторы клавиш для нажатия. Гарантирует, что только эти модификаторы нажаты во время операции, а затем восстанавливает текущие модификаторы. Если не указано, используются текущие нажатые модификаторы. "ControlOrMeta" разрешается в "Control" на Windows и Linux и в "Meta" на macOS.
-
no_wait_after
bool (опционально)#УстарелоЭта опция не имеет эффекта.
Эта опция не имеет эффекта.
-
Точка, используемая относительно верхнего левого угла элемента. Если не указано, используется видимая точка элемента.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить таймаут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout(). -
trial
bool (опционально) Добавлено в: 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
и всплывают.
Поскольку 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_init
EvaluationArgument (опционально)#Опциональные свойства инициализации, специфичные для события.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
eval_on_selector
Добавлено в: v1.9Этот метод не ожидает, пока элемент пройдет проверки на возможность действия, и поэтому может привести к нестабильным тестам. Вместо этого используйте locator.evaluate(), другие вспомогательные методы Locator или утверждения, ориентированные на веб.
Метод находит элемент, соответствующий указанному селектору на странице, и передает его в качестве первого аргумента в expression. Если ни один элемент не соответствует селектору, метод выбрасывает ошибку. Возвращает значение expression.
Если expression возвращает Promise, то page.eval_on_selector() будет ожидать разрешения промиса и вернет его значение.
Использование
- Синхронный
- Асинхронный
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 выражение, которое будет выполнено в контексте браузера. Если выражение оценивается как функция, функция автоматически вызывается.
-
arg
EvaluationArgument (опционально)#Опциональный аргумент для передачи в expression.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
Возвращает
eval_on_selector_all
Добавлено в: v1.9В большинстве случаев locator.evaluate_all(), другие вспомогательные методы Locator и утверждения, ориентированные на веб, выполняют работу лучше.
Метод находит все элементы, соответствующие указанному селектору на странице, и передает массив найденных элементов в качестве первого аргумента в expression. Возвращает результат вызова expression.
Если expression возвращает Promise, то page.eval_on_selector_all() будет ожидать разрешения промиса и вернет его значение.
Использование
- Синхронный
- Асинхронный
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 выражение, которое будет выполнено в контексте браузера. Если выражение оценивается как функция, функция автоматически вызывается.
-
arg
EvaluationArgument (опционально)#Опциональный аргумент для передачи в expression.
Возвращает
expect_navigation
Добавлено до v1.9Этот метод по своей природе является гонкой, пожалуйста, используйте page.wait_for_url() вместо него.
Ожидает навигации основного фрейма и возвращает ответ основного ресурса. В случае нескольких перенаправлений навигация разрешится с ответом последнего перенаправления. В случае навигации к другому якорю или навигации из-за использования History API, навигация разрешится с null
.
Использование
Это разрешается, когда страница переходит на новый URL или перезагружается. Это полезно, когда вы выполняете код, который косвенно вызывает навигацию страницы. Например, цель клика имеет обработчик onclick
, который вызывает навигацию из setTimeout
. Рассмотрим этот пример:
- Синхронный
- Асинхронный
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 считается навигацией.
Аргументы
-
Максимальное время операции в миллисекундах, по умолчанию 30 секунд, передайте
0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_navigation_timeout(), browser_context.set_default_timeout(), page.set_default_navigation_timeout() или page.set_default_timeout(). -
url
str | Pattern | Callable[URL]:bool (опционально)#Глобальный шаблон, регулярное выражение или предикат, получающий URL для совпадения при ожидании навигации. Обратите внимание, что если параметр является строкой без символов подстановки, метод будет ожидать навигации к URL, который точно равен строке.
-
wait_until
"load" | "domcontentloaded" | "networkidle" | "commit" (опционально)#Когда считать операцию успешной, по умолчанию
load
. События могут быть:'domcontentloaded'
- считать операцию завершенной, когда событиеDOMContentLoaded
будет вызвано.'load'
- считать операцию завершенной, когда событиеload
будет вызвано.'networkidle'
- НЕ РЕКОМЕНДУЕТСЯ считать операцию завершенной, когда нет сетевых соединений в течение как минимум500
мс. Не используйте этот метод для тестирования, полагайтесь на веб-утверждения для оценки готовности.'commit'
- считать операцию завершенной, когда сетевой ответ получен и документ начал загружаться.
Возвращает
fill
Добавлено до v1.9Используйте основанный на локаторах locator.fill() вместо этого. Подробнее о локаторах.
Этот метод ожидает элемент, соответствующий selector, ожидает проверки actionability, фокусируется на элементе, заполняет его и вызывает событие input
после заполнения. Обратите внимание, что вы можете передать пустую строку, чтобы очистить поле ввода.
Если целевой элемент не является <input>
, <textarea>
или [contenteditable]
элементом, этот метод выбрасывает ошибку. Однако, если элемент находится внутри элемента <label>
, который имеет ассоциированный control, будет заполнен именно этот элемент управления.
Для отправки более детализированных событий клавиатуры используйте locator.press_sequentially().
Использование
page.fill(selector, value)
page.fill(selector, value, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Значение для заполнения элемента
<input>
,<textarea>
или[contenteditable]
. -
force
bool (опционально) Добавлено в: v1.13#Нужно ли обходить проверки actionability. По умолчанию
false
. -
no_wait_after
bool (опционально)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
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)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
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)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Имя атрибута, для которого нужно получить значение.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout() методы.
Возвращает
hover
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.hover() вместо этого. Подробнее о локаторах.
Этот метод наводит курсор на элемент, соответствующий селектору, выполняя следующие шаги:
- Найдите элемент, соответствующий селектору. Если его нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Подождите, пока не будут выполнены проверки действительности на найденном элементе, если не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в видимую область, если это необходимо.
- Используйте page.mouse для наведения курсора на центр элемента или указанную позицию.
Если все шаги в совокупности не завершились в течение указанного таймаута, этот метод выбрасывает TimeoutError. Передача нулевого таймаута отключает это.
Использование
page.hover(selector)
page.hover(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Нужно ли обходить проверки действительности. По умолчанию
false
. -
modifiers
List["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (опционально)#Модификаторные клавиши для нажатия. Гарантирует, что только эти модификаторы будут нажаты во время операции, а затем восстанавливает текущие модификаторы. Если не указано, используются текущие нажатые модификаторы. "ControlOrMeta" разрешается как "Control" на Windows и Linux и как "Meta" на macOS.
-
no_wait_after
bool (опционально) Добавлено в: v1.28#УстарелоЭта опция не имеет эффекта.
Эта опция не имеет эффекта.
-
Точка, используемая относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить таймаут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout(). -
trial
bool (опционально) Добавлено в: v1.11#Если установлено, этот метод выполняет только проверки действительности и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию без его выполнения. Обратите внимание, что клавиатурныеmodifiers
будут нажаты независимо отtrial
, чтобы позволить тестировать элементы, которые видны только при нажатии этих клавиш.
Возвращает
inner_html
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.inner_html() вместо этого. Подробнее о локаторах.
Возвращает element.innerHTML
.
Использование
page.inner_html(selector)
page.inner_html(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
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)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
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>
, который имеет связанный контрол, возвращает значение контрола.
Использование
page.input_value(selector)
page.input_value(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить таймаут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
is_checked
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.is_checked() вместо этого. Подробнее о локаторах.
Возвращает, отмечен ли элемент. Выбрасывает исключение, если элемент не является флажком или радиокнопкой.
Использование
page.is_checked(selector)
page.is_checked(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить таймаут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
is_disabled
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.is_disabled() вместо этого. Подробнее о локаторах.
Возвращает, отключен ли элемент, противоположность включенному.
Использование
page.is_disabled(selector)
page.is_disabled(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
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)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить таймаут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
is_enabled
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.is_enabled() вместо этого. Подробнее о локаторах.
Возвращает, является ли элемент включенным.
Использование
page.is_enabled(selector)
page.is_enabled(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить таймаут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
is_hidden
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.is_hidden() вместо этого. Подробнее о локаторах.
Возвращает, скрыт ли элемент, противоположность видимому. Селектор, который не соответствует ни одному элементу, считается скрытым.
Использование
page.is_hidden(selector)
page.is_hidden(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Устарело
Эта опция игнорируется. page.is_hidden() не ждет, пока элемент станет скрытым, и возвращает результат немедленно.
Возвращает
is_visible
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.is_visible() вместо этого. Подробнее о локаторах.
Возвращает, является ли элемент видимым. Селектор, который не соответствует ни одному элементу, считается невидимым.
Использование
page.is_visible(selector)
page.is_visible(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Устарело
Этот параметр игнорируется. 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"
. При указании с модификатором, модификатор нажимается и удерживается, пока не будет нажата последующая клавиша.
Использование
- Синхронный
- Асинхронный
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_after
bool (опционально)#УстарелоЭтот параметр по умолчанию будет
true
в будущем.Действия, инициирующие навигацию, ожидают, пока эти навигации произойдут и страницы начнут загружаться. Вы можете отказаться от ожидания, установив этот флаг. Вам понадобится этот параметр только в исключительных случаях, таких как навигация на недоступные страницы. По умолчанию
false
. -
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
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)
Аргументы
-
Селектор для запроса.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
Возвращает
query_selector_all
Добавлено в: v1.9Используйте основанный на локаторах метод page.locator() вместо этого. Подробнее о локаторах.
Метод находит все элементы, соответствующие указанному селектору на странице. Если ни один элемент не соответствует селектору, возвращаемое значение разрешается в []
.
Использование
page.query_selector_all(selector)
Аргументы
Возвращает
select_option
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.select_option() вместо этого. Подробнее о локаторах.
Этот метод ожидает элемент, соответствующий селектору, ожидает проверки действительности, ждет, пока все указанные опции будут присутствовать в элементе <select>
, и выбирает эти опции.
Если целевой элемент не является элементом <select>
, этот метод выбрасывает ошибку. Однако, если элемент находится внутри элемента <label>
, который имеет связанный контрол, будет использован контрол.
Возвращает массив значений опций, которые были успешно выбраны.
Вызывает событие change
и input
, как только все предоставленные опции были выбраны.
Использование
- Синхронный
- Асинхронный
# Одиночный выбор, соответствующий значению или метке
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"])
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
force
bool (опционально) Добавлено в: v1.13#Нужно ли обходить проверки действительности. По умолчанию
false
. -
no_wait_after
bool (опционально)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout(). -
element
ElementHandle | List[ElementHandle] (опционально)#Элементы опций для выбора. Опционально.
-
index
int | List[int] (опционально)#Опции для выбора по индексу. Опционально.
-
value
str | List[str] (опционально)#Опции для выбора по значению. Если
<select>
имеет атрибутmultiple
, все указанные опции выбираются, в противном случае выбирается только первая опция, соответствующая одному из переданных значений. Опционально. -
label
str | List[str] (опционально)#Опции для выбора по метке. Если
<select>
имеет атрибутmultiple
, все указанные опции выбираются, в противном случае выбирается только первая опция, соответствующая одной из переданных меток. Опционально.
Возвращает
set_checked
Добавлено в: v1.15Используйте основанный на локаторах метод locator.set_checked() вместо этого. Подробнее о локаторах.
Этот метод отмечает или снимает отметку с элемента, соответствующего селектору, выполняя следующие шаги:
- Найдите элемент, соответствующий селектору. Если его нет, дождитесь, пока соответствующий элемент не будет добавлен в DOM.
- Убедитесь, что найденный элемент является флажком или радиокнопкой. Если нет, этот метод выбрасывает исключение.
- Если элемент уже имеет правильное состояние отметки, этот метод возвращает результат немедленно.
- Дождитесь проверки действительности на найденном элементе, если только не установлен параметр force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в видимую область, если это необходимо.
- Используйте page.mouse для нажатия в центр элемента.
- Убедитесь, что элемент теперь отмечен или снят с отметки. Если нет, этот метод выбрасывает исключение.
Если все шаги в совокупности не завершились в течение указанного тайм-аута, этот метод выбрасывает TimeoutError. Передача нулевого тайм-аута отключает это.
Использование
page.set_checked(selector, checked)
page.set_checked(selector, checked, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Нужно ли отметить или снять отметку с флажка.
-
Нужно ли обходить проверки действительности. По умолчанию
false
. -
no_wait_after
bool (опционально)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
Точка для использования относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout(). -
Если установлено, этот метод выполняет только проверки действительности и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент будет готов к действию без его выполнения.
Возвращает
set_input_files
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.set_input_files() вместо этого. Подробнее о локаторах.
Устанавливает значение файлового ввода в указанные пути к файлам или файлы. Если некоторые из filePaths
являются относительными путями, они разрешаются относительно текущей рабочей директории. Для пустого массива очищает выбранные файлы. Для входных данных с атрибутом [webkitdirectory]
поддерживается только один путь к директории.
Этот метод ожидает, что селектор указывает на элемент ввода. Однако, если элемент находится внутри элемента <label>
, который имеет ассоциированный контроль, он будет нацелен на контроль.
Использование
page.set_input_files(selector, files)
page.set_input_files(selector, files, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
files
Union[str, pathlib.Path] | List[Union[str, pathlib.Path]] | Dict | List[Dict]# -
no_wait_after
bool (опционально)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout().
Возвращает
tap
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.tap() вместо этого. Подробнее о локаторах.
Этот метод выполняет нажатие на элемент, соответствующий селектору, выполняя следующие шаги:
- Найдите элемент, соответствующий селектору. Если его нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Подождите, пока не будут выполнены проверки действительности на соответствующем элементе, если только не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в видимую область, если это необходимо.
- Используйте page.touchscreen для нажатия в центр элемента или указанную позицию.
Если все шаги в совокупности не завершились в течение указанного тайм-аута, этот метод выбрасывает TimeoutError. Передача нулевого тайм-аута отключает это.
Метод page.tap() выбросит исключение, если опция has_touch контекста браузера равна false.
Использование
page.tap(selector)
page.tap(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Нужно ли обходить проверки действительности. По умолчанию
false
. -
modifiers
List["Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift"] (опционально)#Модификаторы клавиш для нажатия. Гарантирует, что только эти модификаторы будут нажаты во время операции, а затем восстанавливает текущие модификаторы. Если не указано, используются текущие нажатые модификаторы. "ControlOrMeta" разрешается в "Control" на Windows и Linux и в "Meta" на macOS.
-
no_wait_after
bool (опционально)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
Точка для использования относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout(). -
trial
bool (опционально) Добавлено в: v1.11#Если установлено, этот метод выполняет только проверки действительности и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент не будет готов к действию без его выполнения. Обратите внимание, что клавиатурныеmodifiers
будут нажаты независимо отtrial
, чтобы позволить тестировать элементы, которые видны только при нажатии этих клавиш.
Возвращает
text_content
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.text_content() вместо этого. Подробнее о локаторах.
Возвращает element.textContent
.
Использование
page.text_content(selector)
page.text_content(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
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_after
bool (опционально)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout() методы.
Возвращает
uncheck
Добавлено до версии v1.9Используйте основанный на локаторах метод locator.uncheck() вместо этого. Подробнее о локаторах.
Этот метод снимает отметку с элемента, соответствующего селектору, выполняя следующие шаги:
- Найдите элемент, соответствующий селектору. Если его нет, подождите, пока соответствующий элемент не будет добавлен в DOM.
- Убедитесь, что соответствующий элемент является флажком или радиокнопкой. Если нет, этот метод выбрасывает исключение. Если элемент уже снят с отметки, этот метод возвращается немедленно.
- Подождите, пока не будут выполнены проверки действительности на соответствующем элементе, если только не установлена опция force. Если элемент отсоединяется во время проверок, все действие повторяется.
- Прокрутите элемент в видимую область, если это необходимо.
- Используйте page.mouse для нажатия в центр элемента.
- Убедитесь, что элемент теперь снят с отметки. Если нет, этот метод выбрасывает исключение.
Если все шаги в совокупности не завершились в течение указанного тайм-аута, этот метод выбрасывает TimeoutError. Передача нулевого тайм-аута отключает это.
Использование
page.uncheck(selector)
page.uncheck(selector, **kwargs)
Аргументы
-
Селектор для поиска элемента. Если несколько элементов удовлетворяют селектору, будет использован первый.
-
Нужно ли обходить проверки действительности. По умолчанию
false
. -
no_wait_after
bool (опционально)#УстарелоЭтот параметр не имеет эффекта.
Этот параметр не имеет эффекта.
-
position
Dict (опционально) Добавлено в: v1.11#Точка для использования относительно верхнего левого угла рамки элемента. Если не указано, используется видимая точка элемента.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout() методы. -
trial
bool (опционально) Добавлено в: v1.11#Если установлено, этот метод выполняет только проверки действительности и пропускает действие. По умолчанию
false
. Полезно для ожидания, пока элемент не будет готов к действию без его выполнения.
Возвращает
wait_for_selector
Добавлено до версии v1.9Используйте веб-утверждения, которые утверждают видимость, или основанный на локаторах метод locator.wait_for() вместо этого. Подробнее о локаторах.
Возвращает, когда элемент, указанный селектором, удовлетворяет опции state. Возвращает null
, если ожидание для hidden
или detached
.
Playwright автоматически ожидает, пока элемент не будет готов перед выполнением действия. Использование объектов Locator и веб-первых утверждений делает код свободным от ожидания селектора.
Ожидайте, пока селектор не удовлетворит опцию state (либо появится/исчезнет из DOM, либо станет видимым/скрытым). Если на момент вызова метода селектор уже удовлетворяет условию, метод вернется немедленно. Если селектор не удовлетворяет условию в течение тайм-аута в миллисекундах, функция выбросит исключение.
Использование
Этот метод работает через навигации:
- Синхронный
- Асинхронный
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("Загружено изображение: " + 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("Загружено изображение: " + 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'
- ожидание, пока элемент не будет иметь пустую рамку и не будетvisibility:hidden
. Обратите внимание, что элемент без содержимого или сdisplay:none
имеет пустую рамку и не считается видимым.'hidden'
- ожидание, пока элемент не будет отсоединен от DOM, или не будет иметь пустую рамку илиvisibility:hidden
. Это противоположно опции'visible'
.
-
strict
bool (опционально) Добавлено в: v1.14#Если true, вызов требует, чтобы селектор разрешался в один элемент. Если данный селектор разрешается в более чем один элемент, вызов выбрасывает исключение.
-
Максимальное время в миллисекундах. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут. Значение по умолчанию можно изменить, используя методы browser_context.set_default_timeout() или page.set_default_timeout() методы.
Возвращает
wait_for_timeout
Добавлено до версии v1.9Никогда не используйте ожидание по времени в производственной среде. Тесты, которые зависят от времени ожидания, по своей природе ненадежны. Используйте действия Locator и веб-утверждения, которые ожидают автоматически.
Ожидает заданное время ожидания в миллисекундах.
Обратите внимание, что page.waitForTimeout()
следует использовать только для отладки. Тесты, использующие таймер в производственной среде, будут ненадежными. Вместо этого используйте сигналы, такие как сетевые события, появление селекторов и другие.
Использование
- Синхронный
- Асинхронный
# ожидание 1 секунду
page.wait_for_timeout(1000)
# ожидание 1 секунду
await page.wait_for_timeout(1000)
Аргументы
Возвращает