似乎无法使用 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)
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)