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") 

在上面的代碼中,我已經驗證了xpath使用fire bug來突出顯示正確的元素。但是當腳本運行失敗?你能幫助我嗎?即使x路徑正確,Selenium Python腳本也不會拋出元素錯誤異常?

回答

0

你應該嘗試使用WebDriverWait等到input元素下面的頁面上看到: -

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") 

希望它能幫助... :)

+0

都能跟得上。我已經嘗試過,它會引發超時異常 – Subbu

+0

@Subbu你用'XPath'或'id'嘗試嗎? –

+0

@Subbu當我看到輸入元素是在一個'iframe'中..你需要在找到輸入元素之前切換那個幀..查看更新後的答案.. –

3

在硒每幀單獨處理。由於登錄是在一個單獨的iframe元素,你需要先切換到它使用:

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

之前試圖交互與它的元素。

或在這種情況下,你會一直等存在的框架,這將是:

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") 
相關問題