【发布时间】:2018-04-05 14:48:08
【问题描述】:
如何在以下 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 行代码,则会收到另一个错误。
browser.find_element_by_id("ct100_PageBody_OkButton").click()
NoSuchElementException: 没有这样的元素
【问题讨论】:
-
您可以尝试使用 find by selector 和值 "input[id$='OkButton']" ,而不是使用 find by id 。 . 因为,您可以切换到 id = main 的框架而不会遇到异常,并且您得到 No such element ,很可能 id 是动态的,我猜测 ct100 部分正在改变...考虑共享页面 url 如果它是一个公共站点。建议的选择器将匹配 id 以 OkButton 结尾的输入元素。
-
一个选项是睡眠(2-3 秒取决于延迟)黑白切换到帧和预期的条件元素将解决这个问题。我也遇到过这个问题,但找不到更好的解决方案。
-
在stackoverflow.com/questions/49677267/…987654322@
-
Nish26,你建议用户通过 css 选择器找到工作。谢谢你。我想知道您是如何得出元素 id 是动态的结论的?当你说动态是因为它可以在不同的会话中改变?当我用不同的浏览器检查元素时,它总是显示相同的 id。
标签: python python-3.x selenium selenium-webdriver webdriver