Skip to content

Instantly share code, notes, and snippets.

@peace899
Created August 6, 2018 16:59
Show Gist options
  • Save peace899/7149392cf66089e32266066c17b6d42e to your computer and use it in GitHub Desktop.
Save peace899/7149392cf66089e32266066c17b6d42e to your computer and use it in GitHub Desktop.
Script to change Huawei B315 connection mode from LAN Only to Dynamic IP and vice versa
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment