Я скопировал неправильную ошибку, я только отредактировал вопрос с правильной ошибкой и ваш совет реализован. Я все еще получаю ту же ошибку.

аюсь игратьQWOP используя Selenium на Chrome, но я продолжаю получать следующую ошибку:

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)

при использовании следующего кода:

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 для запуска игры webgl в режиме без головы, я не могу действительно переключиться на Firefox.

Какие-нибудь обходные пути, чтобы заставить это работать?

Ответы на вопрос(1)

Решение Вопроса
NoSuchElementException

selenium.common.exceptions.NoSuchElementException широко известный какNoSuchElementException определяется как :

 screen=None, stacktrace=None)

NoSuchElementException в основном бросается в 2 случаях следующим образом:

Когда используешь :

webdriver.find_element_by_*("expression")
//example : my_element = driver.find_element_by_xpath("xpath_expression")

Когда используешь :

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

Согласно API Docs, как и любой другойselenium.common.exceptions, NoSuchElementException должен содержать следующие параметры:

msg, screen, stacktrace

    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)
причина

Причина дляNoSuchElementException может быть одним из следующих:

Стратегия локатора вы приняли не идентифицирует какой-либо элемент вHTML DOM.Стратегия локатора Вы не можете идентифицировать элемент, так как его нет в браузере.Viewport.Стратегия локатора вы приняли идентифицирует элемент, но невидим из-за наличия атрибутаstyle = "display: none;".Стратегия локатора вы приняли неоднозначно определяет желаемый элемент вHTML DOM и в настоящее время находит какой-то другойскрытый / невидимый элемент.WebElement вы пытаетесь найти в пределах<iframe> тег.WebDriver экземпляр высматриваетWebElement даже до того, как элемент присутствует / видим в пределахHTML DOM.Решение

Решение для решенияNoSuchElementException может быть одним из следующих:

ПринятьСтратегия локатора который однозначно определяет желаемыйWebElement, Вы можете воспользоваться помощьюИнструменты разработчика (Ctrl+сдвиг+I или жеF12) и использоватьЭлемент Инспектор.

Здесь вы найдете подробное обсуждениеКак проверить элемент в Selen3.6, как Firebug больше не вариант для FF 56?

использованиеexecute_script() метод прокрутки элемента для просмотра следующим образом:

elem = driver.find_element_by_xpath("element_xpath")
driver.execute_script("arguments[0].scrollIntoView();", elem)

Здесь вы найдете подробное обсуждениеПрокрутка до верхней части страницы в Python с помощью Selenium

Элемент Incase имеет атрибутstyle = "display: none;"удалите атрибут черезexecuteScript() метод следующим образом:

elem = driver.find_element_by_xpath("element_xpath")
driver.execute_script("arguments[0].removeAttribute('style')", elem)
elem.send_keys("text_to_send")

Чтобы проверить, находится ли элемент в пределах<iframe> пройти черезHTML найти соответствующий<iframe> тег иswitchTo() желаемыйIFrame с помощью одного из следующих методов:

driver.switch_to.frame("iframe_name")
driver.switch_to.frame("iframe_id")
driver.switch_to.frame(1) // 1 represents frame index

Здесь вы можете найти подробное обсуждениеКак выбрать элемент HTML независимо от того, в каком кадре он находится в селене?.

Если элемент ненастоящее время/видимый вHTML DOM немедленно, побудитьWebDriverWait с участиемexpected_conditions установите правильный метод следующим образом:

Ждатьpresence_of_element_located :

element = WebDriverWait(driver, 20).until(expected_conditions.presence_of_element_located((By.XPATH, "element_xpath']")))

Ждатьvisibility_of_element_located :

element = WebDriverWait(driver, 20).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, "element_css")

Ждатьelement_to_be_clickable :

element = WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.LINK_TEXT, "element_link_text")))
Этот вариант использования

Вы видитеNoSuchElementException посколькуЯ бы локатор не идентифицируетхолст однозначно. Чтобы определить холст иclick() на нем вы должны ждатьхолст бытьclickable и для этого вы можете использовать следующий блок кода:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//canvas[@id='window1']"))).click()
 valorcurse28 дек. 2017 г., 10:28
Я скопировал неправильную ошибку, я только отредактировал вопрос с правильной ошибкой и ваш совет реализован. Я все еще получаю ту же ошибку.

Ваш ответ на вопрос