Skip to content

Instantly share code, notes, and snippets.

@dmateos
Last active January 29, 2019 14:31
Show Gist options
  • Save dmateos/38882486089591b044846ef4424a095d to your computer and use it in GitHub Desktop.
Save dmateos/38882486089591b044846ef4424a095d to your computer and use it in GitHub Desktop.
import time
import re
import selenium.webdriver
from selenium.webdriver.support.ui import Select
TARGET="https://azure.microsoft.com/en-au/pricing/calculator/"
def extract_decimal_from_string(string):
floats = re.findall("\d+\.\d+", string)
return [ float(f) for f in floats ]
def find_select(driver, name):
select = Select(driver.find_element_by_xpath("//select[@name='{0}']".format(name)))
return select
def find_select_options(driver, name):
select = find_select(driver, name)
options = []
for index in range(len(select.options) - 1):
options.append(index)
return options
def setup():
options = selenium.webdriver.ChromeOptions()
#options.add_argument("headless")
options.add_argument('window-size=1200x600')
driver = selenium.webdriver.Chrome(options=options)
driver.implicitly_wait(10)
driver.get(TARGET)
return driver
def scrape(driver):
vm_button = driver.find_elements_by_id("create-virtual-machines")[0]
vm_button.click()
total_price_value = driver.find_elements_by_class_name("total")[0]
for region_option in find_select_options(driver, "region"):
region_select = find_select(driver, "region")
region_select.select_by_index(region_option)
for os_option in find_select_options(driver, "operatingSystem"):
os_select = find_select(driver, "operatingSystem")
os_select.select_by_index(os_option)
for type_option in find_select_options(driver, "type"):
type_select = find_select(driver, "type")
type_select.select_by_index(type_option)
for size_option in find_select_options(driver, "size"):
size_select = find_select(driver, "size")
size_select.select_by_index(size_option)
print(extract_decimal_from_string(total_price_value.text))
def main():
driver = setup()
scrape(driver)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment