diff --git a/src/HowBadIsMyBatch.ipynb b/src/HowBadIsMyBatch.ipynb index 359655a9b88..75cb5f5c1e1 100644 --- a/src/HowBadIsMyBatch.ipynb +++ b/src/HowBadIsMyBatch.ipynb @@ -86,6 +86,33 @@ "## Download VAERS-Data" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f0bfb9c", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "class AndroidEmulator:\n", + " \n", + " @staticmethod\n", + " def run(runnable):\n", + " AndroidEmulator._start()\n", + " result = runnable()\n", + " AndroidEmulator._stop()\n", + " return result\n", + " \n", + " @staticmethod\n", + " def _start():\n", + " os.system(\"/home/frankknoll/Android/Sdk/emulator/emulator -avd Pixel_2_API_30 -no-window &\")\n", + "\n", + " @staticmethod\n", + " def _stop():\n", + " ! adb emu kill" + ] + }, { "cell_type": "code", "execution_count": null, @@ -119,7 +146,29 @@ " return len(driver.find_elements(By.ID, id)) > 0\n", "\n", "def isCaptchaSolved(driver):\n", - " return not existsElementWithId(driver, \"wordverify\")" + " return not existsElementWithId(driver, \"wordverify\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "918d088d", + "metadata": {}, + "outputs": [], + "source": [ + "def getTextInCaptchaImage(captchaImageFile):\n", + " baseDir = \"~/AndroidStudioProjects/TextRecognizer\"\n", + " ! cp $captchaImageFile $baseDir/app/src/main/assets/captchas/captcha_image.jpeg\n", + " ! cd $baseDir;./gradlew connectedAndroidTest\n", + " textInCaptchaImage = ! adb shell \"run-as org.textrecognizer cat /data/data/org.textrecognizer/files/captcha_image.txt\"\n", + " return textInCaptchaImage\n", + " \n", + "def solveCaptchaAndStartFileDownload(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()" ] }, { @@ -140,43 +189,23 @@ { "cell_type": "code", "execution_count": null, - "id": "c2d1f298", + "id": "741ec545", "metadata": {}, "outputs": [], "source": [ - "def getTextInCaptchaImage(captchaImageFile):\n", - " baseDir = \"~/AndroidStudioProjects/TextRecognizer\"\n", - " ! cp $captchaImageFile $baseDir/app/src/main/assets/captchas/captcha_image.jpeg\n", - " ! cd $baseDir;./gradlew connectedAndroidTest\n", - " textInCaptchaImage = ! adb shell \"run-as org.textrecognizer cat /data/data/org.textrecognizer/files/captcha_image.txt\"\n", - " return textInCaptchaImage" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3be7e021", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", + "def downloadFile(file, driver, maxTries):\n", + " captchaImageFile = 'captchaImage.jpeg'\n", + " tryNum = 1\n", + " solveCaptchaAndStartFileDownload(driver, captchaImageFile)\n", + " while(not isCaptchaSolved(driver) and tryNum < maxTries):\n", + " solveCaptchaAndStartFileDownload(driver, captchaImageFile)\n", + " tryNum = tryNum + 1\n", "\n", - "class AndroidEmulator:\n", - " \n", - " @staticmethod\n", - " def run(runnable):\n", - " AndroidEmulator._start()\n", - " result = runnable()\n", - " AndroidEmulator._stop()\n", - " return result\n", - " \n", - " @staticmethod\n", - " def _start():\n", - " os.system(\"/home/frankknoll/Android/Sdk/emulator/emulator -avd Pixel_2_API_30 -no-window &\")\n", - "\n", - " @staticmethod\n", - " def _stop():\n", - " ! adb emu kill" + " if isCaptchaSolved(driver):\n", + " waitUntilDownloadHasFinished(file)\n", + " return True\n", + " else:\n", + " return False\n" ] }, { @@ -188,38 +217,13 @@ "source": [ "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)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0bf84d1c", - "metadata": {}, - "outputs": [], - "source": [ - "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", - "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('failed to solve captcha and download file')" + "driver.get('https://vaers.hhs.gov/eSubDownload/index.jsp?fn=' + file2Download)\n", + "downloadFile(\n", + " file = downloadDir + \"/\" + file2Download,\n", + " driver = driver,\n", + " maxTries = 2)" ] }, {