2017-08-08 23 views
-1

私はPythonでSeleniumを使ってフレームを選択しようとしています。 Webページにはframeset要素の下にネストされたいくつかのフレームが含まれています。私が使用して名前を "fraMenu" でフレームを選択してみました:Selenium Pythonに存在するフレームが見つかりません

driver.switch_to.frame(driver.find_element_by_name( "fraMenu"))

が、私は、エラーメッセージではNoSuchElementExceptionを取得しています。メッセージ:要素を見つけることができません:[name="fraMenu"]

完全なコードは以下の通りです:

driver = webdriver.Firefox() 

    driver.implicitly_wait(10) 
    driver.maximize_window()   

    driver.get("someurl") 

    # switch back to default frame 
    driver.switch_to.default_content() 

    # switch to frame with name fraMenu 
    driver.switch_to.frame(driver.find_element_by_name("fraMenu")) 
+0

フレームはIDを持っていますか?私はあなたがIDでフレームを検索することができると確信しています – Mangohero1

+0

[iframeを使ってiframeを選択する](https://stackoverflow.com/questions/7534622/selecting-an-iframe-using-python-selenium)の可能な複製 – JeffC

+0

関連するHTMLやURLを分かち合うことはできますか? – DebanjanB

答えて

0

あなたはそれを見つけようとする前にいくつかの時間を待つようにしようとしましたか?たぶん、フレームにロードする時間がありませんでした。私はあなたがtime.sleep(4)で始まることをお勧めし、それが動作する場合は、フレームが予想される状態でロードされるまで待つようにしてください。

1

あなたが実際に以下の方法を使用してiFrameを選択することができる: -

  • フレーム(インデックス)
  • フレーム(フレームのフレーム[OR] IDの名前)
  • フレーム(WebElement frameElement)
  • defaultContent()

ですから、フレームについての上記の情報を渡すことで切り替えることができます。フレーム

driver.SwitchTo().defaultContent(); 

driver.SwitchTo().Frame("navigation"); 

であなたのアクションを実行します....

driver.SwitchTo().Frame("top"); 

....フレーム

であなたのアクションを実行します - :はい、あなたはアクション

例を必要とするように応じて毎回を切り替える必要があります

driver.SwitchTo().defaultContent(); 

....

これで、ネストされたフレームの階層を見つけて、すべてを1つずつ切り替える必要があります。

chrome開発ツールを使用して、階層を見ることができる要素を選択します。あなたの要素が到達しない限り、親から子に切り替えるだけです。あなたの操作を実行し、

例をデフォルトに戻す: -

enter image description here

は、それはあなたを助けることを願っています:)

関連する問題