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
答案 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)