Maison > développement back-end > Tutoriel Python > Pourquoi Selenium lance-t-il une « NoSuchElementException » lors du contrôle du jeu QWOP dans Chrome, et comment peut-elle être corrigée ?

Pourquoi Selenium lance-t-il une « NoSuchElementException » lors du contrôle du jeu QWOP dans Chrome, et comment peut-elle être corrigée ?

DDD
Libérer: 2024-12-28 03:12:10
original
923 Les gens l'ont consulté

Why Does Selenium Throw a

Selenium "NoSuchElementException" lors de l'utilisation de Chrome

Lorsque vous utilisez Selenium sur Chrome pour jouer au jeu QWOP, vous pouvez rencontrer le message "selenium.common .exceptions.NoSuchElementException". Cela se produit généralement lorsque Selenium ne peut pas trouver l'élément spécifié à l'aide du localisateur donné.

Raisons de NoSuchElementException

  • Stratégie de localisation invalide ou incorrecte
  • L'élément n'est pas dans la fenêtre d'affichage du navigateur
  • L'élément est masqué ou son attribut d'affichage est défini à "aucun"
  • Une stratégie de localisation non unique entraîne la localisation d'un élément caché ou invisible
  • L'élément est placé dans une iframe
  • WebDriver tente de localiser l'élément avant qu'il ne soit présent/visible

Solution

  • Utilisez une stratégie de localisation valide et unique. Inspectez l'élément à l'aide des outils de développement du navigateur.
  • Faites défiler l'élément à l'aide de la méthode execute_script().
  • Si l'élément est masqué, supprimez l'attribut d'affichage à l'aide d'execute_script().
  • Basculez vers l'iframe approprié si l'élément est imbriqué dans un seul.
  • Utilisez WebDriverWait pour attendre que l'élément soit présent, visible ou cliquable avant d'interagir.

Ce cas d'utilisation

Dans le code fourni, le "selenium.common.exceptions.NoSuchElementException" se produit car le le localisateur d'identifiant ("window1") n'identifie pas de manière unique l'élément canevas. Pour résoudre ce problème, utilisez le code modifié suivant :

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")
Copier après la connexion

Cette modification garantit que Selenium attend que le canevas soit cliquable avant de tenter d'interagir avec lui.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal