Skip to content

Instantly share code, notes, and snippets.

@lrhazi
Created March 6, 2023 14:03
Show Gist options
  • Save lrhazi/b46f05e958d3313f486b46f1ecf8d8cd to your computer and use it in GitHub Desktop.
Save lrhazi/b46f05e958d3313f486b46f1ecf8d8cd to your computer and use it in GitHub Desktop.
import os
import time
from playwright.sync_api import sync_playwright, expect
from logger import logger
from utils import get_db_version_from_filename
URL = "https://my.f5.com/manage/s/downloads"
def download_geodb(username,password,download_dir="/temp", exclude_filenames=[]):
with sync_playwright() as p:
browser = p.chromium.launch(headless=True, slow_mo=1000)
page = browser.new_page()
page.goto(URL)
expect(page).to_have_title("MyF5 ")
page.locator("#idp-discovery-username").fill(username)
page.get_by_role("button").click()
page.locator("#okta-signin-password").fill(password)
page.get_by_role("button").click()
time.sleep(10)
page.goto(URL)
page.locator(".slds-checkbox_faux").click()
page.get_by_text("Next").click()
page.locator("#productFamily-21").select_option("BIG-IP")
page.locator("#productLine-23").select_option("big-ip_v17.x")
time.sleep(3)
td = page.locator('td:has-text("GeoLocationUpdates_Pulse")').all()[0]
td.get_by_role("button").click()
tds = page.locator('td:has-text("zip")').all()
text = tds[0].text_content().split()[-1].replace("row", "")
if text.startswith("ip-geolocation-"):
filename = text
else:
filename = None
if not filename:
logger.error("Unable to find Online GeoIP DB file.")
else:
if filename in exclude_filenames:
logger.info(f"Online GeoIP DB {filename} is already downloaded.")
else:
logger.info(f"Downloading Online GeoIP DB: {filename}")
tds[0].get_by_role("button").click()
page.locator("#locations-183").select_option("USA - WEST COAST")
with page.expect_download() as download_info:
page.get_by_role("button", name="Download").click()
download = download_info.value
download.save_as(os.path.join(download_dir, filename))
time.sleep(3)
td = page.locator('td:has-text("md5")').all()[0]
td.get_by_role("button").click()
page.locator("#locations-183").select_option("USA - WEST COAST")
with page.expect_download() as download_info:
page.get_by_role("button", name="Download").click()
download = download_info.value
download.save_as(os.path.join(download_dir, download.suggested_filename))
page.screenshot(path=os.path.join(download_dir, filename + ".png"))
browser.close()
return filename
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment