diff --git a/src/HowBadIsMyBatch.ipynb b/src/HowBadIsMyBatch.ipynb index 758eb882374..359655a9b88 100644 --- a/src/HowBadIsMyBatch.ipynb +++ b/src/HowBadIsMyBatch.ipynb @@ -110,29 +110,31 @@ " service = ChromeService(executable_path = ChromeDriverManager().install()),\n", " options = _getOptions(downloadDir, isHeadless))\n", "\n", - "def saveCaptchaImageAs(captchaImageFile):\n", + "def saveCaptchaImageAs(driver, captchaImageFile):\n", " captchaImage = driver.find_element(By.CSS_SELECTOR, \"img[src='captchaImage']\")\n", " with open(captchaImageFile, 'wb') as file:\n", " file.write(captchaImage.screenshot_as_png)\n", "\n", - "def existsElementWithId(id):\n", - " return len(driver.find_elements(By.ID, id)) > 0" + "def existsElementWithId(driver, id):\n", + " return len(driver.find_elements(By.ID, id)) > 0\n", + "\n", + "def isCaptchaSolved(driver):\n", + " return not existsElementWithId(driver, \"wordverify\")" ] }, { "cell_type": "code", "execution_count": null, - "id": "8ac81845", + "id": "aef4d1c3", "metadata": {}, "outputs": [], "source": [ - "downloadDir = \"/home/frankknoll/Dokumente/Corona/projects/HowBadIsMyBatch/src/VAERS/tmp\"\n", - "file2Download = '2022VAERSData.zip'\n", - "captchaImageFile = 'captchaImage.jpeg'\n", + "import time\n", + "import os.path\n", "\n", - "driver = getWebDriver(downloadDir, isHeadless = False)\n", - "driver.get('https://vaers.hhs.gov/eSubDownload/index.jsp?fn=' + file2Download)\n", - "saveCaptchaImageAs(captchaImageFile)" + "def waitUntilDownloadHasFinished(file):\n", + " while not os.path.exists(file):\n", + " time.sleep(2)" ] }, { @@ -162,41 +164,34 @@ "class AndroidEmulator:\n", " \n", " @staticmethod\n", - " def runWithinEmulator(runnable):\n", - " AndroidEmulator._startEmulator()\n", + " def run(runnable):\n", + " AndroidEmulator._start()\n", " result = runnable()\n", - " AndroidEmulator._stopEmulator()\n", + " AndroidEmulator._stop()\n", " return result\n", " \n", " @staticmethod\n", - " def _startEmulator():\n", + " def _start():\n", " os.system(\"/home/frankknoll/Android/Sdk/emulator/emulator -avd Pixel_2_API_30 -no-window &\")\n", "\n", " @staticmethod\n", - " def _stopEmulator():\n", - " ! adb emu kill\n" + " def _stop():\n", + " ! adb emu kill" ] }, { "cell_type": "code", "execution_count": null, - "id": "c113e49d", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "textInCaptchaImage = AndroidEmulator.runWithinEmulator(lambda: getTextInCaptchaImage(captchaImageFile))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2dfc95c3", + "id": "8eef224c", "metadata": {}, "outputs": [], "source": [ - "textInCaptchaImage" + "downloadDir = \"/home/frankknoll/Dokumente/Corona/projects/HowBadIsMyBatch/src/VAERS/tmp\"\n", + "file2Download = '2022VAERSData.zip'\n", + "captchaImageFile = 'captchaImage.jpeg'\n", + "\n", + "driver = getWebDriver(downloadDir, isHeadless = False)\n", + "driver.get('https://vaers.hhs.gov/eSubDownload/index.jsp?fn=' + file2Download)" ] }, { @@ -206,57 +201,25 @@ "metadata": {}, "outputs": [], "source": [ - "driver.find_element(By.ID, \"verificationCode\").send_keys(textInCaptchaImage)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6cf55175", - "metadata": {}, - "outputs": [], - "source": [ - "driver.find_element(By.CSS_SELECTOR, '[name=\"downloadbut\"]').click()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "86e5056f", - "metadata": {}, - "outputs": [], - "source": [ - "def isCaptchaSolved():\n", - " return not existsElementWithId(\"wordverify\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b6b47c06", - "metadata": {}, - "outputs": [], - "source": [ - "import time\n", - "import os.path\n", + "def solveCaptcha(driver, captchaImageFile):\n", + " saveCaptchaImageAs(driver, captchaImageFile)\n", + " textInCaptchaImage = AndroidEmulator.run(lambda: getTextInCaptchaImage(captchaImageFile))\n", + " display('textInCaptchaImage: ', textInCaptchaImage)\n", + " driver.find_element(By.ID, \"verificationCode\").send_keys(textInCaptchaImage)\n", + " driver.find_element(By.CSS_SELECTOR, '[name=\"downloadbut\"]').click()\n", "\n", - "def waitUntilDownloadHasFinished():\n", - " while not os.path.exists(downloadDir + \"/\" + file2Download):\n", - " time.sleep(2)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b1ebc05c", - "metadata": {}, - "outputs": [], - "source": [ - "if isCaptchaSolved():\n", - " waitUntilDownloadHasFinished()\n", + "maxTries = 5\n", + "tryNum = 1\n", + "solveCaptcha(driver, captchaImageFile)\n", + "while(not isCaptchaSolved(driver) and tryNum <= maxTries):\n", + " solveCaptcha(driver, captchaImageFile)\n", + " tryNum = tryNum + 1\n", + "\n", + "if isCaptchaSolved(driver):\n", + " waitUntilDownloadHasFinished(downloadDir + \"/\" + file2Download)\n", " display('file downloaded')\n", "else:\n", - " display('try again')" + " display('failed to solve captcha and download file')" ] }, {