gpt4 book ai didi

Python Selenium 无法在 Frameset > Frame 中找到元素

转载 作者:行者123 更新时间:2023-12-01 09:34:15 27 4
gpt4 key购买 nike

如何在以下 html 结构中找到突出显示的元素。

Target element highlighted

这是我正在使用的代码。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


browser = webdriver.Edge()
browser.implicitly_wait(5) # seconds
browser.get(url) # aspx page

browser.find_element_by_id("LoginBtn").click()

browser.find_element_by_id("ReportingMenuName").click()
browser.find_element_by_id("EndpointDataExportSubmenuName").click()
browser.find_element_by_id("EndpointDataExportMenuItem").click()

browser.switch_to_default_content()

browser.switch_to.frame(browser.find_element_by_id("main"))

element = WebDriverWait(browser, 10).until(EC.presence_of_element_located(\
(By.ID, "ct100_PageBody_OkButton")))
element.click()

当我运行代码时,当它到达最后两行代码时,我收到此错误:超时异常

如果我为此更改最后两行代码,则会收到另一个错误。

browser.find_element_by_id("ct100_PageBody_OkButton").click()

NoSuchElementException:没有这样的元素

最佳答案

您需要考虑以下几件事:

  • 当您访问/登录某个网址时,Selenium 的焦点位于 Top Level Browsing Context 。因此,在切换到任何框架之前,您不需要switch_to_default_content()。因此您可以省略该行:

    browser.switch_to_default_content()
  • 当您通过 switch_to.frame() 切换到框架时,会使用子句 frame_to_be_available_and_switch_to_it 引发 WebDriverWait使框架可用于切换,如下所示:

    WebDriverWait(browser, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"main")))
  • 在调用 click() 时识别出向前移动的元素后,在框架内,因此将 expected_conditions 替换为 presence_of_element_ located您需要使用 element_to_be_clickable如下:

    WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='buttontext' and contains(@id,'_PageBody_OkButton')]"))).click()

关于Python Selenium 无法在 Frameset > Frame 中找到元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49675286/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com