Je cours Python 3.6 sur un iMac (OS: Sierra). J'utilise ChromeDriver 2.33 et la dernière version du package Selenium (de PIPY). Je suis en train d'accéder (en utilisant find_element_by_xpath
) les éléments de la colonne d'une ligne de tableau comme indiqué ci-dessous:python selenium chromedriver xpath "pas un tel élément"
Je peux accéder aux trois premières cellules (balises TH) intégrés dans la ligne (balise TR). Quand j'arrive à la 4ème cellule (balise TH) le driver chrome signale (via python) 'No such element'. J'attends 10s de secondes après le chargement de la page avant d'essayer d'accéder à l'élément (aussi, je peux excéder la cellule 1-3 pour cette ligne) donc ce n'est évidemment pas un problème de timing.
L'élément Web (cellule 4) est visible dans le navigateur Web. En outre, j'ai utilisé la fonction de recherche d'élément Web dans le développeur chrome pour vérifier le xpath (et il vérifie très bien). De toute évidence, le problème n'est pas que l'élément n'est pas visible.
Je me demande quel est le problème? Ou au moins, je voudrais une recommandation sur la façon de déboguer cela?
En réponse aux commentaires: J'utilise l'appel python suivant
CHROMEDRIVER.find_element_by_xpath ("// * [@ id =" mainContent_ugReservationGrid_tableGridParent "]/div 1/table/thead/tr [ 3]/th [INDEX] ") ' où' INDEX 'est ma variable de boucle .. 1-3 fonctionne bien mais quand la variable de la boucle arrive à 4, j'obtiens l'exception'
No Such Element
'.
Remplacée Chrome avec Firefox & geckodriver: Il semble être un problème avec l'interface Chrome. Firefox fonctionne comme prévu sans aucune autre modification.
Quel est l'appel que vous utilisez pour obtenir les trois premières cellules? Pour déboguer, je commencerais par vérifier si vous êtes en mesure d'obtenir tous les éléments TR en utilisant find_elements_by_tag_name (ou tout ce que python utilise pour cet appel, j'utilise C#). Créez une fonction pour obtenir tous les éléments sur la page avec la balise TR et imprimez-les sur votre console pour vous assurer que tout est retourné et ensuite partir. – JOberloh