WebSocketRoute
Каждый раз, когда маршрут WebSocket настраивается с помощью page.routeWebSocket() или browserContext.routeWebSocket(), объект WebSocketRoute позволяет обрабатывать WebSocket так, как это делал бы настоящий сервер.
Имитация
По умолчанию маршрутизируемый WebSocket не подключается к серверу. Это позволяет имитировать весь обмен данными через WebSocket. Вот пример, в котором на "request" отправляется ответ с "response".
await page.routeWebSocket('wss://example.com/ws', ws => {
ws.onMessage(message => {
if (message === 'request')
ws.send('response');
});
}); Поскольку мы не вызываем webSocketRoute.connectToServer() внутри обработчика маршрута WebSocket, Playwright предполагает, что WebSocket будет имитироваться, и автоматически открывает WebSocket на странице.
Вот ещё один пример обработки сообщений JSON:
await page.routeWebSocket('wss://example.com/ws', ws => {
ws.onMessage(message => {
const json = JSON.parse(message);
if (json.request === 'question')
ws.send(JSON.stringify({ response: 'answer' }));
});
}); Перехват
В качестве альтернативы можно подключиться к настоящему серверу, перехватывать промежуточные сообщения и изменять или блокировать их. Вызов webSocketRoute.connectToServer() возвращает экземпляр WebSocketRoute на стороне сервера, которому можно отправлять сообщения или обрабатывать входящие сообщения.
Ниже приведён пример изменения некоторых сообщений, отправляемых страницей на сервер. Сообщения, отправляемые сервером странице, остаются без изменений благодаря пересылке по умолчанию.
await page.routeWebSocket('/ws', ws => {
const server = ws.connectToServer();
ws.onMessage(message => {
if (message === 'request')
server.send('request2');
else
server.send(message);
});
}); После подключения к серверу все сообщения по умолчанию пересылаются между страницей и сервером.
Однако при вызове webSocketRoute.onMessage() для исходного маршрута сообщения со страницы на сервер перестанут пересылаться; вместо этого их должен обрабатывать обработчик.
Аналогично, вызов webSocketRoute.onMessage() для WebSocket на стороне сервера прекратит пересылку сообщений с сервера странице, и их должен обрабатывать обработчик.
В следующем примере некоторые сообщения блокируются в обоих направлениях. Поскольку webSocketRoute.onMessage() вызывается в обоих направлениях, автоматическая пересылка полностью отключена.
await page.routeWebSocket('/ws', ws => {
const server = ws.connectToServer();
ws.onMessage(message => {
if (message !== 'blocked-from-the-page')
server.send(message);
});
server.onMessage(message => {
if (message !== 'blocked-from-the-server')
ws.send(message);
});
}); Методы
close
Закрывает одну сторону WebSocket-соединения.
Использование
await webSocketRoute.close(); await webSocketRoute.close(options);
Аргументы
-
optionsObject (необязательно)-
codenumber (необязательно)Необязательный код закрытия.
-
reasonstring (необязательно)Необязательная причина закрытия.
-
Возвращает
connectToServer
По умолчанию маршрутизируемый WebSocket не подключается к серверу, что позволяет имитировать весь обмен данными через WebSocket. Этот метод подключается к настоящему серверу WebSocket и возвращает экземпляр WebSocketRoute на стороне сервера, позволяя отправлять сообщения серверу и получать их от него.
После подключения к серверу:
- Сообщения, полученные от сервера, будут автоматически пересылаться WebSocket на странице, если только для
WebSocketRouteна стороне сервера не вызван webSocketRoute.onMessage(). - Сообщения, отправленные вызовом
WebSocket.send()на странице, будут автоматически пересылаться серверу, если только для исходногоWebSocketRouteне вызван webSocketRoute.onMessage().
Подробнее см. примеры в начале страницы.
Использование
webSocketRoute.connectToServer();
Возвращает
onClose
Позволяет обрабатывать закрытие WebSocket.close.
По умолчанию закрытие одной стороны соединения — на странице или сервере — приводит к закрытию другой стороны. Однако при настройке обработчика webSocketRoute.onClose() пересылка закрытия по умолчанию отключается, и обработчик должен самостоятельно позаботиться об этом.
Использование
webSocketRoute.onClose(handler);
Аргументы
-
handlerfunction(number | [undefined]):Promise<Object> | ObjectФункция, обрабатывающая закрытие WebSocket. Получает необязательный код закрытия и необязательную причину закрытия.
onMessage
Этот метод позволяет обрабатывать сообщения, отправляемые WebSocket со стороны страницы или сервера.
При вызове для исходного маршрута WebSocket этот метод обрабатывает сообщения, отправленные со страницы. Их можно обработать, ответив с помощью webSocketRoute.send(), переслав их в серверное соединение, возвращённое методом webSocketRoute.connectToServer(), или выполнив другие действия.
После вызова этого метода сообщения больше не пересылаются автоматически серверу или странице — это нужно делать вручную с помощью вызова webSocketRoute.send(). Подробнее см. примеры в начале страницы.
Повторный вызов этого метода заменит обработчик новым.
Использование
webSocketRoute.onMessage(handler);
Аргументы
protocols
Список подпротоколов WebSocket, запрошенных страницей и переданных вторым аргументом конструктору WebSocket. Соответствует заголовку запроса Sec-WebSocket-Protocol.
Возвращает пустой массив, если протоколы не указаны.
Использование
await page.routeWebSocket('wss://example.com/ws', ws => {
if (ws.protocols().includes('chat.v2'))
ws.onMessage(message => ws.send(JSON.stringify({ version: 2, echo: message })));
else
ws.close({ code: 1002, reason: 'Unsupported protocol' });
}); Возвращает
send
Отправляет сообщение в WebSocket. При вызове для исходного WebSocket отправляет сообщение странице. При вызове для результата webSocketRoute.connectToServer() отправляет сообщение серверу. Подробнее см. примеры в начале страницы.
Использование
webSocketRoute.send(message);
Аргументы
url
URL WebSocket, созданного на странице.
Использование
webSocketRoute.url();
Возвращает
© 2026 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/api/class-websocketroute