refactoring

This commit is contained in:
frankknoll
2022-05-13 11:38:03 +02:00
parent 274dfd3be4
commit a42e392080

View File

@@ -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)"
]
},
{