我有以下代码,这是一个基于Angular的网站。
我有,Python 3.6/Selenium/ChromeDriver v-77。我使用了switch_to方法直到iframe,id=f2.2,并消除了在该帧中打开的警报。然后我尝试了switch_to.parent_frame((和switch_to.default_content((。但两者都返回None。
<html>
<head>
</head>
<body>
<iframe id="f1"><iframe> // 1
<iframe id="f2"> // 2
<iframe id="f2.1"> // 2.1
<iframe id="f2.2"> // 2.2
<a href='http://link.com'>
// on click alert, dismiss
</iframe>
<div id='ac'></div>
</iframe>
</iframe>
</body
</html>
我想要:
步骤1:进入iframe[id='f2.2']//我到达
步骤2:从iframe[id='f2.2']获取数据,并在点击该帧中的按钮后解除警报(ajax请求(
当我解除/接受警报时,Dom内容会在iframe[id='f2.1',id='f2.2']中更新
步骤3:我想从div[id='ac']获取更新的数据
我使用了等待,但无法获取数据。我还尝试保存window_handles[0]方法的响应,并在警报操作后使用,但它也不起作用。
有多种方法可以在帧之间切换
按索引切换到帧:
driver.switchTo().frame(0);
driver.switchTo().frame(1);
按名称或ID:切换到帧
driver.switchTo().frame("iframe1");
driver.switchTo().frame("id of the element");
请尝试解决方案:
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("http://somedomain/url_that_delays_loading")
try:
driver.switchTo().defaultContent();
driver.switchTo().frame(driver.findElement(By.id("f2")).findElement(By.id("f2.1")).findElement(By.id("f2.2")));
wait = WebDriverWait(driver, 10)
driver.find_element_by_link_text("http://link.com'").click()
alert = driver.switch_to.alert
alert_text = alert.text
alert.dismiss()
driver.switch_to.default_content()
driver.switchTo().frame(driver.findElement(By.id("f2")).findElement(By.id("f2.1")));
String text=driver.findElement(By.id("ac")).getText();
System.out.println(text);
driver.switch_to.default_content()
finally:
driver.quit()