back at it again
This commit is contained in:
@@ -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,
|
||||
|
Reference in New Issue
Block a user