python sélénium cliquez sur le bouton
Je suis tout à fait nouveau pour python sélénium et je suis en train d'essayer de cliquer sur un bouton qui a le code html suivant la structure:
<div class="b_div">
<div class="button c_button s_button" onclick="submitForm('mTF')">
<input class="very_small" type="button"></input>
<div class="s_image"></div>
<span>
Search
</span>
</div>
<div class="button c_button s_button" onclick="submitForm('rMTF')" style="margin-bottom: 30px;">
<input class="v_small" type="button"></input>
<span>
Reset
</span>
</div>
</div>
Je voudrais être capable de cliquez sur les deux Search
et Reset
boutons ci-dessus (évidemment individuellement).
J'ai essayé plusieurs choses, par exemple:
driver.find_element_by_css_selector('.button .c_button .s_button').click()
ou,
driver.find_element_by_name('s_image').click()
ou,
driver.find_element_by_class_name('s_image').click()
mais, j'ai l'impression de toujours se retrouver avec NoSuchElementException
, par exemple:
selenium.common.exceptions.NoSuchElementException: Message: u'Unable to locate element: {"method":"name","selector":"s_image"}' ;
Je me demande si je peux en quelque sorte d'utiliser les attributs onclick du HTML pour faire le sélénium cliquez sur?
Toutes les pensées qui peut me pointer dans la bonne direction serait génial.
Merci.
Vous devez vous connecter pour publier un commentaire.
Supprimer l'espace entre les classes dans le sélecteur css:
=>
NoSuchElementException
erreur!print(driver.page_source)
, et de vérifier le code html contient en fait l'élément.print(driver.page_source)
et a constaté qu'il a été nommé différents. Étrange. Il clique maintenant, quand j'ai pris les espaces à l'écart et renommé. Sur un suivi tho: comme vous pouvez le voir, même le bouton reset et le bouton de recherche a le mêmeclass
: comment fait-on la distinction entre la recherche et les boutons reset tout en cliquant dans ce cas?driver.find_element_by_xpath('.//div[@class="button c_button s_button"][contains(., "Search")]')
essayez ceci:
télécharger firefox, ajouter le plugin "firebug" et "firepath"; après l'installation, allez à votre page web, commencer à firebug et de trouver le chemin xpath de l'élément, c'unique dans la page, donc vous ne pouvez pas faire une erreur.
Voir photo:
navigateur.find_element_by_xpath('suffit de copier et coller le Xpath').cliquez sur()
J'ai eu le même problème à l'aide de Phantomjs comme navigateur, j'ai donc résolu de la manière suivante:
Essentiellement, j'ai ajouté le nom de la balise DIV dans le devis.
La suite de processus de débogage m'a aidé à résoudre un problème similaire.
Ensuite, vous devez avoir deux fichiers texte avec la première page que vous étiez sur ('output_init.txt') et la page que vous ont été transmis après avoir cliqué sur le bouton ('output_dest.txt'). Si elles sont de la même, alors oui, votre code ne fonctionne pas. Si ils ne le sont pas, alors votre code a fonctionné, mais vous avez une autre question.
La question me semble être le fait que le code javascript nécessaire, qui ont transformé la production de contenu mon crochet n'était pas encore exécuté.
Vos options, comme je le vois:
élément de code. Chercher des réponses plus détaillées sur ce sur
stackoverflow, que je n'ai pas suivi cette approche.
Xpath approche n'est pas nécessairement mieux, je viens de le préférez, vous pouvez également utiliser le sélecteur approche.