web-dev-qa-db-ja.com

HTMLのセレンとiframe

Iframeにsend_key()を使用できません。このiframeを選択する方法と、この内部のどの要素をsend_key()に使用する必要がありますか?

page image

およびiframe htmlコード

<iframe class="textarea" src="/framework/html/blank.html" style="width: 99%; border-width: 1px; height: 332px;">
#document
<html webdriver="true">
<head>
</head>
<body> … </body>
</html>
</iframe>

値を説明に送信する方法

ブラウザーで「ページのソースを表示」を選択すると、このフレームのコードが表示されないことをもう1つ知りたいのですが。

24
RATHI

driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))は、ドライバーがwebdriverの正常なインスタンスであると想定しています。デフォルトのコンテンツを続行するには、driver.switch_to.default_content()を実行します

[〜#〜] edit [〜#〜]:必要なフレームに切り替えたら、いつものようにウェブ要素を見つけます。あなたの場合、これはhtml/bodyになると思いますが(確かではありません)、

el = driver.find_element_by_xpath('html/body')

大丈夫です。そして実行する

el.send_keys('keys_to_send')

EDIT2:キーを送信する前に、要素に焦点を合わせる必要がある場合があります(クリックすることで、子要素が表示されます)。または、JSを介して必要なテキストを配置することもできます。

driver.execute_script('document.body.innerHTML = "%s"' % text_var)

49
Furious Duck

Webページでiframeを処理するには、次のコマンドを使用して、ページに存在するiframeに最初に切り替える必要があります:driver.switch_to.frame(frame_id)

このチュートリアルには、 PythonでSeleniumを使用してiframeを処理する の実用例があります。これにより、この問題を解決できます。

1
Furqan Ud Din

受け入れられた答えは、与えられた質問に対して非常にうまく機能します。ただし、もう1つ答えを追加する理由は2つあり、この質問が別の質問でこの質問に答える助けになることを願っています。

理由1:

受け入れられた回答には、Webページ内のiframeを処理する1つの方法があります。ただし、iframeを処理する方法はいくつかあります。

  • フレームのインデックス位置を使用して
  • フレームの名前を使用して
  • フレームのIDを使用して

理由2:

driver.find_element_by_tag_name( "iframe")ステートメントを使用して、複数のiframe要素が存在する場合に機能しない、または予想されるiframe Web要素を返すiframe要素を見つける同じページ。

Iframeの処理を詳細に説明する記事はたくさんあります。

  1. http://allselenium.info/handling-iframes-using-Selenium-webdriver/
1
Arun211