Spec-Zone.ru › Playwright

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);

Аргументы

  • options Object (необязательно)
    • code number (необязательно)

      Необязательный код закрытия.

    • reason string (необязательно)

      Необязательная причина закрытия.

Возвращает

  • Promise<void>

connectToServer​

По умолчанию маршрутизируемый WebSocket не подключается к серверу, что позволяет имитировать весь обмен данными через WebSocket. Этот метод подключается к настоящему серверу WebSocket и возвращает экземпляр WebSocketRoute на стороне сервера, позволяя отправлять сообщения серверу и получать их от него.

После подключения к серверу:

  • Сообщения, полученные от сервера, будут автоматически пересылаться WebSocket на странице, если только для WebSocketRoute на стороне сервера не вызван webSocketRoute.onMessage().
  • Сообщения, отправленные вызовом WebSocket.send() на странице, будут автоматически пересылаться серверу, если только для исходного WebSocketRoute не вызван webSocketRoute.onMessage().

Подробнее см. примеры в начале страницы.

Использование

webSocketRoute.connectToServer();

Возвращает

  • WebSocketRoute

onClose​

Позволяет обрабатывать закрытие WebSocket.close.

По умолчанию закрытие одной стороны соединения — на странице или сервере — приводит к закрытию другой стороны. Однако при настройке обработчика webSocketRoute.onClose() пересылка закрытия по умолчанию отключается, и обработчик должен самостоятельно позаботиться об этом.

Использование

webSocketRoute.onClose(handler);

Аргументы

  • handler function(number | [undefined]):Promise<Object> | Object

    Функция, обрабатывающая закрытие WebSocket. Получает необязательный код закрытия и необязательную причину закрытия.

onMessage​

Этот метод позволяет обрабатывать сообщения, отправляемые WebSocket со стороны страницы или сервера.

При вызове для исходного маршрута WebSocket этот метод обрабатывает сообщения, отправленные со страницы. Их можно обработать, ответив с помощью webSocketRoute.send(), переслав их в серверное соединение, возвращённое методом webSocketRoute.connectToServer(), или выполнив другие действия.

После вызова этого метода сообщения больше не пересылаются автоматически серверу или странице — это нужно делать вручную с помощью вызова webSocketRoute.send(). Подробнее см. примеры в начале страницы.

Повторный вызов этого метода заменит обработчик новым.

Использование

webSocketRoute.onMessage(handler);

Аргументы

  • handler function(string):Promise<Object> | Object

    Функция, обрабатывающая сообщения.

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' });
});

Возвращает

  • Array<string>

send​

Отправляет сообщение в WebSocket. При вызове для исходного WebSocket отправляет сообщение странице. При вызове для результата webSocketRoute.connectToServer() отправляет сообщение серверу. Подробнее см. примеры в начале страницы.

Использование

webSocketRoute.send(message);

Аргументы

  • message string | Buffer

    Отправляемое сообщение.

url​

URL WebSocket, созданного на странице.

Использование

webSocketRoute.url();

Возвращает

  • string

© 2026 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/api/class-websocketroute

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API