Элемент поиска селена с действием формы - PullRequest
0 голосов
/ 17 июня 2020

В настоящее время я пробую Selenium для разработки программы для автоматизации тестирования формы входа на веб-сайты.

Я пытаюсь использовать Selenium для поиска формы на веб-сайтах, которые я тестирую, и я ' Мы заметили, что разные веб-сайты имеют разное имя формы, идентификатор формы или даже веб-сайты, на которых нет того и другого. Но по моим наблюдениям я заметил, что действие формы всегда присутствует, и я использовал приведенные ниже коды, чтобы получить имя действия формы

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

Я пытаюсь получить форму, а затем использую form.submit () для отправки.

Мне известны функции find_element_by_name и find_element_by_name, но я пытаюсь найти элемент по действию, и я не уверен, как это можно сделать.

Ответы [ 3 ]

0 голосов
/ 17 июня 2020

Я нашел ответ на это.

Используя xpath, форму и действие, я могу этого добиться.

form = driver.find_element_by_xpath("//form[@action='" + formName + "']")
0 голосов
/ 17 июня 2020

Имейте в виду, что на странице входа может быть несколько тегов form, даже если вы видите только один. Вот пример , когда на странице входа есть только одна видимая форма, хотя в DOM их 3.

Так что самый надежный способ - копаться в форме (если их несколько) и проверьте две вещи:

  • Если есть элемент [type=password] (нам определенно нужен пароль для входа)
  • Если там второй вход (хотя его можно рассматривать как необязательный )

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 голосов
/ 17 июня 2020

Я бы рекомендовал включить URL-адрес одного или двух сайтов, которые вы пытаетесь очистить, и ваш полный код. Исходя из приведенной выше информации, похоже, что вы используете BeautifulSoup, а не Selenium.

Я бы использовал следующее:

from selenium import webdriver


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

driver.get(url)

Оттуда у вас есть много вариантов для выбора формы, но опять же, без фактического сайта мы не можем определить, какой из них будет наиболее подходящим. Я бы порекомендовал прочитать https://selenium-python.readthedocs.io/locating-elements.html, чтобы узнать, что лучше всего подходит для вашей ситуации.

Надеюсь, это поможет.

...