[PYTHON] Je ne peux pas obtenir l'élément dans Selenium!

Les ennuis d'aujourd'hui

Vérification automatique des sites Web et des systèmes Web à l'aide de Selenium.

Je ne peux pas obtenir cet élément en utilisant find_element_by_xpath! Je pourrais prendre l'élément juste avant ça ...!

Contexte

À l'origine, il y avait un site Web qui disait: "Pour une raison quelconque, ce site ne peut pas être vérifié avec Selenium."

Eh pas question www La manière d'assembler la personne qui l'a fait (pas plus) est mauvaise www

Demandez aux membres: "Voudriez-vous vous rassembler?" Puis, ce mot a été renvoyé.

Je vois. J'ai tout jeté, alors voyons-le en HTML.

Cette solution

** Tout le monde, ajoutons des attributs de classe et d'identifiant au HTML! ** **

… Mais il est absurde de modifier l'écran pour faire une «automatisation de validation». Site Web Bien qu'il soit appelé site Web, le contenu est de toute façon un système Web. Cela peut être php ou JSP.

Cette fois, je veux obtenir le texte de l'article 2 à partir de sample.html! Je voudrais expliquer que c'était une exigence.

sample.html


<html>
    <head><!--réduction--></head>
    <body>
        <div id='wrap'>
            <div class='article'>
                <article>
                    <h1>Titre de l'article 1</h1>
                    <div>
                        <p>Corps de l'article 1</p>
                    </div>
                </article>
            </div><!-- .article -->
            <div class='article'>
                <article>
                    <h1>Titre de l'article 2</h1>
                    <div>
                        <p>Corps de l'article 2</p>
                    </div>
                </article>
            </div><!-- .article -->
        </div><!-- #wrap -->
    </body>
</html>

Voici la méthode de spécification qui a été dite «ne fonctionne pas».

Ne marche pas.py


path = "/html/body/div/div[2]/article/div"
elmt = driver.find_element_by_xpath(path)

Il semble que vous vouliez spécifier le «div» dans le deuxième «article» du «div» (class = article) dans le «div» (id = wrap) dans le «body» du «html».

Hmmmm. N'est-ce pas "/ html / body / div [5]"?

Je pense que ça marche.py


path = "/html/body/div[5]"
elmt = driver.find_element_by_xpath(path)

Dans la spécification xpath, ** peu importe comment les éléments de l'écran sont imbriqués **. ** "Combien de fois le div est-il apparu du haut?" ** est le critère de jugement. Est-ce similaire à la pseudo-classe CSS : nth-child ()?

Je veux masquer le deuxième <div class = 'article'>

Diverses choses disparaissent.css


div#wrap div:nth-child(2) { display: none; }

Si vous spécifiez, le "second div" dans le premier "div # wrap" sera effacé. Dans le cas de sample.html, les textes de l'article 1 et de l'article 2 sont tous masqués. (Parce que c'est un échantillon, spécifiez la classe! ... Ne dites pas)

Hmm. Quelque chose ne va pas. ..

Conclusion

Après tout, une créature appelée programmeur est une race qui vit en se souciant des retraits et des nids, donc elle peut être mal comprise, mais je ne sais pas quel type de structure le HTML est écrit dans un programme externe. Qu'il s'agisse de CSS, de Python ou de Java, ils ne bougent pas à la lumière de la volonté humaine. Seules les ** personnes ** qui l'ont développé savent qu '«il y a plusieurs articles et il y a des blocs similaires» comme dans ce cas.

** Lors de la spécification d'un élément avec find_element_by_xpath, combien de fois l'élément apparaît-il en partant du haut? Notez s'il vous plaît **.

Recommended Posts

Je ne peux pas obtenir l'élément dans Selenium!
Quand j'obtiens une erreur de pilote chrome dans Selenium
Je ne peux pas saisir de caractères dans la zone de texte! ?? !! ?? !! !! ??
Obtenez la valeur sélectionnée dans le menu déroulant Selenium Python VBA
Impossible de manipuler l'iframe dans la page avec Selenium
[Note] Le module installé ne peut pas être appelé dans jupyter.
Je ne peux pas utiliser la commande darknet dans Google Colaboratory!
Je n'arrive pas à me connecter à la page d'administration avec Django 3
Obtenez le nombre d'occurrences pour chaque élément de la liste
Obtenez l'index de chaque élément de la matrice de confusion en Python
J'obtiens un UnicodeDecodeError avec mecab-python3
Je me suis perdu dans le labyrinthe
J'ai participé au tour de qualification ISUCON10!
Obtenez le premier élément du jeu de requêtes
Scikit-learn ne peut pas être installé en Python
J'ai écrit la file d'attente en Python
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
J'ai écrit la pile en Python
Récupérer la chaîne de requête (chaîne de requête) avec Django
Comment déterminer l'existence d'un élément sélénium en Python
J'obtiens un attribut impossible à définir lors de l'utilisation de @property en python
Que faire lorsque vous obtenez "Je ne peux pas voir le site !!!!"
Je ne peux pas importer de modules dans le répertoire parent même avec sys.path.append ('..')
Obtenez l'adresse IP du client avec Django
Obtenir le code HTML de l'élément avec du sélénium Python
Obtenez les nièmes valeurs les plus importantes dans Pandas
Je ne peux pas déboguer les scripts python dans Eclipse
J'ai essayé de sauvegarder les données récupérées au format CSV!
Tri sélect écrit en C
Python "Je ne peux pas atteindre l'endroit qui démange ..."
Obtenir la liste de codes EDINET en Python
J'ai écrit l'aile coulissante dans la création.
Je ne peux pas installer le package avec pip.
Pourquoi ne puis-je pas installer matplotlib avec python! !!
Python VBA pour obtenir une capture de la page WEB entière avec Selenium
Cliquez sur les liens Selenium afin d'obtenir les éléments des pages individuelles
Je ne trouve pas les commandes dans le package introduit par pip d'Emacs
[Python] Récupérez les fichiers dans le dossier avec Python
Obtenez la météo à Osaka via l'API Web (python)
Je ne peux pas utiliser le paramètre "next_results" dans l'API de recherche d'API Twitter! ?? Causes et remèdes
Selenium + Firefox 47+ Impossible de charger le profil. Gestion des erreurs
Erreur d'importation: impossible d'importer le nom 'Flask' lorsque le nom de fichier est flask.py dans Flask
J'ai essayé la méthode des moindres carrés en Python
Obtenir uniquement les éléments de sous-classe dans une liste
Une fenêtre étrange apparaît lors de l'utilisation de la boîte de dialogue Ouvrir le répertoire dans Tkinter
Obtenez le titre de la fenêtre du système X Window en Python
Comment obtenir les fichiers dans le dossier [Python]
J'ai essayé d'implémenter la fonction gamma inverse en python
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
J'ai vérifié le calendrier supprimé dans le calendrier de l'Avent Qiita 2016
Connectez-vous avec json en utilisant pygogo.
Obtenez le dernier élément du tableau en fractionnant les chaînes en Python et PHP
J'ai essayé d'implémenter Human In The Loop - Partie ① Tableau de bord -
Je veux afficher la progression en Python!
Obtenir des lignes contenant des éléments spécifiques dans np.where
J'ai essayé de représenter graphiquement les packages installés en Python
Comment obtenir le nom de la variable lui-même en python
Obtenir le nom de fichier dans un dossier à l'aide de glob