Python Selenium切换到嵌套的iframe中

7 投票
1 回答
20419 浏览
提问于 2025-04-18 04:17

我正在尝试使用Selenium、Python和BS4来访问一个嵌套在另一个iframe里的iframe。

from bs4 import BeautifulSoup
from selenium import webdriver
import time
import html5lib

driver = webdriver.Firefox()
driver.implicitly_wait(10)

driver.get('http://myurl.com')
try:
    time.sleep(4)
    iframe = driver.find_elements_by_tag_name('iframe')[0]
    driver.switch_to_default_content()

    driver.switch_to_frame(iframe)
    driver.switch_to_default_content()
    driver.find_elements_by_tag_name('iframe')[0]

    output = driver.page_source

    print output

finally:
    driver.quit();

在返回的文本中,似乎还有两个iframe。我该如何访问它们呢?我在上面的代码中尝试过,但没有成功。

1 个回答

22

switch_to_default_content() 这个命令会让你回到文档的最顶部。发生的事情是,你先切换到了第一个 iframe,然后又切换回文档的顶部,接着想要找到第二个 iframe。但是,Selenium 找不到第二个 iframe,因为它其实是在第一个 iframe 里面。

如果你去掉第二个 switch_to_default_content(),应该就没问题了:

iframe = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to.default_content()

driver.switch_to.frame(iframe)
driver.find_elements_by_tag_name('iframe')[0]

撰写回答