首页 >后端开发 >Python教程 >为什么 Selenium 在 Chrome 中控制 QWOP 游戏时会抛出'NoSuchElementException”,如何修复?

为什么 Selenium 在 Chrome 中控制 QWOP 游戏时会抛出'NoSuchElementException”,如何修复?

DDD
DDD原创
2024-12-28 03:12:10923浏览

Why Does Selenium Throw a

使用Chrome时Selenium“NoSuchElementException”

在Chrome上使用Selenium玩QWOP游戏时,您可能会遇到“selenium.common” .exceptions.NoSuchElementException”错误。这通常发生在 Selenium 无法使用给定定位器找到指定元素时。

NoSuchElementException 的原因

  • 定位器策略无效或不正确
  • 元素不在浏览器视口内
  • 元素被隐藏或将显示属性设置为“none”
  • 非唯一定位器策略导致定位隐藏或不可见的元素
  • 元素放置在 iframe 中
  • WebDriver 正在尝试找到该元素之前的位置存在/可见

解决方案

  • 使用有效且唯一的定位器策略。使用浏览器的开发工具检查元素。
  • 使用execute_script() 方法将元素滚动到视图中。
  • 如果元素被隐藏,请使用execute_script() 删除显示属性。
  • 如果元素嵌套在一个 iframe 中,则切换到适当的 iframe。
  • 使用 WebDriverWait 等待在交互之前要显示、可见或可点击的元素。

此用例

在提供的代码中,“selenium.common.exceptions.NoSuchElementException ” 发生的原因是 id 定位器(“window1”)不能唯一标识画布元素。要解决此问题,请使用以下修改后的代码:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

browser = webdriver.Chrome()
browser.set_window_size(640, 480)
browser.get('http://www.foddy.net/Athletics.html?webgl=true')
browser.implicitly_wait(10)

canvas = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//canvas[@id='window1']")))
canvas.click()

while (True):
    action = ActionChains(browser)
    action.move_to_element(canvas).perform()
    canvas.click()
    canvas.send_keys("q")

此修改可确保 Selenium 等到画布可单击后再尝试与其交互。

以上是为什么 Selenium 在 Chrome 中控制 QWOP 游戏时会抛出'NoSuchElementException”,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn