誰でもタイトルを持っているiframeを特定してiframeに切り替える方法を教えてもらえますか?
<iframe frameborder="0" style="border: 0px none; width: 100%; height: 356px; min-width: 0px; min-height: 0px; overflow: auto;" dojoattachpoint="frame" title="Fill Quote" src="https://tssstrpms501.corp.trelleborg.com:12001/teamworks/process.lsw?zWorkflowState=1&zTaskId=4581&zResetContext=true&coachDebugTrace=none">
私は以下のコードで試しましたが、動作していません
driver.switchTo().frame(driver.findElement(By.tagName("iframe")));
cssSelectorを使用できます。
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
driver.switchTo().frame()
には複数のオーバーロードがあります。
driver.switchTo().frame(name_or_id)
ここでiframe
にはIDも名前もないので、あなたのためではありません。
driver.switchTo().frame(index)
これは選択する最後のオプションです。インデックスの使用は想像できるほど安定していないためです。これがページ内の唯一のiframeである場合は、driver.switchTo().frame(0)
を試してください
driver.switchTo().frame(iframe_element)
最も一般的なもの。 iframeを他の要素と同じように見つけて、メソッドに渡します。
ここでは、title
属性で検索するのが最善のようです。
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
// driver.switchTo().frame(driver.findElement(By.xpath(".//iframe[@title='Fill Quote']")));
Srcを使用してフレームに切り替えることもできます。使用できるものは次のとおりです。
driver.switchTo().frame(driver.findElement(By.xpath(".//iframe[@src='https://tssstrpms501.corp.trelleborg.com:12001/teamworks/process.lsw?zWorkflowState=1&zTaskId=4581&zResetContext=true&coachDebugTrace=none']")));
フレームに切り替える前に、必ずデフォルトのコンテンツに切り替えてください。
driver.switchTo().defaultContent();
driver.switchTo().frame(x);
x
はフレーム番号にすることも、driver.findlement
を実行して、使用可能なオプション(driver.findElementByName("Name")
など)を使用することもできます。
Css SelectorまたはXpathを使用できます。
アプローチ1:CSSセレクター
driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='Fill Quote']")));
アプローチ2:Xpath
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@title='Fill Quote']")));
1)HTMLビューに移動
2)iframeと入力し、必要なフレームを見つけて値をカウントし、それを使用して切り替えます
oASelFW.driver.switchTo().frame(2);
最初のフレームの場合は、oASelFW.driver.switchTo().frame(0);
を使用します
2番目のフレームの場合は、それぞれoASelFW.driver.switchTo().frame(1);
を使用します
フレームに切り替えるには3つの方法があります
1)Can use id
2)Can use name of the frame
3)Can use WebElement of the frame
2-> driver.switchTo().frame("name of the frame");
これを行う最も簡単な方法は次のとおりです。フレームの場合は、フィールドを右クリックし、「タブでフレームを開く」という選択肢が表示されたら、それを実行します。
次に、フレームのURLを取得します。これは、「driver.get( http:// blah blah ..)」を使用してPythonスクリプトに挿入したものです
その後、Seleniumは名前付き要素を見つけることができます。これにより、ここで学習していたが機能しなかったすべての提案を試す時間を節約できました。私の問題は、フレーム内にあったことです。
Linuxを使用しており、別のタブでフレームを単独で開く右クリックオプションを使用できます。私はWindowsを使用していないので、右クリックメニューでそのオプションを取得できるかどうかわかりません。
ガンザローラ
while;でこれに苦労しました。特にイライラするWebサイトでは、サイト全体にいくつかのネストされたフレームがありました。私はフレームを識別する方法を見つけることができませんでした-名前、id、xpath、cssセレクター-何もありません。
最終的に、フレームには番号が付けられ、トップレベルがframe(0)、2番目のframe(1)などであることに気付きました。
必要な要素がどのフレームにあるのかまだわからなかったので、0から50までサイクルして次のフレームに移動し、必要な要素にアクセスしようとするforループを作成しました。失敗した場合、メッセージを出力して続行します。
このような単純な解決策のために、この問題に時間をかけすぎていた-_-
driver.switch_to.default_content()
for x in range(50):
try:
driver.switch_to.frame(x)
driver.find_element_by_xpath("//*[@id='23']").click()
driver.find_element_by_xpath("/html/body/form/table/tbody/tr[1]/td/ul/li[49]/a").click()
except:
print("It's not: ", x)
continue