TypeError:“ WebElement”对象不可下标

时间:2019-11-06 15:59:25

标签: python selenium webdriver

我尝试使用Python在Spotify Web Player上按“重播”按钮,但出现此错误。如何在网络播放器中按按钮?

replay = driver.find_element_by_xpath("""/html/body/div[2]/div/div[4]/div[3]/footer/div/div[2]/div/div[1]/div[5]/button""")[0]
replay.click()

错误:

  

重播= driver.find_element_by_xpath(“”“ / html / body / div [2] / div / div [4] / div [3] /页脚/ div / div [2] / div / div [1] / div [5] /按钮“”“)[0]   TypeError:“ WebElement”对象不可下标

谢谢:)

3 个答案:

答案 0 :(得分:1)

此错误消息...

TypeError 'WebElement' object is not subscriptable

...表示您已将索引附加到不受支持的WebElement


分析

list 元素可以建立索引。但是,在此代码行中:

replay = driver.find_element_by_xpath("""/html/body/div[2]/div/div[4]/div[3]/footer/div/div[2]/div/div[1]/div[5]/button""")[0]
        

driver.find_element_by_xpath("""/html/body/div[2]/div/div[4]/div[3]/footer/div/div[2]/div/div[1]/div[5]/button""")将始终返回单个 WebElement 。因此,您无法通过任何索引访问元素,例如[0][1]等作为 index 只能与 list 关联。


解决方案

有两种解决方法。

  • 在第一种方法中,您可以删除 index ,即[0],在这种情况下,replay将分配有通过locator strategy如下:

    replay = driver.find_element_by_xpath("""/html/body/div[2]/div/div[4]/div[3]/footer/div/div[2]/div/div[1]/div[5]/button""")
    
  • 在另一种方法中,可以使用find_element_by_xpath()创建 list 而不是使用find_elements_by_xpath()并从 List < / em>使用索引[0],如下所示:

    replay = driver.find_elements_by_xpath("""/html/body/div[2]/div/div[4]/div[3]/footer/div/div[2]/div/div[1]/div[5]/button""")[0]
    

参考

您可以在以下位置找到一些相关的讨论

答案 1 :(得分:0)

根据@KunduK的评论,删除[0]

不建议您使用绝对xPath。

尝试使用相对xPath ...

如果有几个按钮,您需要先在xpath中使用[0],如下所示:

replay = driver.find_element_by_xpath("""/html/body/div[2]/div/div[4]/div[3]/footer/div/div[2]/div/div[1]/div[5]/button[0]""")
replay.click() 

答案 2 :(得分:0)

find_element_by_xpath

返回找到的第一个元素(不是数组)

find_element_by_xpath(...).click()

find_elements_by_xpath(...)[0].click()