我正在尝试自动化动态站点:https://erp.pgu.ac.ir/Dashboard。该网站包含我需要与之交互的 iframe 和动态元素(由 JavaScript 生成)。我的目标元素位于 iframe 内,我在尝试与该元素交互之前切换到 iframe。但是,我不断遇到 NoSuchElementException。
这是错误:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".first-part-1 .mat-grid-tile:nth-child(2) span"}
这是我正在使用的 HTML 结构:
<iframe src="...">
<div class="mat-grid-tile-content">
<div class="first-part-1">
<div class="mat-grid-tile">
<span>Clickable Element</span>
</div>
</div>
</div>
</iframe>
我使用Selenium IDE记录了步骤并生成了以下Python代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
class TestTest():
def setup_method(self, method):
options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True)
self.driver = webdriver.Chrome(options=options)
def teardown_method(self, method):
self.driver.quit()
def test_test(self):
self.driver.get("https://erp.pgu.ac.ir/Dashboard")
time.sleep(10)
self.driver.set_window_size(1552, 832)
time.sleep(10)
# Switch to iframe
self.driver.switch_to.frame(1)
time.sleep(10)
# Attempt to click the element inside iframe
self.driver.find_element(By.CSS_SELECTOR, ".first-part-1 .mat-grid-tile:nth-child(2) span").click()
testClass = TestTest()
testClass.setup_method("")
testClass.test_test()
testClass.teardown_method("")
我已确保使用 switch_to.frame(1) 切换到 iframe。 我尝试通过添加 time.sleep(10) 来等待 iframe 加载。 我正在使用正确的 CSS 选择器,该选择器在手动检查页面时有效。 尽管如此,我仍然收到 NoSuchElementException 错误。我希望 Selenium 能够找到并单击该元素,但它似乎无法找到它。
那个
iframe
的索引以0
开头,你应该通过以下方式切换到它:
self.driver.switch_to.frame(0)