2017-05-25 2 views
0
driver = webdriver.PhantomJS() 
driver.set_window_size(1920, 1080) 
driver.get('https://soundcloud.com/') 
driver.implicitly_wait(5) 
driver.set_page_load_timeout(5) 
#driver.save_screenshot('screen.png') 
signIn_button = driver.find_element_by_xpath("//button[@class='g-opacity-transition frontHero__loginButton g-button-transparent-inverted sc-button sc-button-medium loginButton']") 
signIn_button.click() 
driver.implicitly_wait(5) 
#driver.save_screenshot('screenie.png') 
#emailField = driver.find_element_by_css_selector('form#loginForm input[placeholder="Your email address or profile URL *"]')Your email address or profile URL * 
emailField = driver.find_element_by_xpath("//input[@class='textfield__input sc-input sc-input-large'][@type='text']") 
emailField.click() 
driver.implicitly_wait(5) 
emailField.send_keys(account.email) 
driver.implicitly_wait(5) 
emailField.send_keys(Keys.RETURN) 

Wenn Leitung driver.save_screenshot('screenie.png') im Code ist, geht das Programm normal funktioniert und korrekt in den emailField mit der richtigen Zeichenfolge eingibt. Wenn dieser Code jedoch entfernt wird, schlägt das Programm versucht, dieses Textfeld zu manipulieren und wirft Fehler:Wegnehmen Selenium Screenshot-Funktion macht Programm fehlschlagen - Python

selenium.common.exceptions.ElementNotVisibleException: Message: {"errorMessage":"Element is not currently visible and may not be manipulated"

Antwort

0

Sein ein Timing-Problem. save_screenshot ist ein teurer Befehl, der das Skript so lange verzögert, bis die Elemente im Login-Popup sichtbar werden.

Implizite Wartezeit setzen, bevor ein Befehl nichts bewirkt, implicit wait wird einmal für driver gesetzt. Dies sagen die driver nach der Existenz bis zu der angegebenen Zeitspanne für die Lebensdauer des Treibers zu suchen.

Um sicherzustellen, dass das Element sichtbar Einsatz ist explicit wait mit expected conditions

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

driver = webdriver.PhantomJS() 
driver.set_window_size(1920, 1080) 
driver.get('https://soundcloud.com/') 
driver.implicitly_wait(5) 
driver.set_page_load_timeout(5) 

wait = WebDriverWait(driver, 10) 

signIn_button = wait.until(EC.visibility_of_element_located((By.XPATH, "//button[@class='g-opacity-transition frontHero__loginButton g-button-transparent-inverted sc-button sc-button-medium loginButton']"))) 
signIn_button.click() 

emailField = wait.until(EC.visibility_of_element_located((By.XPATH, "//input[@class='textfield__input sc-input sc-input-large'][@type='text']"))) 
emailField.click() 
emailField.send_keys(account.email) 
emailField.send_keys(Keys.RETURN)