如何在以下html结构中找到突出显示的元素。
这是我正在使用的代码。
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()
当我运行代码时,当它到达最后2行代码时出现此错误: TimeoutException异常
如果我为此更改了最后两行代码,那么我会收到另一个错误。
browser.find_element_by_id("ct100_PageBody_OkButton").click()
NoSuchElementException:没有这样的元素
答案 0 :(得分:1)
您需要考虑以下几点:
当您访问/登录网址 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(browser, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"main")))
indu WebDriverWait 切换为框架时,可以切换为如下:
click()
在框架中,一旦您在调用expected_conditions
时识别向前移动的元素,而不是presence_of_element_located
作为WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='buttontext' and contains(@id,'_PageBody_OkButton')]"))).click()
,您需要使用element_to_be_clickable
,如下所示:
{{1}}