Trouvez et cliquez sur un élément de "onclick" valeur partielle
Est-il possible de cliquer sur un élément par le biais de sélénium par une valeur partielle d'un onclick
élément?
Il y a plusieurs éléments d'entrée sur une page, et j'ai seulement besoin de sélectionner l'un avec une chaîne de caractères.
Exemples seraient:
<input name="booksubmit" type="button" class="searchAvailBtnSelect" value="Select" onclick="setTimeout('disableSelect()',1);bookNowSubmit('0165','1BD','000000452014022703S000016500010708F ','101400','156000','3','02/27/2014','false','false','false','false','true','false','false','EXPRESS','63','1 Bedroom Deluxe','false','AC')">
<input name="booksubmit" type="button" class="searchAvailBtnSelect" value="Select" onclick="setTimeout('disableSelect()',1);bookNowSubmit('0165','2BD','000000452014022703S000016500010708F ','101400','156000','3','02/27/2014','false','false','false','false','true','false','false','EXPRESS','63','2 Bedroom Deluxe','false','AC')">
<input name="booksubmit" type="button" class="searchAvailBtnSelect" value="Select" onclick="setTimeout('disableSelect()',1);bookNowSubmit('0165','1BD','000000452014022703S000016500010708F ','101400','156000','3','02/27/2014','false','false','false','false','true','false','false','EXPRESS','63','1 Bedroom Presidential','false','AC')">
Si vous remarquez que vers la fin, il y a un "1 Chambre de Luxe", "2 Chambre à coucher de Luxe", et "1 Chambre à coucher à la Présidentielle". Puisque c'est un élément d'entrée, il n'y a pas de texte que je serais en mesure de filtrage, mais j'ai besoin de ne sélectionner un élément spécifique, tel que les 2 chambres de Luxe.
Est-ce que je pourrais faire dans le sens de:
buttons = driver.find_elements_by_name('booksubmit')
for button in buttons:
if button ........
quelque chose ou d'une autre? Je suis actuellement à l'aide beautifulsoup4 également d'analyser le code html sur la page et récupérer du texte qui est associé à l'article, donc je ne sais pas si ça pourrait être intégrée à l'ensemble. Visuellement, la page est un tableau HTML est le format de:
+--------------------------------------------------------------------+
| 1 Bedroom Deluxe | $25 | [button i don't care about] |
|------------------------+---------+---------------------------------|
| 2 Bedroom Deluxe | $50 | [button i'm trying to click] |
|------------------------+---------+---------------------------------|
| 1 Bedroom Presidential | $50 | [button i don't care about] |
+--------------------------------------------------------------------+
EDIT:
Je suppose posté trop vite. Juste après, un coworked est venu et a suggéré de trouver l'élément par Xpath avec:
driver.find_element_by_xpath('//input[contains(@onclick,"1 Bedroom Deluxe")]')
Vous devez vous connecter pour publier un commentaire.
Soit XPath ou CssSelector ferait. Pas besoin d'avoir tout en boucle, mais simple locators.
Vous êtes sur la bonne voie!
Oui, exactement. Vous souhaitez parcourir
name = booksubmit
éléments et vérifier la "onclick" attribut de chacun. Voici ce que le reste serait:BeautifulSoup n'aide pas beaucoup dans ce cas, puisque vous avez encore besoin d'utiliser sélénium méthodes pour obtenir ahold de l'élément, cliquez sur.
Une réponse générale pour la résolution de ces types de problèmes est l'utilisation de Selenium IDE. À partir de là, vous pouvez manuellement cliquez sur les boutons sur un site web et ont Selenium IDE (un plugin Firefox) enregistrer vos actions. De là, vous pouvez Fichier > l'Exportation de Cas de Test Sous... et choisir ce codage de la langue que vous souhaitez.
Sélénium page de téléchargement:
http://docs.seleniumhq.org/download/
Selenium IDE plugin Firefox version 2.9.0
http://release.seleniumhq.org/selenium-ide/2.9.0/selenium-ide-2.9.0.xpi
MODIFIER: Parfois, vous peut-être de trouver le bon élément, mais le webdriver essaie de le trouver avant qu'il est là. Essayez d'ajouter cette ligne après la création de votre webdriver:
En Python:
driver.implicitly_wait(10)
Cela indique à votre webdriver, afin de se donner plus de temps pour essayer de trouver l'objet. Il n'ajoute pas de 10 secondes d'attente, mais il dit de continuer à regarder pendant 10 secondes. Si elle trouve l'élément avant 10 secondes, il continuera comme d'habitude.