类型错误:“WebElement”对象不可订阅

Hi3*_*i3t 5 python selenium webdriver typeerror 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()
Run Code Online (Sandbox Code Playgroud)

错误:

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]
TypeError: 'WebElement' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

Deb*_*anB 8

这个错误信息...

TypeError 'WebElement' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

...意味着您已将索引附加到不受支持的WebElement 。


分析

只有列表元素可以被索引。然而,在这行代码中:

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]
        
Run Code Online (Sandbox Code Playgroud)

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]索引只能list关联。


解决方案

有两种方法可以解决该问题。

  • 在第一种方法中,您可以删除索引ie[0]在这种情况下replay,将分配通过定位器策略识别的第一个匹配元素,如下所示:

    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""")
    
    Run Code Online (Sandbox Code Playgroud)
  • 在另一种方法中,find_element_by_xpath()您可以使用索引创建列表使用索引访问列表find_elements_by_xpath()中的第一个元素,而不是使用,如下所示:[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]
    
    Run Code Online (Sandbox Code Playgroud)

参考

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


Mos*_*vin 0

正如@KunduK评论的那样,删除[0].

您正在使用绝对 xPath,不建议这样做。

尝试使用相对 xPath...

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

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() 
Run Code Online (Sandbox Code Playgroud)