在QWOP 上將Selenium 與Chrome 結合使用時出現NoSuchElementException
問題
問題
嘗試在Chrome上使用Selenium 播放QWOP時,出現以下錯誤遇到:
selenium.common.exceptions.NoSuchElementException: 訊息:沒有這樣的元素:無法定位element<p>{"method":"id","selector":"window1"</p>
登入後複製
分析
- 錯誤「NoSuchElementException」表示Selenium WebDriver 無法找到指定選擇器所識別的元素,在本例中, “window1”畫布元素。發生這種情況的原因有多種,包括:
- 定位器策略不正確或不明確
- 元素不可見或在視口內
- 元素存在但透過CSS 隱藏(例如, "display: none")
- 嵌套在an中的元素iFrame
元素尚未在HTML DOM 中出現或互動
解決方案
- 要解決此問題,請考慮以下方法:
- 確保定位器正確策略:驗證“id”定位器是否唯一並準確定位所需的畫布元素。使用開發者工具(Ctrl Shift I)檢查元素並取得其屬性。
- 處理不可見性或位置:檢查畫布元素是否由於 CSS 樣式而不可見或位於外部頁面的可見區域。使用 JavaScript 的「scrollIntoView()」方法將元素捲動到視圖中。
- 切換到iFrame: 如果畫布元素駐留在iFrame 中,請使用「將Selenium WebDriver 的上下文切換到iFrame」 driver.switch_to.frame()"。
- 使用隱式/明確等待:引發隱式或明確等待,以允許畫布元素在DOM 中出現或互動。標識符的多個元素,則使用更具體的定位器來唯一標識所需的畫布元素。
特定於此用途Case
在這種情況下,「id」定位器對於畫布元素來說不是唯一的。使用以下程式碼等待其變為可按一下狀態:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//canvas[ @id='window1']"))).click()
登入後複製
以上是為什麼 Selenium 在與 QWOP 遊戲的 Canvas 元素互動時拋出 NoSuchElementException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!