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

WebSocketRoute

Когда маршрут WebSocket настроен с помощью page.route_web_socket() или browser_context.route_web_socket(), объект WebSocketRoute позволяет обрабатывать WebSocket, как это делает реальный сервер.

Мокирование

По умолчанию маршрутизированный WebSocket не подключается к серверу. Таким образом, вы можете имитировать всю коммуникацию через WebSocket. Вот пример, который отвечает на "request" с "response".

def message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
if message == "request":
ws.send("response")

page.route_web_socket("wss://example.com/ws", lambda ws: ws.on_message(
lambda message: message_handler(ws, message)
))

Поскольку мы не вызываем web_socket_route.connect_to_server внутри обработчика маршрута WebSocket, Playwright предполагает, что WebSocket будет имитирован, и автоматически открывает WebSocket внутри страницы.

Вот еще один пример, который обрабатывает JSON-сообщения:

def message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
json_message = json.loads(message)
if json_message["request"] == "question":
ws.send(json.dumps({ "response": "answer" }))

page.route_web_socket("wss://example.com/ws", lambda ws: ws.on_message(
lambda message: message_handler(ws, message)
))

Перехват

В качестве альтернативы, вы можете подключиться к реальному серверу, но перехватывать сообщения между ними и изменять или блокировать их. Вызов web_socket_route.connect_to_server возвращает серверный экземпляр WebSocketRoute, к которому вы можете отправлять сообщения или обрабатывать входящие сообщения.

Ниже приведен пример, который изменяет некоторые сообщения, отправляемые страницей на сервер. Сообщения, отправляемые с сервера на страницу, остаются нетронутыми, полагаясь на стандартную пересылку.

def message_handler(server: WebSocketRoute, message: Union[str, bytes]):
if message == "request":
server.send("request2")
else:
server.send(message)

def handler(ws: WebSocketRoute):
server = ws.connect_to_server()
ws.on_message(lambda message: message_handler(server, message))

page.route_web_socket("/ws", handler)

После подключения к серверу все сообщения пересылаются между страницей и сервером по умолчанию.

Однако, если вы вызываете web_socket_route.on_message() на оригинальном маршруте, сообщения от страницы к серверу больше не будут пересылаться, но должны обрабатываться обработчиком.

Аналогично, вызов web_socket_route.on_message() на серверном WebSocket прекратит пересылку сообщений от сервера к странице, и обработчик должен позаботиться о них.

Следующий пример блокирует некоторые сообщения в обоих направлениях. Поскольку он вызывает web_socket_route.on_message() в обоих направлениях, автоматической пересылки вообще нет.

def ws_message_handler(server: WebSocketRoute, message: Union[str, bytes]):
if message != "blocked-from-the-page":
server.send(message)

def server_message_handler(ws: WebSocketRoute, message: Union[str, bytes]):
if message != "blocked-from-the-server":
ws.send(message)

def handler(ws: WebSocketRoute):
server = ws.connect_to_server()
ws.on_message(lambda message: ws_message_handler(server, message))
server.on_message(lambda message: server_message_handler(ws, message))

page.route_web_socket("/ws", handler)

Methods

close

Added in: v1.48 webSocketRoute.close

Закрывает одну сторону WebSocket соединения.

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

web_socket_route.close()
web_socket_route.close(**kwargs)

Аргументы

Возвращает


on_close

Added in: v1.48 webSocketRoute.on_close

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

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

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

web_socket_route.on_close(handler)

Аргументы


on_message

Added in: v1.48 webSocketRoute.on_message

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

Когда вызывается на оригинальном маршруте WebSocket, этот метод обрабатывает сообщения, отправленные со страницы. Вы можете обрабатывать эти сообщения, отвечая на них с помощью web_socket_route.send(), пересылая их на серверное соединение, возвращенное web_socket_route.connect_to_server, или делая что-то еще.

После вызова этого метода сообщения не пересылаются автоматически на сервер или на страницу - вы должны сделать это вручную, вызвав web_socket_route.send(). См. примеры в начале для более подробной информации.

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

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

web_socket_route.on_message(handler)

Аргументы

  • handler Callable[str]:Promise[Any] | Any#

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


send

Added in: v1.48 webSocketRoute.send

Отправляет сообщение в WebSocket. Когда вызывается на оригинальном WebSocket, отправляет сообщение на страницу. Когда вызывается на результате web_socket_route.connect_to_server, отправляет сообщение на сервер. См. примеры в начале для более подробной информации.

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

web_socket_route.send(message)

Аргументы

  • message str | bytes#

    Сообщение для отправки.


Properties

connect_to_server

Added in: v1.48 webSocketRoute.connect_to_server

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

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

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

См. примеры в начале для более подробной информации.

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

web_socket_route.connect_to_server

Возвращает


url

Added in: v1.48 webSocketRoute.url

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

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

web_socket_route.url

Возвращает