Перейти к основному содержимому

Выполнение кода

Выполняйте код Playwright и JavaScript для взаимодействий, выходящих за рамки отдельных вызовов инструментов.

browser_run_code_unsafe​

Выполняет фрагмент кода Playwright. Код представляет собой функцию JavaScript, вызываемую с единственным аргументом page, который предоставляет доступ ко всему API Playwright. Возвращаемое значение сериализуется и передаётся в ответе инструмента.

ПараметрТипОбязательныйОписание
codestringнетФункция JavaScript, содержащая код Playwright для выполнения
filenamestringнетЗагрузить код из указанного файла вместо передачи в code. Относительные пути разрешаются относительно корня рабочего пространства. Если указаны оба параметра, code игнорируется
warning

Этот инструмент выполняет произвольный JavaScript в процессе сервера Playwright и эквивалентен удалённому выполнению кода (RCE).

Проверка содержимого элемента​

→ browser_run_code_unsafe {
code: "async (page) => { return await page.getByTestId('todo-count').textContent(); }"
}
"3 items left"

Настройка геолокации​

→ browser_run_code_unsafe {
code: "async (page) => { await page.context().grantPermissions(['geolocation']); await page.context().setGeolocation({ latitude: 37.7749, longitude: -122.4194 }); }"
}

Ожидание определённого условия​

→ browser_run_code_unsafe {
code: "async (page) => { await page.waitForSelector('.loading', { state: 'hidden' }); return 'Loading complete'; }"
}
"Loading complete"

Работа с iframe​

→ browser_run_code_unsafe {
code: "async (page) => { const frame = page.frameLocator('#payment-iframe'); return await frame.locator('.total').textContent(); }"
}
"$49.99"

Операции с буфером обмена​

→ browser_run_code_unsafe {
code: "async (page) => { await page.context().grantPermissions(['clipboard-read', 'clipboard-write']); return await page.evaluate(() => navigator.clipboard.readText()); }"
}

Выполнение фрагмента кода из файла​

→ browser_run_code_unsafe { filename: "scripts/seed-cart.js" }

browser_evaluate​

Вычисляет выражение JavaScript на странице или для определённого элемента. В отличие от browser_run_code_unsafe, код выполняется внутри страницы, а не в процессе сервера.

ПараметрТипОбязательныйОписание
functionstringда() => { /* code */ } или (element) => { /* code */ }, если указан target
targetstringнетИдентификатор элемента или селектор элемента, для которого нужно выполнить код
filenamestringнетСохранить результат в файл вместо возврата в виде текста
→ browser_evaluate { function: "() => document.title" }
"TodoMVC - React"

→ browser_evaluate { function: "element => element.getAttribute('data-testid')", target: "e15" }
"submit-button"

→ browser_evaluate { function: "() => window.innerWidth + 'x' + window.innerHeight" }
"1280x720"

Когда использовать выполнение кода​

СценарийИспользуемый инструмент
Нажатие кнопкиbrowser_click
Заполнение поля формыbrowser_type или browser_fill_form
Чтение текста элементаbrowser_snapshot или browser_find
Проверка вычисленных стилейbrowser_evaluate
Сложная многошаговая логикаbrowser_run_code_unsafe
Геолокация и разрешенияbrowser_run_code_unsafe
Пользовательские условия ожиданияbrowser_run_code_unsafe
Взаимодействие с iframebrowser_run_code_unsafe