2016-06-19 16 views
0

別のフレームセット内にあるフレームセット内にあるフレームにアクセスするにはどうすればよいですか?別のフレームセット内にあるフレームセット内のアクセスフレーム

enter image description here

ここselenium.common.exceptions.NoSuchFrameException: Message: no such frameを返す私のコードです。

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 

driver = webdriver.Chrome() 
driver.get("https://netbanking.hdfcbank.com/netbanking/") 
driver.switch_to_default_content() 

assert "Welcome to HDFC Bank" in driver.title 

driver.switch_to_frame("login_page") 

try: 
    WebDriverWait(driver, 10).until(EC.presence_of_element_located(driver.find_element_by_class_name('pwd_field'))) 
    print "Page is ready!" 
except TimeoutException: 
    print "Loading took too much time!" 

driver.implicitly_wait(10) # seconds 
driver.close() 

答えて

2

あなたはどんな特別な方法でframeset Sを処理する必要はありません - これらは、フレームのためだけのコンテナである、彼らは自分自身をフレームされていません。ここでは私のために働いていたものです:

from selenium import webdriver 
from selenium.common.exceptions import TimeoutException 
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://netbanking.hdfcbank.com/netbanking/") 
wait = WebDriverWait(driver, 10) 

assert "Welcome to HDFC Bank" in driver.title 

frame = wait.until(EC.presence_of_element_located((By.NAME, 'login_page'))) 
driver.switch_to.frame(frame) 

try: 
    wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'pwd_field'))) 
    print("Page is ready!") 
except TimeoutException: 
    print("Loading took too much time!") 

driver.close() 

  • フレームがフレーム

コードに存在

  • スイッチするのを待つ待機を追加あなたが既に持っていた待っているものを修正しました。

    .until(EC.presence_of_element_located(driver.find_element_by_class_name('pwd_field'))) 
    

    .until(EC.presence_of_element_located((By.CLASS_NAME, 'pwd_field'))) 
    

    私も最初driver.switch_to_default_content()の呼び出しを削除しました - あなたはすでに初めにデフォルトの内容の範囲で動作しています。

  • +0

    返信いただきありがとうございます。 10秒間待つのではなく、必要な「要素」を待つよりクリーンな方法がありますか? –

    +0

    @AbhijeetRastogi確かに、あなたは 'wait.until(EC.presence_of_element_located((By.CLASS_NAME、 'pwd_field')))'の部分を意味しますか?これは** ** 10秒まで待ちます(10はこの場合は 'WebDriverWait'を初期化したものです)。要素または特定の条件が満たされるのを待つ最も推奨される方法です。 – alecxe

    +0

    ありがとう@アレクセ。あなたは素晴らしいです。セレンを試してみるのは初めてです。 –

    関連する問題