似乎无法使用 Selenium 连接到 Iframe

Can't seem to connect to an Iframe with Selenium

iframe的id好像是动态的(好像刷新了?),所以我只是临时连接,不能执行任何调用(所有结果都是空列表)。所以我试图查看 iframe 的内容,但它也会导致错误。有没有一种方法可以连接到 iframe 并对其执行调用。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get('http://investsnips.com/list-of-publicly-traded-micro-cap-diversified-biotechnology-and-pharmaceutical-companies/')
#driver.find_element_by_xpath('//*[@id="tradingview_4e896"]')
time.sleep(20)
#driver.switch_to.frame("tradingview_21872")
iframe = driver.find_elements_by_tag_name('iframe')[1]   # 0 is resulting in an error
driver.switch_to_frame(iframe)
iframe.tag_name

导致错误:

StaleElementReferenceException: Message: The element reference of <iframe id="tradingview_d311f"> stale: either the element is no longer attached to the DOM or the page has been refreshed

要切换到 iframe,有 3 种方法可以完成此任务。

1.通过使用 iframe

的索引

查看网页,我看到页面上有 4 个 iframe,您对第 3 个(index = 2)感兴趣。所以你可以使用

driver.switch_to_frame(2)

2。通过使用 iframe

的名称或 ID

由于 iframe 没有 name 字段,也没有唯一的 id,此选项在这种情况下无用。

3。通过使用 iframe

的 WebElement

您可以将 iframe 作为 WebElement 获取,然后将焦点切换到它。可以使用 xpath "//iframe[contains(@id, 'tradingview')]"

获取 iframe 的 WebElement

我能够通过 Chrome 复制 Xpath 来让它工作。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()

driver.get('http://investsnips.com/list-of-publicly-traded-micro-cap-diversified-biotechnology-and-pharmaceutical-companies/')
time.sleep(20)


x= driver.find_element_by_xpath('/html/body/div[1]/div/div/article/div/div[2]/div/div[2]/div[1]/div/div/div[1]/iframe')

driver.switch_to_frame(x)