Entschlüsseln von Oddspot-Daten durch AntwortabfangenPython

Python-Programme
Anonymous
 Entschlüsseln von Oddspot-Daten durch Antwortabfangen

Post by Anonymous »

Code: Select all

import asyncio
from datetime import datetime, UTC
from playwright.async_api import async_playwright

captured = []

async def run():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page()

async def handle_response(response):
url = response.url.lower()

if any(k in url for k in ("feed", "ajax", "match", "odds")):
try:
content_type = response.headers.get("content-type", "")
if content_type.startswith("application/json"):
data = await response.json()
captured.append({
"url": response.url,
"data": data,
"captured_at": datetime.now(UTC).isoformat(),
})
print(f"Captured: {response.url}")
except Exception:
pass  # ignore non-JSON payloads

page.on("response", handle_response)

await page.goto(
"https://www.oddsportal.com/football/england/premier-league/",
wait_until="networkidle",
)

await asyncio.sleep(5)
print("Captured responses:", len(captured))
await browser.close()

asyncio.run(run())

Meine Ausgabe:

Code: Select all

Captured responses: 0
Wir gehen davon aus, dass wir JSON-Nutzlasten erfassen, die Quoten- oder Spieldaten enthalten, zum Beispiel:

Code: Select all

 {
"matches": [
{
"id": 123,
"home": "Arsenal",
"away": "Chelsea",
"details": {
"1x2 Match Winner": {
"1": "1.39",
"X": "4.83",
"2": "5.15"
},
"Full Time Over/Under": {
"Over/Under +3.5": {
"Over": "N/A",
"Under": "N/A"
},
"Over/Under +4.5": {
"Over": "1.21",
"Under": "3.58"
},
"Over/Under +4.5": {
"Over": "1.21",
"Under": "3.58"
},
"Over/Under +5": {
"Over": "N/A",
"Under": "N/A"
},}
}
]
}
Problemstellung
Oddsportal lädt absichtlich Daten über nicht standardmäßige/verschleierte Antworten, die
  • nicht mit Response.json() geparst werden können
  • Ihre tatsächliche API ist ausgeblendet
Beobachtung
  • Beim Navigieren in Registerkarten von (z. B. „Handicap“, „1X2“), ruft dies weiterhin die Abrufanforderung https://www.oddsportal.com/pl/match-eve ... IN&lang=pl auf und diese Antwort besteht nur aus einigen Zahlen. Gehen Sie also davon aus, dass die Website dekodiert it
Anstatt darauf zu warten, dass der Browser den Text auf dem Bildschirm rendert (DOM-Parsing), fangen wir die vom Server kommenden Rohdaten ab.
  • Konzept: Wenn Sie auf eine Registerkarte klicken (z. B. „Handicap“, „1X2“), fordert der Browser Daten vom Server an. Wir erfassen diese JSON-Antwort direkt.
  • Vorteil: Keine Renderingkosten. Sie erhalten die Daten sofort, ohne auf die Aktualisierung der Benutzeroberfläche warten zu müssen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post