2017-05-09 2 views
0

Des Versuch, ein kleines Skript zu machen, die ich in der TabelleAusgabe Auswahl Dropdown-Option mit Selen WebDriver (Python)

Ich kann nicht aus einer Dropdown-Liste mit Selen wählen scheinen zu können, füllen hilft. Nachdem der Code mehrere Male ausgeführt wurde, scheint er nach dem Zufallsprinzip in einigen Zeilen nicht zu funktionieren, bricht aber nie zweimal an der gleichen Stelle zusammen.

Aus irgendeinem Grund funktioniert es gut auf den ersten 2 Dropdown-Boxen, aber die letzten 2 scheinen nicht einheitlich zu arbeiten (Selbstbehalt und Unternehmen).

heres, was ich habe, so weit:

from selenium import webdriver 
from bs4 import BeautifulSoup 
from selenium.webdriver.support.ui import Select 
from random import randint 

driver = webdriver.Chrome() 

driver.get("https://www.ehail.ca/quotes/?1494142398325") 

for x in range(5): 

driver.find_element_by_name("button").click() 


acres = 100 
croptype = "Wheat" 
qrt = "NW" 
sec = randint(1,16) 
twn = randint(1,30) 
rng = randint(1,30) 
mer = "W3" 
ded = "Full" 
comp = randint(1,7) 
cov = 100 


for w in range(1,8): 

    w = str(w) 


    element = driver.find_element_by_name("acres"+w) 
    element.send_keys(acres) 

    select = Select(driver.find_element_by_id('cropComboboxId'+w)) 
    select.select_by_visible_text(croptype) 

    select = Select(driver.find_element_by_id("quarterComboboxId"+w)) 
    select.select_by_visible_text(qrt) 

    element = driver.find_element_by_name("section"+w) 
    element.send_keys(sec) 

    element = driver.find_element_by_name("township"+w) 
    element.send_keys(twn) 

    element = driver.find_element_by_name("range"+w) 
    element.send_keys(rng) 

    select = Select(driver.find_element_by_name("meridian"+w)) 
    select.select_by_visible_text(mer) 

#THIS IS WHERE THE TROUBLE STARTS! 

    select = Select(driver.find_element_by_name("deductible"+w)) 
    select.select_by_index(5) 

    select = Select(driver.find_element_by_name('company'+w)) 

    for index in range(len(select.options)): 
    select = Select(driver.find_element_by_name('company'+w)) 
    select.select_by_index(1) 

element = driver.find_element_by_name("coverageperacre"+w) 
element.send_keys(cov) 


element = driver.find_element_by_name("quoteForm").submit() 

ich die Auswahl von Index versucht haben, Name, ID, Text, so ziemlich alles, aber ich kann nicht einmal eine einheitliche Kipppunkt finden. in der Tat wird die ungerade Zeit ohne Fehler laufen. der Fehler, den ich bekomme, ist in der Regel, obwohl "Element mit Index/Name/ID 'was auch immer'"

nicht lokalisieren kann jede Hilfe würde sehr geschätzt werden.

prost

Antwort

0

Die letzten beiden dropowns Optionen nur gefüllt werden, nachdem die Daten in den vorangegangenen Felder gefüllt ist. Sie können warten, bis die Optionen vorhanden ist, bevor

options_size = 0 
while options_size == 0: 
    select = Select(driver.find_element_by_name("meridian" + w)) 
    options_size = len(select.options) 

select.select_by_visible_text(mer) 

Das select Element aktualisiert wird, wenn bevölkert von ihnen

Wahl, so sollte es StaleElementReferenceException

+1

Nizza zu verhindern verlegt werden! das hat es getan. Danke – kevinslater