@nazar21015
Если используется webassembly.org, то сетевые запросы не видно.

Я решил, что это баг из разряда на стороне CDP/Chromium, etc, но если снаружи законнектиться к запущенному браузеру в BAS, то можно отловить этот сетевой запрос. То есть баг явно где-то на стороне BAS.
В рамках BAS это можно решить используя NodeJS: нужно получать remote_debugging_port, также конектится к нему и самому перехватывать сетевые запросы.
Как-то это сделать в рамках BAS, на форуме обсуждалось несколько раз, в том числе писал и я.
https://community.bablosoft.com/topic/25787/remote-debugging-port/5
Proof of concept:
import asyncio
import json
import httpx
from playwright.async_api import async_playwright
from urllib.parse import urlparse
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
def _url_to_ws_endpoint(endpoint_url: str) -> str:
"""
Convert an HTTP endpoint URL to a WebSocket endpoint URL.
:param endpoint_url: The HTTP endpoint URL.
:return: The WebSocket endpoint URL.
:raises ValueError: If unable to connect to the HTTP endpoint URL.
"""
if endpoint_url.startswith("ws"):
return endpoint_url
logger.debug("Preparing WebSocket: retrieving WebSocket URL from %s", endpoint_url)
http_url = endpoint_url if endpoint_url.endswith("/") else f"{endpoint_url}/"
http_url += "json/version/"
try:
response = httpx.get(http_url)
except httpx.ConnectError as exc:
raise
if response.status_code != 200:
raise ValueError(
f"Unexpected status {response.status_code} when connecting to {http_url}. "
"This might not be a DevTools server. Consider connecting via ws://."
)
json_data = json.loads(response.text)
logger.debug("WebSocket preparation response: %s", json_data)
return str(json_data["webSocketDebuggerUrl"])
async def main(remote_debugging_port: int):
"""
Connect to a browser via a remote debugging port and open a Twitch stream.
:param remote_debugging_port: The port where the remote debugging service is available.
:type remote_debugging_port: int
"""
ws_endpoint_url = _url_to_ws_endpoint(f"http://localhost:{remote_debugging_port}")
async with async_playwright() as p:
browser = await p.chromium.connect_over_cdp(ws_endpoint_url)
context = await browser.new_context()
# Log and intercept response
async def handle_response(response):
parsed_url = urlparse(response.url)
domain = parsed_url.netloc
print(f'Response Domain: {domain}')
# Listen for all responses
context.on('response', handle_response)
page = await context.new_page()
await page.goto('https://player.twitch.tv/?channel=twitchmedia28&parent=127.0.0.1')
while True:
await asyncio.sleep(10)
if __name__ == "__main__":
# Replace with your actual remote debugging port
remote_debugging_port = 40391
asyncio.run(main(remote_debugging_port=remote_debugging_port))
Response Domain: video-weaver.arn03.hls.ttvnw.net<=====
Response Domain: video-weaver.arn03.hls.ttvnw.net <=====
Response Domain: video-edge-c5603c.arn03.abs.hls.ttvnw.net
Response Domain: reporting.cdndex.io
Response Domain: video-weaver.arn03.hls.ttvnw.net <=====
Response Domain: video-edge-c5603c.arn03.abs.hls.ttvnw.net
Response Domain: gql.twitch.tv