我正在嘗試將 Selenium 的“焦點”切換到另一個 iframe 內的 iframe 內的內容。到目前為止,我下面的硒測驗似乎有效。但是,我想獲取該 iframe 中的另一個 iframe - 但我現在不確定。
這是標記(突出顯示的第二個 iframe):

這是我到目前為止的測驗(它有效 - 只是不確定如何在第一個 iframe 中獲取第二個 iframe):
import unittest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from .functional_test import FunctionalTest
class MyTest(FunctionalTest):
URL = '/datastory/my-datastory/'
@classmethod
def setUpClass(cls):
"""Set up method."""
super().setUpClass()
cls.URL = cls.format_url(cls.URL)
cls.login_user(cls)
def test_iframe(self):
container = self.browser.find_element_by_id('visual-31')
carousel = container.find_element_by_css_selector('.col-sm-12:nth-child(2) div.visual #classics-50-carousel')
wait = WebDriverWait(self.browser, 60)
wait.until(ec.visibility_of(carousel))
page_source = carousel.get_attribute("src");
self.assertEqual(
page_source,
'https://observablehq.com/embed/@ddsg/paramount-databyte-visuals?cells=classics50yrs'
)
# switch Selenium focus to the iframe
iframe = self.browser.switch_to.frame(carousel);
#NOW HOW DO I GET THE OTHER IFRAME??
# switch back
self.browser.switch_to.default_content()
uj5u.com熱心網友回復:
要在嵌套<iframe>元素內切換,您必須:
誘導WebDriverWait用于父 幀可用,并切換到它。
誘導WebDriverWait為孩子 框架可用,并切換到它。
然后
driver.find_element()您可以使用以下任一定位器策略:
使用CSS_SELECTOR:
driver.get('https://xyz/datastory/my-datastory/') WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.content[src='https://observablehq.com/embed/@ddsg/paramount-databyte-visuals?cells=classics50yrs']"))) WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.content[src*='observableusercontent']"))) element = driver.find_element(By.ID, "id")使用XPATH:
driver.get('https://xyz/datastory/my-datastory/') WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='content' and @src='https://observablehq.com/embed/@ddsg/paramount-databyte-visuals?cells=classics50yrs']"))) WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@src, 'observableusercontent')]"))) element = driver.find_element(By.ID, "id")
注意:您必須添加以下匯入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
參考
您可以在以下位置找到一些相關討論:
- iframe下#document的處理方式
- 通過Selenium和python切換到iframe
- selenium.common.exceptions.NoSuchElementException:訊息:沒有這樣的元素:嘗試使用硒單擊“下一步”按鈕時無法定位元素
- python中的硒:NoSuchElementException:訊息:沒有這樣的元素:無法定位元素
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/376131.html
