关于python:使用Chrome时Selenium“selenium.common.exceptions.NoSuchElementException”

Selenium “selenium.common.exceptions.NoSuchElementException” when using Chrome

我正在尝试在Chrome上使用Selenium玩QWOP,但我一直收到以下错误:

1
2
3
4
5
6
selenium.common.exceptions.NoSuchElementException:
Message: no such element: Unable to locate element
{"method":"id","selector":"window1"
(Session info: chrome=63.0.3239.108
(Driver info: chromedriver=2.34.522913
(36222509aa6e819815938cbf2709b4849735537c), platform=Linux 4.10.0-42-generic x86_64)

使用以下代码时:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

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

canvas = browser.find_element_by_id("window1")

canvas.click()

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

同样的代码在firefox上也能很好地工作,但是因为我想使用chrome的功能在headless模式下运行webgl游戏,所以我不能真正地切换到firefox。

有什么解决办法来解决这个问题吗?


NoSuchElementException

这是一个selenium.common.exceptions.NoSuchElementExceptionpopularly NoSuchElementException定义:

1
exception selenium.common.exceptions.NoSuchElementException(msg=None, screen=None, stacktrace=None)

在2例NoSuchElementException是thrown基本如下:

  • 当使用:

    1
    2
    webdriver.find_element_by_*("expression")
    //example : my_element = driver.find_element_by_xpath("xpath_expression")
  • 当使用:

    1
    2
    element.find_element_by_*("expression")
    //example : my_element = element.find_element_by_*("expression")

在每个API文档就像任何其他selenium.common.exceptionsNoSuchElementException应该包含以下参数:

  • 味精、屏程序

    1
    2
    3
    4
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":".//*[@id='create-portal-popup']/div[4]/div[1]/button[3]"}
      (Session info: chrome=61.0.3163.100)
      (Driver info: chromedriver=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 10.0.10240 x86_64)

的原因

原因之一是大学时抛出,可以以下:

  • 该定位策略来确定你是不是在任何HTML DOM元素。
  • 该策略通过定位器,你无法确定它不在元件浏览器的视窗。
  • 你有明确的定位策略所采用的是一元,但由于存在无形的属性样式="不显示"。
  • 你必须采取的战略定位非常明确的目的不是在HTML DOM元素的发现在其他一些隐藏的和无形的元/。
  • 你想webelement的定位是在一