簡體   English   中英

類型錯誤:'WebElement' object 不可下標

[英]TypeError: 'WebElement' object is not subscriptable

我嘗試使用 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()

錯誤:

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

此錯誤消息...

TypeError 'WebElement' object is not subscriptable

...表示您已將索引附加到不受支持的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]
        

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相關聯。


解決方案

有兩種方法可以解決這個問題。

  • 在第一種方法中,您可以刪除索引,即[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""")
  • 在另一種方法中,您可以使用find_elements_by_xpath() find_element_by_xpath()創建列表,並使用索引[0]訪問列表中的第一個元素,而不是使用 find_element_by_xpath(),如下所示:

     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]

參考

您可以在以下位置找到一些相關的討論:

find_element_by_xpath

返回第一個找到的元素(不是數組)

find_element_by_xpath(...).click()

或者

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

正如@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() 

對於遇到此錯誤的每個人:您可能將driver.find_element()driver.find_elements()混淆了,並且您試圖從WebElement object 中獲取單個項目,而不是從list檢查它在您的代碼中

driver.find_elements()返回適當的 WebElements 列表

還有另一個 function - driver.find_element()你可以這樣說:
driver.find_element() = driver.find_elements()[0]


在此示例中,Python 試圖從driver.find_element() object 中獲取第一項,它返回WebElement object,而不是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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM