Skip to content

Instantly share code, notes, and snippets.

@peace899
Created August 6, 2018 16:59

Revisions

  1. peace899 created this gist Aug 6, 2018.
    79 changes: 79 additions & 0 deletions b315_wanswitch.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,79 @@
    import time

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.common.exceptions import TimeoutException, NoSuchElementException
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.ui import Select


    username = 'admin'
    password = 'admin'
    modem_ip = '192.168.8.1'


    def is_page_loaded(browser, element_id):
    delay = 30 # seconds
    try:
    myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, element_id)))
    return True
    except TimeoutException:
    return False


    def get_browser():

    options = Options()
    options.set_headless(headless=True)
    browser = webdriver.Chrome(chrome_options=options)
    # Login
    home_url = 'http://{0}{1}'.format(modem_ip, '/html/home.html')
    browser.get(home_url)

    page_loaded = is_page_loaded(browser, 'index_connection_status')
    if page_loaded:
    browser.execute_script("return showloginDialog()")

    login_input = browser.find_elements_by_css_selector('input#username')[0]
    login_input.send_keys(username)

    password_input = browser.find_elements_by_css_selector('input#password')[0]
    password_input.send_keys(password)

    browser.find_elements_by_css_selector('input#pop_login')[0].click()
    time.sleep(5)

    return browser


    def wan_switch(browser):
    ethernet_url = 'http://{0}{1}'.format(modem_ip, '/html/ethernetsettings.html')
    browser.get(ethernet_url)
    select = Select(browser.find_element_by_id('select_wan_connection_mode'))
    options = [x for x in select.options]
    options = {i.get_attribute("value"): i.text for i in options}
    selected_option = select.first_selected_option.get_attribute("value")
    selected_mode = options[selected_option]
    wanted_options = {k: v
    for k, v in options.items()
    if v in ['LAN only', 'Dynamic IP']}

    if 'LAN' in selected_mode:
    wanted_option = [k for k,v in wanted_options.items() if 'LAN' not in v][0]
    else:
    wanted_option = [k for k,v in wanted_options.items() if 'LAN' in v][0]

    jquery_statement = '$("#select_wan_connection_mode").val("{}").\
    trigger("change");'.format(wanted_option)

    time.sleep(2)

    browser.execute_script(jquery_statement)

    browser.find_element_by_id('span_apply_button').click()

    if __name__ == '__main__':
    browser = get_browser()
    wan_switch(browser)