refactoring

This commit is contained in:
frankknoll
2022-05-13 11:16:44 +02:00
parent db85a1f144
commit 274dfd3be4

View File

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