Как перехватить wss (websocket) подключаясь к сайту через selenium?

Пользователь

от johnpaul.blick , в категории: Другие , год назад

Как перехватить wss (websocket) подключаясь к сайту через selenium?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от brooklyn , 9 месяцев назад

@johnpaul.blick 

Перехватить WSS (WebSocket) трафик можно, используя инструменты, такие как Browsermob-Proxy или Pyppeteer, которые могут работать вместе с Selenium.


Вот пример использования Browsermob-Proxy для перехвата трафика WebSocket:

  1. Установите Browsermob-Proxy с помощью команды pip:
1
pip install browsermob-proxy


  1. Запустите Browsermob-Proxy:
1
2
3
4
5
from browsermobproxy import Server

server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()


  1. Создайте профиль Firefox и настройте его на использование прокси-сервера:
1
2
3
4
5
from selenium import webdriver

profile = webdriver.FirefoxProfile()
profile.set_proxy(proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)


  1. Настройте прокси-сервер на перехват WebSocket-трафика:
1
proxy.new_har(options={'captureHeaders': True, 'captureContent': True, 'captureBinaryContent': True})


  1. Перейдите на сайт и взаимодействуйте с WebSocket-соединением:
1
2
3
driver.get("https://example.com")
websocket = proxy.ws("wss://example.com/socket.io/")
websocket.send("Hello, world!")


  1. Получите данные о WebSocket-трафике:
1
2
3
4
result = proxy.har
for entry in result['log']['entries']:
    if 'websocket' in entry['_resourceType']:
        print(entry)


Этот пример позволит перехватывать WebSocket-трафик на сайтах, использующих WebSocket-протокол и WSS-протокол, но вы можете изменить его, чтобы адаптировать его к вашей конкретной ситуации.

Пользователь

от kennedi_pfeffer , 9 месяцев назад

@johnpaul.blick 

Для перехвата wss (websocket) подключения в Selenium необходимо использовать инструменты для работы с сетевым трафиком, такие как библиотека BrowserMob Proxy. С помощью него можно настроить прокси-сервер, который будет перехватывать весь трафик между браузером и сервером, включая websocket-соединения.


Пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from browsermobproxy import Server
from selenium import webdriver

# запускаем BrowserMob Proxy
server = Server("путь/к/исполняемому/файлу/browsermob-proxy")
server.start()
proxy = server.create_proxy()

# настраиваем прокси-сервер в браузере
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server={0}'.format(proxy.proxy))

# запускаем браузер с настроенным прокси-сервером
driver = webdriver.Chrome(executable_path="путь/к/исполняемому/файлу/chromedriver", options=chrome_options)

# перехватываем websocket-соединения
proxy.new_har("websocket test")
# открываем сайт с websocket-соединением
driver.get("https://example.com/")
har = proxy.har
for entry in har['log']['entries']:
    if entry['_resourceType'] == 'websocket':  # находим все websocket-соединения
        print(entry['request']['url'])  # выводим URL соединения

# останавливаем прокси-сервер и браузер
server.stop()
driver.quit()


В этом примере мы запускаем прокси-сервер BrowserMob Proxy, настраиваем его в браузере, открываем сайт с websocket-соединением и перехватываем все websocket-запросы. Затем мы выводим URL каждого websocket-соединения в консоль. В конце мы останавливаем прокси-сервер и закрываем браузер.