似乎无法使用Selenium连接到iframe

时间:2017-04-30 20:16:05

标签: selenium-webdriver python-3.6

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

2 个答案:

答案 0 :(得分:2)

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

<强> 1。使用iframe的索引

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

driver.switch_to_frame(2)

<强> 2。使用iframe的名称或ID

由于iframe没有name字段,并且没有唯一的id,因此在此方案中此选项无效。

第3。使用iframe的WebElement

您可以将iframe作为WebElement获取,然后将焦点切换到它。可以使用xpath iframe

获取"//iframe[contains(@id, 'tradingview')]"的WebElement

答案 1 :(得分:1)

我能够通过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)