back at it again

This commit is contained in:
2024-09-03 22:48:40 +02:00
parent 15015402cb
commit 63fc2fdd19
6 changed files with 270 additions and 28 deletions

View File

@@ -19,6 +19,7 @@
"import signal\n",
"import json\n",
"import time\n",
"import socket\n",
"from bs4 import BeautifulSoup as bs\n",
"from selenium import webdriver\n",
"from selenium.webdriver.chrome.options import Options\n",
@@ -26,7 +27,7 @@
"from selenium.webdriver import ActionChains\n",
"from selenium.webdriver.support.wait import WebDriverWait\n",
"from selenium.webdriver.support import expected_conditions as ec\n",
"from IPython.display import display, display_html, DisplayHandle, Image"
"from IPython.display import display, DisplayHandle, Image"
]
},
{
@@ -55,9 +56,16 @@
"def setupChromeDriver():\n",
" chrome_options = Options()\n",
" chrome_options.add_argument(\"--headless\")\n",
" chrome_options.add_argument(\"--window-size=1280,720\")\n",
" chrome_options.add_argument(\"--no-sandbox\")\n",
" chrome_options.add_argument(\"--mute-audio\")\n",
" chrome_options.add_argument(\"--window-size=1280,720\")\n",
" chrome_options.add_argument(\"--disable-dev-shm-usage\")\n",
" chrome_options.add_argument(\"--disable-features=WebRtcHideLocalIpsWithMdns\")\n",
" chrome_options.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})\n",
" #chrome_options.add_extension('./qryn-webrtc-exporter.crx')\n",
"\n",
" driver = webdriver.Chrome(options=chrome_options)\n",
" #driver = webdriver.Remote(command_executor='http://localhost:4444', options=chrome_options)\n",
" return driver"
]
},
@@ -68,16 +76,13 @@
"metadata": {},
"outputs": [],
"source": [
"def saveStats(stats):\n",
"\n",
" with open('stats.json', 'r+') as jsonFile:\n",
" try:\n",
" data = json.load(jsonFile)\n",
" except json.JSONDecodeError:\n",
" data = []\n",
" data.append(stats)\n",
" jsonFile.seek(0)\n",
" json.dump(data, jsonFile, indent=4)\n",
"def saveStats(stats: dict):\n",
" try:\n",
" sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n",
" sock.sendto(json.dumps(stats).encode(), ('localhost', 8094))\n",
" sock.close()\n",
" except socket.error as e:\n",
" print(f'Got socket error: {e}')\n",
"\n",
"def downloadStats(driver: webdriver.Chrome, display_handle: DisplayHandle):\n",
" html = driver.find_element(By.CLASS_NAME ,'vjs-stats-list')\n",
@@ -103,18 +108,33 @@
" htmlBS.div.insert_before(peersDiv)\n",
" \n",
" stats = htmlBS.find_all('div', attrs={'style': 'display: block;'})\n",
" statsList = dict(\n",
" map(\n",
" lambda stat: (\n",
" stat.div.text, \n",
" stat.span.text.replace('\\u21d3', 'down').replace('down/', 'down /').replace('\\u21d1 ', 'up').replace('\\u21d1', 'up').replace('\\u00b7', '-').strip()\n",
" ), stats\n",
" )\n",
" )\n",
"\n",
" display_handle.update(statsList)\n",
" statsDict = {\n",
" stat.div.text: stat.span.text.replace('\\u21d3', 'down').replace('down/', 'down /').replace('\\u21d1 ', 'up').replace('\\u21d1', 'up').replace('\\u00b7', '-').strip()\n",
" for stat in stats\n",
" }\n",
" \n",
" for stat in statsDict:\n",
" if 'Buffer State' == stat:\n",
" statsDict[stat] = statsDict[stat][1:-1].split(', ')\n",
"\n",
" saveStats(statsList)"
" # statsDict = {\n",
" # 'userName': dict(\n",
" # map(\n",
" # lambda stat: (\n",
" # stat.div.text, \n",
" # stat.span.text.replace('\\u21d3', 'down').replace('down/', 'down /').replace('\\u21d1 ', 'up').replace('\\u21d1', 'up').replace('\\u00b7', '-').strip()\n",
" # ), stats\n",
" # )\n",
" # )\n",
" # }\n",
"\n",
" statsDict.update({'Timestamp': time.strftime('%Y-%m-%dT%H:%M:%S%z')})\n",
" statsDict['userName'] = 'user'\n",
"\n",
" display_handle.update(json.dumps(statsDict))\n",
"\n",
" saveStats(statsDict)"
]
},
{
@@ -134,7 +154,7 @@
" actions.click(driver.find_element(By.CLASS_NAME ,'video-js')).perform()\n",
" actions.context_click(driver.find_element(By.CLASS_NAME ,'video-js')).perform()\n",
" statsForNerds = driver.find_elements(By.CLASS_NAME ,'vjs-menu-item')\n",
" actions.pause(1)\n",
" actions.pause(2)\n",
" actions.click(statsForNerds[-1]).perform()\n",
" wait.until(ec.text_to_be_present_in_element((By.CLASS_NAME, 'vjs-stats-list'), 'Player'))\n",
" actions.move_to_element(driver.find_element(By.CLASS_NAME ,'vjs-peertube')).perform()\n",
@@ -158,11 +178,11 @@
"\n",
" signal.signal(signal.SIGINT, lambda signum, frame: interrupt_handler(signum, driver))\n",
" \n",
" setupStats(driver, \"https://tube.kobim.cloud/w/gFL48Fz3doCEnYwK46BwYN\")\n",
" setupStats(driver, \"https://tube.kobim.cloud/w/9hAbiwai4rsbw9QnPpPkCd\")\n",
"\n",
" display_handle = display(\"Loading...\", display_id=True)\n",
" \n",
" schedule.every(0.3).seconds.do(downloadStats, driver, display_handle)\n",
" schedule.every(1).seconds.do(downloadStats, driver, display_handle)\n",
" while True:\n",
" schedule.run_pending()"
]
@@ -184,7 +204,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.3"
"version": "3.12.5"
}
},
"nbformat": 4,