2
from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.keys import Keys 
driver=webdriver.Chrome() 
driver.get("https://paytm.com/") 
driver.maximize_window() 
driver.find_element_by_class_name("login").click() 
driver.implicitly_wait(10) 
driver.find_element_by_xpath("//md-input-container[@class='md-default-theme md-input-invalid']/input[@id='input_0']").send_keys("99991221212") 

In dem obigen Code habe ich den Xpath mit Feuer Bug verifiziert seine Hervorhebung das richtige Element. Aber wenn das Skript fehlschlägt? Kannst du mir helfen, Leute?Selenium Python Script löst keine Elementfehlerausnahme aus, obwohl der x-Pfad richtig ist?

Antwort

0

Sie versuchen WebDriverWait verwenden sollte, wie unten auf der Seite sichtbar, bis input Element zu warten: -

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.Chrome() 
driver.get("https://paytm.com/") 
driver.maximize_window() 

wait = WebDriverWait(driver, 10) 

wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "login"))).click() 

#now switch to iframe first  
wait.until(EC.frame_to_be_available_and_switch_to_it((By.TAG_NAME, "iframe"))) 

input = wait.until(EC.visibility_of_element_located((By.ID, "input_0"))) 
input.send_keys("99991221212") 

Hoffe, es hilft ... :)

+0

Nö. Ich habe es bereits versucht, wirft Timeout Ausnahme – Subbu

+0

@Subbu hast du versucht mit 'XPath' oder' id' ?? –

+0

@Subbu wie ich sehe das Eingabeelement ist in einem 'iframe'..Sie müssen diesen Rahmen wechseln, bevor Eingabeelement finden .. siehe aktualisierte Antwort .. –

3

In Selen jeder Frame einzeln behandelt wird. Da die Anmeldung in einem separaten iframe Element ist, müssen Sie es wechseln zuerst mit:

iframe = driver.find_elements_by_tag_name('iframe')[0] 
driver.switch_to_frame(iframe) 

Bevor versucht, mit ihm interagieren Elemente ist.

Oder in diesem Fall, würden Sie warten, bis der Rahmen, zu existieren und es wäre:

from selenium import webdriver 
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.Chrome() 
driver.get("https://paytm.com/") 
driver.maximize_window() 

wait = WebDriverWait(driver, 10) 

wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "login"))).click() 
wait.until(EC.frame_to_be_available_and_switch_to_it((By.TAG_NAME, "iframe"))) 

_input = wait.until(EC.visibility_of_element_located((By.ID,"input_0"))) 
_input.send_keys("99991221212") 
Verwandte Themen