【问题标题】:Python + Selenium: How to Locate new occuring Elements in while loop?Python + Selenium:如何在 while 循环中找到新出现的元素?
【发布时间】:2020-09-18 13:18:42
【问题描述】:

我尝试单击特定类的所有按钮。问题是,这些按钮只有在我点击了同一类的按钮时才会出现。我希望我能解释清楚。它是一种通过单击按钮进一步打开的时间线,并且更多按钮被添加到 DOM。我的目标是点击特定类的所有按钮,从而完全展开时间线。

这是我尝试过的:

 while True:
    try:
        button = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "classname")))
        button.click()

        #time.sleep(1)
        #driver.implicitly_wait(2)
    except:
        break

我也试过了,但没有任何区别:

wait = WebDriverWait(driver, 10)
while True:
    try:
        button = wait.until(EC.presence_of_element_located((By.XPATH, "//a[@class='classname']")))
        button.click()
    except:
        break

似乎驱动程序找不到新出现的元素,或者在找到它们之前循环继续。非常感谢您的帮助。

编辑:我收到以下错误

stale element reference: element is not attached to the page document

【问题讨论】:

  • 你遇到了什么错误?
  • 我收到以下错误:过时的元素引用:元素未附加到页面文档
  • 这个错误意味着页面/请求的元素尚未加载。您是否尝试过增加迭代之间的等待时间?
  • 改为presence_of_element_located 试试visibility_of_element_located

标签: python selenium selenium-webdriver webdriver webdriverwait


【解决方案1】:

不要依赖类为您不拥有的网站。 这是您的问题之一,或者将来会出现。 依赖一些会长时间保持静止的东西,比如按钮上的文字。 如果您确定下一个按钮将具有相同的类名,只需存储找到的第一个按钮的类名,搜索其文本并在循环中进一步使用类名。

确保这些按钮也没有加载到 iframe 中,这可能是个问题。 无论如何,请发布页面源代码的两张图片。在第一次点击之前,第二次在您点击第一个按钮之后。

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    相关资源
    最近更新 更多