我正在尝试选择一个位于iframe中并且可能位于其他iframe中的元素。
是否可以在不选择iframe的情况下以某种方式在(python)selenium中的某个(sub)iframe中选择元素?有没有办法以某种方式“遍历”每个iframe并检查在哪里可以找到我的元素…?
以及在元素和html内容以及iframe可能只是被加载的情况下该怎么做…?
不 , WebElement 在不切换到各自的情况下,不可能与iframe直通内的任何物体相互作用。 Seleniumiframe
WebElement
iframe
Selenium
加载页面后, Selenium 默认情况下,焦点会停留在上 Top Window 。在 Top Window 包含了其他 iframes 和 framesets 。因此,当我们需要与WebElementiframe中的a进行互动时,我们必须iframe通过以下一种方法切换到相应的方法:
Top Window
iframes
framesets
我们可以通过3种方式切换到帧。
按框架名称 :
Name iframe的属性,我们可以通过该属性切换到它。
Name
例:
driver.switch_to.frame("iframe_name")
按帧ID :
ID iframe的属性,我们可以通过该属性切换到它。
ID
driver.switch_to.frame("iframe_id")
按帧索引 :
假设页面中有10个框架,我们可以使用索引切换到iframe。
driver.switch_to.frame(0) driver.switch_to.frame(1)
切换回主机 :
我们可以使用 default_content() 或切换回主机 parent_frame()
default_content()
parent_frame()
driver.switch_to.default_content() driver.switch_to.parent_frame()
切换帧的更好方法将是诱使 WebDriverWait 预期帧的可用性 expected_conditions 设置 frame_to_be_available_and_switch_to_it 为:
WebDriverWait
expected_conditions
frame_to_be_available_and_switch_to_it
通过 Frame ID :
Frame ID
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe"))
通过 Frame Name :
Frame Name
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.NAME,"name_of_iframe"))
通过 Frame Xpath :
Frame Xpath
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.XPATH,"xpath_of_iframe"))
通过 Frame CSS :
Frame CSS
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.CSS_SELECTOR,"css_of_iframe"))