1
votes

Élément de recherche de sélénium avec action de forme

J'essaye actuellement Selenium pour développer un programme pour automatiser le test du formulaire de connexion des sites Web.

J'essaie d'utiliser Selenium pour trouver un formulaire sur les sites Web sur lesquels je teste et j'ai remarqué que différents sites Web ont un nom de formulaire, un identifiant de formulaire ou même des sites Web qui n'ont pas les deux. Mais d'après mes observations, j'ai remarqué que l'action de formulaire est toujours là et j'ai utilisé les codes ci-dessous pour récupérer le nom de l'action de formulaire

request = requests.get("whicheverwebsite")
parseHTML = BeautifulSoup(request.text, 'html.parser')
htmlForm = parseHTML.form
formName = htmlForm['action'] 

J'essaye de récupérez le formulaire et ensuite en utilisant form.submit () pour soumettre.

Je connais les fonctions find_element_by_name et find_element_by_name, mais comme j'essaie de trouver l'élément par action et je ne sais pas comment cela peut être terminé.


0 commentaires

3 Réponses :


0
votes

Je vous recommande d'inclure l'URL d'un ou deux des sites que vous essayez de récupérer et votre code complet. Sur la base des informations ci-dessus, il semble que vous utilisez BeautifulSoup plutôt que Selenium.

J'utiliserais ce qui suit:

from selenium import webdriver


url = 'https://whicheverwebsiteyouareusing.com'
driver = webdriver.Chrome()

driver.get(url)

De là, vous avez de nombreuses options pour sélectionner le formulaire, mais encore une fois, sans le site réel, nous ne pouvons pas identifier lequel serait le plus pertinent. Je recommanderais de lire https://selenium-python.readthedocs.io/locating-elements. html pour savoir lequel serait le plus applicable à votre situation.

J'espère que cela vous aidera.


0 commentaires

1
votes

J'ai trouvé la réponse à cette question.

En utilisant xpath et en utilisant la forme et l'action, je peux y parvenir.

form = driver.find_element_by_xpath("//form[@action='" + formName + "']")


0 commentaires

0
votes

Gardez à l'esprit que la page de connexion peut avoir plusieurs balises form même si vous n'en voyez qu'une. Voici l ' Exemple lorsque la page de connexion n'a qu'un seul formulaire visible alors qu'il y en a 3 dans DOM.

Le moyen le plus fiable est donc de fouiller dans le formulaire (s'il y en a plusieurs) et de vérifier deux choses:

  • S'il existe un élément [type = password] (nous avons certainement besoin d'un mot de passe pour nous connecter)
  • S'il y a la deuxième entrée ici (bien qu'elle puisse être considérée comme facultative)

Exemple Ruby:

forms = page.all(:xpath, '//form')  # retrieve all the forms and iterate
forms.each do |form|
   # if there's a password field             if there's two input fields in general
  if form.has_css?('input[type=password']) && form.all(:xpath, '//input').count == 2)
    return form
  end
end


0 commentaires