【问题标题】:python selenium Attribute error in a while loop while using .click() while trying an exceptpython selenium 属性错误在 while 循环中使用 .click() 时尝试除外
【发布时间】:2021-03-23 17:39:11
【问题描述】:
        i=1

        while i<=numberCountGlobal:
            time.sleep(1)
            print("i is: ",i)
            self.tempString='//*[@id="grid-view"]/div[{}]/div[4]/button'.format(i)
            try:
                self.driver.find_element_by_xpath(self.tempString).click()
                print("button press sucessfull")

            except NoSuchAttributeException:
                print("Nothing here.. skipping")

            i+=1

错误:

self.driver.find_element_by_xpath(self.tempString).click()
AttributeError: 'NoneType' object has no attribute 'click'

这会抛出一个属性错误,但是当我试图期待它时,它就不起作用了。当我关闭浏览器时,控制台中会出现代码错误。

它试图点击网站中的特定按钮,它们要么很多,要么很少,因此我使用了一个 while 循环来遍历“那里”的所有按钮

例如,如果.. 我删除了.click() 并保持原样,在我关闭浏览器之前它仍然没有错误,然后它就来了。我也不确定为什么当错误应该是NoSuchElementException时它会给出一个属性错误,因为当没有按钮时这个元素不存在! (是的,我也试过这个,但仍然有同样的问题)以及except AttributeError

所以如果一个按钮不存在,xpath 将无法工作,因为元素不存在,如果存在,它将在正确的索引中,所以如果第 5 个按钮在那里,它将是:@987654326 @

【问题讨论】:

  • 属性错误是什么
  • 你可以删除 try-expect 并添加你得到的错误
  • 你能用方法添加完整的代码吗
  • 感谢 PDHide 的回复,但我想通了并发布了答案,需要隐式等待。
  • 你能让你的答案对stackover flow社区更有帮助吗,这个答案没有帮助。真正的问题是为什么它说 nonetype , find element 不应该返回 nonetype

标签: python selenium while-loop selenium-chromedriver try-except


【解决方案1】:

修复: 在尝试之后添加一个隐式等待:

        i=1

        while i<=numberCountGlobal:
            time.sleep(1)
            print("i is: ",i)
            self.tempString='//*[@id="grid-view"]/div[{}]/div[4]/button'.format(i)
            try:
                self.driver.implicitly_wait(1)
                self.driver.find_element_by_xpath(self.tempString).click()
                print("button press sucessfull")

            except NoSuchAttributeException:
                print("Nothing here.. skipping")

            i+=1```

【讨论】:

    【解决方案2】:

    我不知道 selenium,但如果异常没有捕获它,那么这意味着你有错误的异常类型。它是“属性错误”而不是您所说的原因是“self.driver.find_element_by_xpath(self.tempString)”返回为“无”。根据我在 BeautifulSoup 上的工作,这可能是因为它找不到带有 self.tempString 的 xpath 的元素。属性错误是由于 python 将其解释为“None.click()”而导致的,而没有明显的 None 的 click 属性。

    我希望这会有所帮助。

    【讨论】:

    • 嗨,我明白我的意思,但我试图在没有 .click() 的情况下打印它,它不起作用,但是在我关闭浏览器后,它不会返回任何内容
    • 打印时会发生什么(self.driver.find_element_by_xpath(self.tempString)?
    • 问题被发现并添加为答案,我的问题的另一部分是网站加载速度太慢,因此添加等待解决了问题。
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多