无法与动态网站上 iframe 内的元素进行交互

问题描述 投票:0回答:1

我正在尝试自动化动态站点: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 能够找到并单击该元素,但它似乎无法找到它。

python selenium-webdriver web-scraping webdriver selenium-ide
1个回答
0
投票

那个

iframe
的索引以
0
开头,你应该通过以下方式切换到它:

self.driver.switch_to.frame(0)
© www.soinside.com 2019 - 2024. All rights reserved.