{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "from datetime import date, datetime\n", "\n", "print(date)" ] }, { "cell_type": "code", "execution_count": 2, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2022-06-07\n" ] } ], "source": [ "print(date.today())" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 4, "outputs": [ { "ename": "RuntimeError", "evalue": "asyncio.run() cannot be called from a running event loop", "output_type": "error", "traceback": [ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", "\u001B[0;31mRuntimeError\u001B[0m Traceback (most recent call last)", "\u001B[0;32m/var/folders/9l/5sls926d02g2kzqb70_0c7rc0000gn/T/ipykernel_40530/2714877972.py\u001B[0m in \u001B[0;36m\u001B[0;34m\u001B[0m\n\u001B[1;32m 52\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 53\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 54\u001B[0;31m \u001B[0masyncio\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mrun\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mmain\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/asyncio/runners.py\u001B[0m in \u001B[0;36mrun\u001B[0;34m(main, debug)\u001B[0m\n\u001B[1;32m 31\u001B[0m \"\"\"\n\u001B[1;32m 32\u001B[0m \u001B[0;32mif\u001B[0m \u001B[0mevents\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_get_running_loop\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m \u001B[0;32mis\u001B[0m \u001B[0;32mnot\u001B[0m \u001B[0;32mNone\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 33\u001B[0;31m raise RuntimeError(\n\u001B[0m\u001B[1;32m 34\u001B[0m \"asyncio.run() cannot be called from a running event loop\")\n\u001B[1;32m 35\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;31mRuntimeError\u001B[0m: asyncio.run() cannot be called from a running event loop" ] } ], "source": [ "from playwright.sync_api import sync_playwright\n", "from playwright.async_api import async_playwright\n", "# from playwright_stealth import stealth_sync\n", "import asyncio\n", "\n", "async def run(pw):\n", "\n", " browser = await pw.chromium.launch(headless=False)\n", " # context = browser.new_context(\n", " # user_agent=ua,\n", " # )\n", "\n", "\n", " url = 'https://anilife.live/h/live?p=5aaf4907-da62-4b98-ba8f-59066a0dc0f4&a=none&player=jawcloud'\n", " #\n", " # if referer is not None:\n", " # LogicAniLife.headers[\"Referer\"] = referer\n", "\n", " # context = browser.new_context(extra_http_headers=LogicAniLife.headers)\n", " context = await browser.new_context()\n", " # LogicAniLife.headers[\"Cookie\"] = cookie_value\n", "\n", " # context.set_extra_http_headers(LogicAniLife.headers)\n", "\n", " page = await context.new_page()\n", "\n", "\n", "\n", " # page.on(\"request\", set_cookie)\n", " # stealth_sync(page)\n", " page.goto(\n", " url, wait_until=\"networkidle\"\n", " )\n", " page.wait_for_timeout(10000)\n", " # time.sleep(1)\n", " # page.reload()\n", "\n", " # time.sleep(10)\n", " cookies = context.cookies\n", " # print(cookies)\n", "\n", " # print(page.content())\n", " vod_url = page.evaluate(\n", " \"\"\"() => {\n", " return console.log(vodUrl_1080p) }\"\"\"\n", " )\n", " print(vod_url)\n", "\n", "async def main():\n", " async with async_playwright() as p:\n", " await main_run(p)\n", "\n", "\n", "asyncio.run(main())" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 5, "outputs": [ { "ename": "Error", "evalue": "Executable doesn't exist at /Users/yommi/Library/Caches/ms-playwright/chromium-939194/chrome-mac/Chromium.app/Contents/MacOS/Chromium\n╔═════════════════════════════════════════════════════════════════════════╗\n║ Looks like Playwright Test or Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚═════════════════════════════════════════════════════════════════════════╝", "output_type": "error", "traceback": [ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", "\u001B[0;31mError\u001B[0m Traceback (most recent call last)", "\u001B[0;32m/var/folders/9l/5sls926d02g2kzqb70_0c7rc0000gn/T/ipykernel_67283/2756312828.py\u001B[0m in \u001B[0;36m\u001B[0;34m\u001B[0m\n\u001B[1;32m 57\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 58\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 59\u001B[0;31m \u001B[0masyncio\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mrun\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mmain\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/site-packages/nest_asyncio.py\u001B[0m in \u001B[0;36mrun\u001B[0;34m(future, debug)\u001B[0m\n\u001B[1;32m 30\u001B[0m \u001B[0mloop\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0masyncio\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mget_event_loop\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 31\u001B[0m \u001B[0mloop\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mset_debug\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mdebug\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 32\u001B[0;31m \u001B[0;32mreturn\u001B[0m \u001B[0mloop\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mrun_until_complete\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mfuture\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 33\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 34\u001B[0m \u001B[0;32mif\u001B[0m \u001B[0msys\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mversion_info\u001B[0m \u001B[0;34m>=\u001B[0m \u001B[0;34m(\u001B[0m\u001B[0;36m3\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;36m6\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;36m0\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/site-packages/nest_asyncio.py\u001B[0m in \u001B[0;36mrun_until_complete\u001B[0;34m(self, future)\u001B[0m\n\u001B[1;32m 68\u001B[0m raise RuntimeError(\n\u001B[1;32m 69\u001B[0m 'Event loop stopped before Future completed.')\n\u001B[0;32m---> 70\u001B[0;31m \u001B[0;32mreturn\u001B[0m \u001B[0mf\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mresult\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 71\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 72\u001B[0m \u001B[0;32mdef\u001B[0m \u001B[0m_run_once\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mself\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/asyncio/futures.py\u001B[0m in \u001B[0;36mresult\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 176\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m__log_traceback\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0;32mFalse\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 177\u001B[0m \u001B[0;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_exception\u001B[0m \u001B[0;32mis\u001B[0m \u001B[0;32mnot\u001B[0m \u001B[0;32mNone\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 178\u001B[0;31m \u001B[0;32mraise\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_exception\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 179\u001B[0m \u001B[0;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_result\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 180\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/asyncio/tasks.py\u001B[0m in \u001B[0;36m__step\u001B[0;34m(***failed resolving arguments***)\u001B[0m\n\u001B[1;32m 278\u001B[0m \u001B[0;31m# We use the `send` method directly, because coroutines\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 279\u001B[0m \u001B[0;31m# don't have `__iter__` and `__next__` methods.\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 280\u001B[0;31m \u001B[0mresult\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mcoro\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0msend\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;32mNone\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 281\u001B[0m \u001B[0;32melse\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 282\u001B[0m \u001B[0mresult\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mcoro\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mthrow\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mexc\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/var/folders/9l/5sls926d02g2kzqb70_0c7rc0000gn/T/ipykernel_67283/2756312828.py\u001B[0m in \u001B[0;36mmain\u001B[0;34m()\u001B[0m\n\u001B[1;32m 54\u001B[0m \u001B[0;32masync\u001B[0m \u001B[0;32mdef\u001B[0m \u001B[0mmain\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 55\u001B[0m \u001B[0;32masync\u001B[0m \u001B[0;32mwith\u001B[0m \u001B[0masync_playwright\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m \u001B[0;32mas\u001B[0m \u001B[0mp\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 56\u001B[0;31m \u001B[0;32mawait\u001B[0m \u001B[0mmain_run\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mp\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 57\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 58\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/var/folders/9l/5sls926d02g2kzqb70_0c7rc0000gn/T/ipykernel_67283/2756312828.py\u001B[0m in \u001B[0;36mmain_run\u001B[0;34m(playwright)\u001B[0m\n\u001B[1;32m 11\u001B[0m \u001B[0;32masync\u001B[0m \u001B[0;32mdef\u001B[0m \u001B[0mmain_run\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mplaywright\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 12\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 13\u001B[0;31m \u001B[0mbrowser\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0;32mawait\u001B[0m \u001B[0mplaywright\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mchromium\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mlaunch\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mheadless\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0;32mFalse\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 14\u001B[0m \u001B[0;31m# context = browser.new_context(\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 15\u001B[0m \u001B[0;31m# user_agent=ua,\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/site-packages/playwright/async_api/_generated.py\u001B[0m in \u001B[0;36mlaunch\u001B[0;34m(self, executable_path, channel, args, ignore_default_args, handle_sigint, handle_sigterm, handle_sighup, timeout, env, headless, devtools, proxy, downloads_path, slow_mo, traces_dir, chromium_sandbox, firefox_user_prefs)\u001B[0m\n\u001B[1;32m 11600\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 11601\u001B[0m return mapping.from_impl(\n\u001B[0;32m> 11602\u001B[0;31m await self._async(\n\u001B[0m\u001B[1;32m 11603\u001B[0m \u001B[0;34m\"browser_type.launch\"\u001B[0m\u001B[0;34m,\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 11604\u001B[0m self._impl_obj.launch(\n", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/site-packages/playwright/_impl/_browser_type.py\u001B[0m in \u001B[0;36mlaunch\u001B[0;34m(self, executablePath, channel, args, ignoreDefaultArgs, handleSIGINT, handleSIGTERM, handleSIGHUP, timeout, env, headless, devtools, proxy, downloadsPath, slowMo, tracesDir, chromiumSandbox, firefoxUserPrefs)\u001B[0m\n\u001B[1;32m 86\u001B[0m \u001B[0mparams\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mlocals_to_params\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mlocals\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 87\u001B[0m \u001B[0mnormalize_launch_params\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mparams\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 88\u001B[0;31m \u001B[0;32mreturn\u001B[0m \u001B[0mfrom_channel\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;32mawait\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_channel\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0msend\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m\"launch\"\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mparams\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 89\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 90\u001B[0m async def launch_persistent_context(\n", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/site-packages/playwright/_impl/_connection.py\u001B[0m in \u001B[0;36msend\u001B[0;34m(self, method, params)\u001B[0m\n\u001B[1;32m 37\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 38\u001B[0m \u001B[0;32masync\u001B[0m \u001B[0;32mdef\u001B[0m \u001B[0msend\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mself\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mmethod\u001B[0m\u001B[0;34m:\u001B[0m \u001B[0mstr\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mparams\u001B[0m\u001B[0;34m:\u001B[0m \u001B[0mDict\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0;32mNone\u001B[0m\u001B[0;34m)\u001B[0m \u001B[0;34m->\u001B[0m \u001B[0mAny\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 39\u001B[0;31m \u001B[0;32mreturn\u001B[0m \u001B[0;32mawait\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0minner_send\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mmethod\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mparams\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0;32mFalse\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 40\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 41\u001B[0m \u001B[0;32masync\u001B[0m \u001B[0;32mdef\u001B[0m \u001B[0msend_return_as_dict\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mself\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mmethod\u001B[0m\u001B[0;34m:\u001B[0m \u001B[0mstr\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mparams\u001B[0m\u001B[0;34m:\u001B[0m \u001B[0mDict\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0;32mNone\u001B[0m\u001B[0;34m)\u001B[0m \u001B[0;34m->\u001B[0m \u001B[0mAny\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/site-packages/playwright/_impl/_connection.py\u001B[0m in \u001B[0;36minner_send\u001B[0;34m(self, method, params, return_as_dict)\u001B[0m\n\u001B[1;32m 61\u001B[0m \u001B[0;32mif\u001B[0m \u001B[0;32mnot\u001B[0m \u001B[0mcallback\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mfuture\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mdone\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 62\u001B[0m \u001B[0mcallback\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mfuture\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mcancel\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m---> 63\u001B[0;31m \u001B[0mresult\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mnext\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0miter\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mdone\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mresult\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 64\u001B[0m \u001B[0;31m# Protocol now has named return values, assume result is one level deeper unless\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 65\u001B[0m \u001B[0;31m# there is explicit ambiguity.\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/asyncio/futures.py\u001B[0m in \u001B[0;36mresult\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 176\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m__log_traceback\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0;32mFalse\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 177\u001B[0m \u001B[0;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_exception\u001B[0m \u001B[0;32mis\u001B[0m \u001B[0;32mnot\u001B[0m \u001B[0;32mNone\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m--> 178\u001B[0;31m \u001B[0;32mraise\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_exception\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 179\u001B[0m \u001B[0;32mreturn\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_result\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 180\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;31mError\u001B[0m: Executable doesn't exist at /Users/yommi/Library/Caches/ms-playwright/chromium-939194/chrome-mac/Chromium.app/Contents/MacOS/Chromium\n╔═════════════════════════════════════════════════════════════════════════╗\n║ Looks like Playwright Test or Playwright was just installed or updated. ║\n║ Please run the following command to download new browsers: ║\n║ ║\n║ playwright install ║\n║ ║\n║ <3 Playwright Team ║\n╚═════════════════════════════════════════════════════════════════════════╝" ] } ], "source": [ "# !playwright install\n", "\n", "from playwright.sync_api import sync_playwright\n", "from playwright.async_api import async_playwright\n", "# from playwright_stealth import stealth_sync\n", "import asyncio\n", "import nest_asyncio\n", "nest_asyncio.apply()\n", "\n", "\n", "async def main_run(playwright):\n", "\n", " browser = await playwright.chromium.launch(headless=False)\n", " # context = browser.new_context(\n", " # user_agent=ua,\n", " # )\n", "\n", "\n", " url = 'https://sir.kr'\n", " #\n", " # if referer is not None:\n", " # LogicAniLife.headers[\"Referer\"] = referer\n", "\n", " # context = browser.new_context(extra_http_headers=LogicAniLife.headers)\n", " context = await browser.new_context()\n", " # LogicAniLife.headers[\"Cookie\"] = cookie_value\n", "\n", " # context.set_extra_http_headers(LogicAniLife.headers)\n", "\n", " page = await context.new_page()\n", "\n", "\n", "\n", " # page.on(\"request\", set_cookie)\n", " # stealth_sync(page)\n", " page.goto(\n", " url, wait_until=\"networkidle\"\n", " )\n", " page.wait_for_timeout(10000)\n", " # time.sleep(1)\n", " # page.reload()\n", "\n", " # time.sleep(10)\n", " cookies = context.cookies\n", " # print(cookies)\n", "\n", " # print(page.content())\n", " vod_url = page.evaluate(\n", " \"\"\"() => {\n", " return console.log(vodUrl_1080p) }\"\"\"\n", " )\n", " print(vod_url)\n", "\n", "async def main():\n", " async with async_playwright() as p:\n", " await main_run(p)\n", "\n", "\n", "asyncio.run(main())" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 2, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "'c h(w=1t){R(\"S\",{\"T\":{\"U\":\"r-q\",\"V\":\"\\\\/\\\\/u.d\\\\/y\\\\/x\\\\/4\\\\/r-q.Q\"},\"Y\":{\"p\":\"\",\"10\":\"\",\"11\":\"12-14\",\"15\":1},\"16\":[{\"p\":\"b:\\\\/\\\\/18-Z.d\\\\/O\\\\/I\\\\/N\\\\/o.A\",\"B\":\"o\"}],\"D\":{\"E\":\"8\",\"z\":\"G H\"},\"J\":\"\",\"K\":\"\\\\\\\\a\\\\\\\\f\\\\\\\\n\\\\\\\\e\\\\\\\\5\\\\\\\\k\\\\\\\\i\\\\\\\\e\\\\\\\\3\\\\\\\\g\\\\\\\\L\\\\\\\\m\\\\\\\\5\\\\\\\\M\\\\\\\\3\\\\\\\\e\\\\\\\\n\\\\\\\\j\\\\\\\\19\\\\\\\\P\\\\\\\\a\\\\\\\\f\\\\\\\\m\\\\\\\\1b\\\\\\\\3\\\\\\\\1a\\\\\\\\3\\\\\\\\g\\\\\\\\5\\\\\\\\k\\\\\\\\1y\\\\\\\\g\\\\\\\\a\\\\\\\\f\\\\\\\\1z\\\\\\\\t\\\\\\\\3\\\\\\\\j\\\\\\\\i\\\\\\\\1B\\\\\\\\5\\\\\\\\t\\\\\\\\1C\\\\\\\\1D\",\"1E\":9,\"1F\":9,\"1G\":9,\"1H\":\"[1u]나의 히어로 아카데미아 6기1k.1s\",\"1d\":1,\"1e\":1,\"1f\":[],\"1g\":1,\"1h\":[\"1i:\\\\/\\\\/1c.1j.l\\\\/\"],\"1l\":1,\"1m\":\"0\",\"1n\":\"b:\\\\/\\\\/1o.l\\\\/\",\"1q\":1,\"1r\":\"2\",\"1w\":\"4\",\"F\":\"1p+1v=\",\"1A\":\"b:\\\\/\\\\/u.d\\\\/y\\\\/x\\\\/4\\\\/4-8.13.7\\\\/4.1x?v=2\"},1,w)}$(c(){$(C).17(c(){X s=9;W(s){h()}})});', 62, 106, '|false||x5a|jwplayer|x4d||||true|x59|https|function|xyz|x6c|x7a|x6a|fireload|x4a|x47|x44|com|x6b|x4e|thumbnails|file|red|tube|fireplay|x32|ndoodle||source|assets|player|fontfamily|vtt|kind|document|captions|fontSize|jwPlayerKey|Trebuchet|MS|down|defaultImage|ck|x52|x57|cb81181382a6f4d29d4c9785d130fb12|cdn|x31|css|FirePlayer|c58ec9af29371058432c2c0ddf1f3c9a|skin|name|url|if|var|logo|nydoodle|link|position|top||right|active|tracks|ready|cdn1|x45|x54|x34|tracker|displaytitle|rememberPosition|advertising|p2p|p2pTrackers|wss|openwebtorrent|05|popactive|poplimit|popurl|firevideoplayer|ksaKvjlJRbnrPXSGpuPVqfscYS9|downloadFile|downloadType|mkv|null|OHLI|rZFhulEcXvUQMbyWAmIQyyjPjZAQPLw|videoPlayer|js|x64|x49|jwPlayerURL|x69|x51|x3d|SubtitleManager|jwplayer8button1|jwplayer8quality|title'.split('|'), 0, {}))\n" ] } ], "source": [ "import re\n", "\n", "def baseN(num,b,numerals=\"0123456789abcdefghijklmnopqrstuvwxyz\"):\n", " return ((num == 0) and numerals[0]) or (baseN(num // b, b, numerals).lstrip(numerals[0]) + numerals[num % b])\n", "\n", "def unpack(p, a, c, k, e=None, d=None):\n", " while (c):\n", " c-=1\n", " if (k[c]):\n", " p = re.sub(\"\\\\b\" + baseN(c, a) + \"\\\\b\", k[c], p)\n", " return p\n", "\n", "encrypted = r'''eval(function(p, a, c, k, e, d) {\n", " e = function(c) {\n", " return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))\n", " }\n", " ;\n", " if (!''.replace(/^/, String)) {\n", " while (c--) {\n", " d[e(c)] = k[c] || e(c)\n", " }\n", " k = [function(e) {\n", " return d[e]\n", " }\n", " ];\n", " e = function() {\n", " return '\\\\w+'\n", " }\n", " ;\n", " c = 1\n", " }\n", " ;while (c--) {\n", " if (k[c]) {\n", " p = p.replace(new RegExp('\\\\b' + e(c) + '\\\\b','g'), k[c])\n", " }\n", " }\n", " return p\n", " }('c h(w=1t){R(\"S\",{\"T\":{\"U\":\"r-q\",\"V\":\"\\\\/\\\\/u.d\\\\/y\\\\/x\\\\/4\\\\/r-q.Q\"},\"Y\":{\"p\":\"\",\"10\":\"\",\"11\":\"12-14\",\"15\":1},\"16\":[{\"p\":\"b:\\\\/\\\\/18-Z.d\\\\/O\\\\/I\\\\/N\\\\/o.A\",\"B\":\"o\"}],\"D\":{\"E\":\"8\",\"z\":\"G H\"},\"J\":\"\",\"K\":\"\\\\\\\\a\\\\\\\\f\\\\\\\\n\\\\\\\\e\\\\\\\\5\\\\\\\\k\\\\\\\\i\\\\\\\\e\\\\\\\\3\\\\\\\\g\\\\\\\\L\\\\\\\\m\\\\\\\\5\\\\\\\\M\\\\\\\\3\\\\\\\\e\\\\\\\\n\\\\\\\\j\\\\\\\\19\\\\\\\\P\\\\\\\\a\\\\\\\\f\\\\\\\\m\\\\\\\\1b\\\\\\\\3\\\\\\\\1a\\\\\\\\3\\\\\\\\g\\\\\\\\5\\\\\\\\k\\\\\\\\1y\\\\\\\\g\\\\\\\\a\\\\\\\\f\\\\\\\\1z\\\\\\\\t\\\\\\\\3\\\\\\\\j\\\\\\\\i\\\\\\\\1B\\\\\\\\5\\\\\\\\t\\\\\\\\1C\\\\\\\\1D\",\"1E\":9,\"1F\":9,\"1G\":9,\"1H\":\"[1u]나의 히어로 아카데미아 6기1k.1s\",\"1d\":1,\"1e\":1,\"1f\":[],\"1g\":1,\"1h\":[\"1i:\\\\/\\\\/1c.1j.l\\\\/\"],\"1l\":1,\"1m\":\"0\",\"1n\":\"b:\\\\/\\\\/1o.l\\\\/\",\"1q\":1,\"1r\":\"2\",\"1w\":\"4\",\"F\":\"1p+1v=\",\"1A\":\"b:\\\\/\\\\/u.d\\\\/y\\\\/x\\\\/4\\\\/4-8.13.7\\\\/4.1x?v=2\"},1,w)}$(c(){$(C).17(c(){X s=9;W(s){h()}})});', 62, 106, '|false||x5a|jwplayer|x4d||||true|x59|https|function|xyz|x6c|x7a|x6a|fireload|x4a|x47|x44|com|x6b|x4e|thumbnails|file|red|tube|fireplay|x32|ndoodle||source|assets|player|fontfamily|vtt|kind|document|captions|fontSize|jwPlayerKey|Trebuchet|MS|down|defaultImage|ck|x52|x57|cb81181382a6f4d29d4c9785d130fb12|cdn|x31|css|FirePlayer|c58ec9af29371058432c2c0ddf1f3c9a|skin|name|url|if|var|logo|nydoodle|link|position|top||right|active|tracks|ready|cdn1|x45|x54|x34|tracker|displaytitle|rememberPosition|advertising|p2p|p2pTrackers|wss|openwebtorrent|05|popactive|poplimit|popurl|firevideoplayer|ksaKvjlJRbnrPXSGpuPVqfscYS9|downloadFile|downloadType|mkv|null|OHLI|rZFhulEcXvUQMbyWAmIQyyjPjZAQPLw|videoPlayer|js|x64|x49|jwPlayerURL|x69|x51|x3d|SubtitleManager|jwplayer8button1|jwplayer8quality|title'.split('|'), 0, {}))\n", "'''\n", "\n", "encrypted = encrypted.split('}(')[1][:-1]\n", "\n", "def unpack(p, a, c, k, e=None, d=None):\n", " ''' unpack\n", " Unpacker for the popular Javascript compression algorithm.\n", "\n", " @param p template code\n", " @param a radix for variables in p\n", " @param c number of variables in p\n", " @param k list of c variable substitutions\n", " @param e not used\n", " @param d not used\n", " @return p decompressed string\n", " '''\n", " # Paul Koppen, 2011\n", " for i in xrange(c-1,-1,-1):\n", " if k[i]: p = re.sub('\\\\b'+int2base(i,a)+'\\\\b', k[i], p)\n", " return p\n", "\n", "print(encrypted)\n", "\n", "print(eval('unpack(' + encrypted))" ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": null, "outputs": [], "source": [], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 4, "outputs": [ { "ename": "TypeError", "evalue": "memoryview: a bytes-like object is required, not 'str'", "output_type": "error", "traceback": [ "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", "\u001B[0;31mTypeError\u001B[0m Traceback (most recent call last)", "\u001B[0;32m/var/folders/9l/5sls926d02g2kzqb70_0c7rc0000gn/T/ipykernel_78001/3486714554.py\u001B[0m in \u001B[0;36m\u001B[0;34m\u001B[0m\n\u001B[1;32m 6\u001B[0m \u001B[0mdata\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0;34m'console.log'\u001B[0m \u001B[0;34m+\u001B[0m \u001B[0mdata\u001B[0m\u001B[0;34m[\u001B[0m\u001B[0;36m4\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m]\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 7\u001B[0m \u001B[0mp\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0msubprocess\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mPopen\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m[\u001B[0m\u001B[0;34m'node'\u001B[0m\u001B[0;34m]\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mstdin\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0msubprocess\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mPIPE\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mstdout\u001B[0m\u001B[0;34m=\u001B[0m\u001B[0msubprocess\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mPIPE\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m----> 8\u001B[0;31m \u001B[0mstdout\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mstderr\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mp\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0mcommunicate\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mdata\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 9\u001B[0m \u001B[0mprint\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mstdout\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/subprocess.py\u001B[0m in \u001B[0;36mcommunicate\u001B[0;34m(self, input, timeout)\u001B[0m\n\u001B[1;32m 1026\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 1027\u001B[0m \u001B[0;32mtry\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m-> 1028\u001B[0;31m \u001B[0mstdout\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mstderr\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_communicate\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0minput\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mendtime\u001B[0m\u001B[0;34m,\u001B[0m \u001B[0mtimeout\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 1029\u001B[0m \u001B[0;32mexcept\u001B[0m \u001B[0mKeyboardInterrupt\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 1030\u001B[0m \u001B[0;31m# https://bugs.python.org/issue25942\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;32m/Volumes/WD/Users/yommi/miniforge3/envs/ani-downloader/lib/python3.8/subprocess.py\u001B[0m in \u001B[0;36m_communicate\u001B[0;34m(self, input, endtime, orig_timeout)\u001B[0m\n\u001B[1;32m 1846\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 1847\u001B[0m \u001B[0;32mif\u001B[0m \u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_input\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0;32m-> 1848\u001B[0;31m \u001B[0minput_view\u001B[0m \u001B[0;34m=\u001B[0m \u001B[0mmemoryview\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0mself\u001B[0m\u001B[0;34m.\u001B[0m\u001B[0m_input\u001B[0m\u001B[0;34m)\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n\u001B[0m\u001B[1;32m 1849\u001B[0m \u001B[0;34m\u001B[0m\u001B[0m\n\u001B[1;32m 1850\u001B[0m \u001B[0;32mwith\u001B[0m \u001B[0m_PopenSelector\u001B[0m\u001B[0;34m(\u001B[0m\u001B[0;34m)\u001B[0m \u001B[0;32mas\u001B[0m \u001B[0mselector\u001B[0m\u001B[0;34m:\u001B[0m\u001B[0;34m\u001B[0m\u001B[0;34m\u001B[0m\u001B[0m\n", "\u001B[0;31mTypeError\u001B[0m: memoryview: a bytes-like object is required, not 'str'" ] } ], "source": [ "import subprocess\n", "# import StringIO\n", "\n", "data = r\"\"\"eval(function(p,a,c,k,e,r){e=String;if('0'.replace(0,e)==0){while(c--)r[e(c)]=k[c];k=[function(e){return r[e]||e}];e=function(){return'^$'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c]);return p}('document.body.innerHTML=\"