#python #selenium
Вопрос:
Python 3.9 и Selenium 4.0.0
HTML-код:
lt;select id="selectedDisplayColumns" name="selectedDisplayColumns" multiple="multiple" size="8"gt; lt;option value="first_name"gt;First Namelt;/optiongt; lt;option value="last_name"gt;Last Namelt;/optiongt; lt;option value="phone"gt;Phonelt;/optiongt; lt;option value="email"gt;Emaillt;/optiongt; lt;option value="city"gt;Citylt;/optiongt; lt;option value="state"gt;Statelt;/optiongt; lt;/selectgt;
Всякий раз, когда я запускаю отчет, эти параметры могут перепутаться, поэтому first_name
может быть 4-й вариант вместо 1-го, но иногда это может быть 1-й вариант.
Поэтому я пытаюсь в основном заставить selenium изменить его порядок так, чтобы он всегда был first name
первым (есть кнопка «Изменить порядок» с xpath //*[@id="configureDisplayColumnsContainer"]/fieldset/div[2]/p/input[4]
и //*[@id="configureDisplayColumnsContainer"]/fieldset/div[2]/p/input[5]
которая является move up
и move down
соответственно. Я должен сначала выбрать опцию, а затем нажать кнопку переместить вверх или вниз, чтобы изменить порядок.
Вот мой текущий код:
from selenium.webdriver.support.ui import Select # xpath for the option menu menu = Select(driver.find_element(By.Xpath, '//*[@id="selectedDisplayColumns"]') selector = Select(menu) for index in range(1, len(menu)-1): print(menu[index])
Ответ №1:
Я бы рекомендовал использовать функцию .getAttribute для извлечения имени атрибута. Вам нужно будет настроить это для точного макета страницы, которую вы очищаете, но я привел краткий пример, демонстрирующий эту функцию:
element = driver.find_element_by_xpath("[@id='configureDisplayColumnsContainer']/fieldset/div[2]/p/input[0]") attribute = element.get_attribute("value") print(attribute)
Это должно вывести все, что является первым атрибутом в определенном xpath. В вашем примере кода он должен выводить «first_name». С этого момента остается только придумать организационную систему, которая наилучшим образом соответствует вашим потребностям в очистке.