-
-
Save dmateos/38882486089591b044846ef4424a095d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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