Selenium python travel dictionary

1

I am looking to build some function with for in to go through my dictionary. I explain a little the code that I have here, I use selenium. Within Def Name() in variable nametag , I call "NameTag" of my dictionary. So successively with all the data from my MW $ 1.5 dictionary. Now, for now my program fulfills everything with MW $ 1.5, I want that once I finish it starts again with the next row of the dictionary, MW $ 2.5 and do the same. It is worth clarifying that the steps that I need to repeat with the values of December are from def clone()

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome('/Users/Martin/Desktop/chromedriver')
timeout = 30
driver.get("https://onevideo.aol.com/#/")
diccionario = {"inventorysources":{"Nametag": "MW $ 1.5 |","Floor_rate": "1.5","Rate": "2"},
                                  "Nametag": "MW $ 2.5 |","Floor_rate": "2.5","Rate": "3.25"}


def main():
    login()
    clone()
    Name()
    Rate()
    Floor()
    Download()


def login():
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, "input.ng-valid:nth-child(1)"))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")

    username = driver.find_element_by_css_selector("input.ng-valid:nth-child(1)")
    username.send_keys("user")
    driver.find_element_by_css_selector("button.btn:nth-child(2)").click()
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, "div.group-field-block:nth-child(2) > input:nth-child(2)"))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")

    password = driver.find_element_by_css_selector("div.group-field-block:nth-child(2) > input:nth-child(2)")
    password.send_keys("pass")
    driver.find_element_by_css_selector(".button").click()
    element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'h1.ng-scope > span:nth-child(1)')))


def clone():
#Clonar
    url = driver.get("https://onevideo.aol.com/#/inventorysources")
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, "div.ngRow:nth-child(1) > div:nth-child(1) > div:nth-child(9) > div:nth-child(1) > div:nth-child(1) > adap-options-menu:nth-child(1) > div:nth-child(1) > button:nth-child(2)"))
        WebDriverWait(driver, timeout).until(element_present)

    except TimeoutException:
        print ("Timed out waiting for page to load")
    driver.find_element_by_css_selector('div.ngRow:nth-child(1) > div:nth-child(1) > div:nth-child(9) > div:nth-child(1) > div:nth-child(1) > adap-options-menu:nth-child(1) > div:nth-child(1) > button:nth-child(2)').click()
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, "div.ngRow:nth-child(1) > div:nth-child(1) > div:nth-child(9) > div:nth-child(1) > div:nth-child(1) > adap-options-menu:nth-child(1) > div:nth-child(1) > button:nth-child(2)"))
        WebDriverWait(driver, timeout).until(element_present)

    except TimeoutException:
        print ("Timed out waiting for page to load")    
    driver.find_element_by_css_selector('.open > ul:nth-child(5) > li:nth-child(3) > a:nth-child(1)').click()


def Name():
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, 'div.margin-top-medium > input:nth-child(1)'))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")
    name = driver.find_element_by_css_selector('div.margin-top-medium > input:nth-child(1)')
    name.clear()
    fecha = time.strftime("%d-%m-%y")
    nametag = name.send_keys(str(diccionario["inventorysources"]["Nametag"]), fecha)


def Rate():
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, '.span9 > div:nth-child(1) > form:nth-child(1) > div:nth-child(9) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > span:nth-child(1) > adap-input:nth-child(1) > span:nth-child(1) > input:nth-child(2)'))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")
    Rate = driver.find_element_by_css_selector('.span9 > div:nth-child(1) > form:nth-child(1) > div:nth-child(9) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > span:nth-child(1) > adap-input:nth-child(1) > span:nth-child(1) > input:nth-child(2)')
    Rate.clear()
    Rate.send_keys(str(diccionario["inventorysources"]["Floor_rate"]))


def Floor():
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, '.span9 > div:nth-child(1) > form:nth-child(1) > div:nth-child(12) > div:nth-child(2) > adap-input:nth-child(1) > span:nth-child(1) > input:nth-child(1)'))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")
    Floor = driver.find_element_by_css_selector('.span9 > div:nth-child(1) > form:nth-child(1) > div:nth-child(12) > div:nth-child(2) > adap-input:nth-child(1) > span:nth-child(1) > input:nth-child(1)')
    Floor.clear()
    Floor.send_keys(str(diccionario["inventorysources"]["Rate"]))


def Save():
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, ".bs-docs-social-buttons > li:nth-child(2) > button:nth-child(1)"))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")
    Save = driver.find_element_by_css_selector(".bs-docs-social-buttons > li:nth-child(2) > button:nth-child(1)").click()
    element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'h1.ng-scope > span:nth-child(1)')))


if __name__ == 'main':
    main()
    
asked by Martin Bouhier 20.10.2017 в 21:47
source

1 answer

1

First of all two corrections:

  • The dictionary is not correct as it is (you overwrite the keys), it should be like this in any case:

    diccionario = {"inventorysources":({"Nametag": "MW $ 1.5 |", "Floor_rate": "1.5", "Rate": "2"}, 
                                       {"Nametag": "MW $ 2.5 |", "Floor_rate": "2.5", "Rate": "3.25"})
                  }
    
  • The line if __name__ == 'main': is incorrect, it should be i f __name__ == '__main__': .

On the other hand, I do not know if it should be executed in order or this detail does not matter. A dictionary does not maintain the order of its items, that is, you have no certainty that first "MW $ 1.5 |" will be executed, then "MW $ 2.5 |", etc. If you need to maintain order use collections.OrderectDict .

If I have understood what you want, you can make your main iterate over the values of diccionario["inventorysources"] and call each function with the value you need.

To do this, have each function accept the argument it needs. It would be something like this:

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome('/Users/Martin/Desktop/chromedriver')
timeout = 30
driver.get("https://onevideo.aol.com/#/")

diccionario = {"inventorysources":({"Nametag": "MW $ 1.5 |","Floor_rate": "1.5","Rate": "2"}, 
                                   {"Nametag": "MW $ 2.5 |","Floor_rate": "2.5","Rate": "3.25"})
              }

def main():
    login()

    for inv_source in diccionario["inventorysources"]:
        clone()
        Name(inv_source["Nametag"])
        Rate(inv_source["Rate"])
        Floor(inv_source["Floor_rate"])
        Download()


def login():
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, "input.ng-valid:nth-child(1)"))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")

    username = driver.find_element_by_css_selector("input.ng-valid:nth-child(1)")
    username.send_keys("user")
    driver.find_element_by_css_selector("button.btn:nth-child(2)").click()
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, "div.group-field-block:nth-child(2) > input:nth-child(2)"))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")

    password = driver.find_element_by_css_selector("div.group-field-block:nth-child(2) > input:nth-child(2)")
    password.send_keys("pass")
    driver.find_element_by_css_selector(".button").click()
    element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'h1.ng-scope > span:nth-child(1)')))


def clone():
#Clonar
    url = driver.get("https://onevideo.aol.com/#/inventorysources")
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, "div.ngRow:nth-child(1) > div:nth-child(1) > div:nth-child(9) > div:nth-child(1) > div:nth-child(1) > adap-options-menu:nth-child(1) > div:nth-child(1) > button:nth-child(2)"))
        WebDriverWait(driver, timeout).until(element_present)

    except TimeoutException:
        print ("Timed out waiting for page to load")
    driver.find_element_by_css_selector('div.ngRow:nth-child(1) > div:nth-child(1) > div:nth-child(9) > div:nth-child(1) > div:nth-child(1) > adap-options-menu:nth-child(1) > div:nth-child(1) > button:nth-child(2)').click()
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, "div.ngRow:nth-child(1) > div:nth-child(1) > div:nth-child(9) > div:nth-child(1) > div:nth-child(1) > adap-options-menu:nth-child(1) > div:nth-child(1) > button:nth-child(2)"))
        WebDriverWait(driver, timeout).until(element_present)

    except TimeoutException:
        print ("Timed out waiting for page to load")    
    driver.find_element_by_css_selector('.open > ul:nth-child(5) > li:nth-child(3) > a:nth-child(1)').click()


def Name(nametag):
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, 'div.margin-top-medium > input:nth-child(1)'))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")
    name = driver.find_element_by_css_selector('div.margin-top-medium > input:nth-child(1)')
    name.clear()
    fecha = time.strftime("%d-%m-%y")
    nametag = name.send_keys(nametag, fecha)


def Rate(rate):
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, '.span9 > div:nth-child(1) > form:nth-child(1) > div:nth-child(9) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > span:nth-child(1) > adap-input:nth-child(1) > span:nth-child(1) > input:nth-child(2)'))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")
    Rate = driver.find_element_by_css_selector('.span9 > div:nth-child(1) > form:nth-child(1) > div:nth-child(9) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > span:nth-child(1) > adap-input:nth-child(1) > span:nth-child(1) > input:nth-child(2)')
    Rate.clear()
    Rate.send_keys(rate)


def Floor(floor_rate):
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, '.span9 > div:nth-child(1) > form:nth-child(1) > div:nth-child(12) > div:nth-child(2) > adap-input:nth-child(1) > span:nth-child(1) > input:nth-child(1)'))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")
    Floor = driver.find_element_by_css_selector('.span9 > div:nth-child(1) > form:nth-child(1) > div:nth-child(12) > div:nth-child(2) > adap-input:nth-child(1) > span:nth-child(1) > input:nth-child(1)')
    Floor.clear()
    Floor.send_keys(floor_rate)


def Save():
    try:
        element_present = EC.presence_of_element_located((By.CSS_SELECTOR, ".bs-docs-social-buttons > li:nth-child(2) > button:nth-child(1)"))
        WebDriverWait(driver, timeout).until(element_present)
    except TimeoutException:
        print ("Timed out waiting for page to load")
    Save = driver.find_element_by_css_selector(".bs-docs-social-buttons > li:nth-child(2) > button:nth-child(1)").click()
    element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'h1.ng-scope > span:nth-child(1)')))


if __name__ == '__main__':
    main()
    
answered by 20.10.2017 / 22:39
source