![](/img/trans.png)
[英]Exception has occurred: TypeError 'WebElement' object is not subscriptable
[英]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 中的[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.