Selenium webdriver: Как найти ВСЕ атрибуты элемента?

В модуле Python Selenium, когда у меня есть объект WebElement, я могу получить значение любого из его атрибутов с помощью get_attribute() :

 foo = elem.get_attribute('href') 

Если атрибут с именем «href» не существует, возвращается None.

Мой вопрос: как я могу получить список всех атрибутов, которые имеет элемент? Кажется, что не существуют get_attributes() или get_attribute_names() .

3 Solutions collect form web for “Selenium webdriver: Как найти ВСЕ атрибуты элемента?”

Это невозможно, используя API-интерфейс selenium webdriver, но вы можете выполнить код javascript, чтобы получить все атрибуты :

 driver.execute_script('var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;', element) 

Демо-версия:

 >>> from selenium import webdriver >>> from pprint import pprint >>> driver = webdriver.Firefox() >>> driver.get('https://stackoverflow.com') >>> >>> element = driver.find_element_by_xpath('//div[@class="network-items"]/a') >>> attrs = driver.execute_script('var items = {}; for (index = 0; index < arguments[0].attributes.length; ++index) { items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; return items;', element) >>> pprint(attrs) {u'class': u'topbar-icon icon-site-switcher yes-hover js-site-switcher-button js-gps-track', u'data-gps-track': u'site_switcher.show', u'href': u'//stackexchange.com', u'title': u'A list of all 132 Stack Exchange sites'} 

Для полноты решения альтернативным решением было бы получить outerHTML тега и проанализировать атрибуты с помощью парсера HTML. Пример (с помощью BeautifulSoup ):

 >>> from bs4 import BeautifulSoup >>> html = element.get_attribute('outerHTML') >>> attrs = BeautifulSoup(html, 'html.parser').a.attrs >>> pprint(attrs) {u'class': [u'topbar-icon', u'icon-site-switcher', u'yes-hover', u'js-site-switcher-button', u'js-gps-track'], u'data-gps-track': u'site_switcher.show', u'href': u'//stackexchange.com', u'title': u'A list of all 132 Stack Exchange sites'} при >>> from bs4 import BeautifulSoup >>> html = element.get_attribute('outerHTML') >>> attrs = BeautifulSoup(html, 'html.parser').a.attrs >>> pprint(attrs) {u'class': [u'topbar-icon', u'icon-site-switcher', u'yes-hover', u'js-site-switcher-button', u'js-gps-track'], u'data-gps-track': u'site_switcher.show', u'href': u'//stackexchange.com', u'title': u'A list of all 132 Stack Exchange sites'} 

Следующее получает список всех атрибутов и их (иногда переведенных в строки) значений для меня, используя, по крайней мере, драйвер PhantomJS или Chrome:

 elem.get_property('attributes')[0] 

Чтобы просто получить имена:

 x.get_property('attributes')[0].keys() 

Вот моя попытка ответить. Я проверил его только в окне поиска на главной странице Google. Я использовал ответ @ alecxe выше о 'outerHTML'. Получив html, я использовал регулярное выражение ([az]+-?[az]+_?)='?"? Чтобы соответствовать именам атрибутов. регулярное выражение просто должно быть изменено, чтобы соответствовать все большему числу случаев. Но существенное имя, которое нам нужно, – «все, что стоит за знаком равенства».

Учитывая веб-элемент

 def get_web_element_attribute_names(web_element): """Get all attribute names of a web element""" # get element html html = web_element.get_attribute("outerHTML") # find all with regex pattern = """([az]+-?[az]+_?)='?"?""" return re.findall(pattern, html) 

Проверьте его на приведенном ниже коде

 import re from selenium import webdriver driver = webdriver.Firefox() google = driver.get("http://www.google.com") driver.find_element_by_link_text("English").click() search_element = driver.find_element_by_name("q") get_web_element_attribute_names(search_element) 

вывод:

 ['class', 'id', 'maxlength', 'name', 'autocomplete', 'title', 'value', 'aria-label', 'aria-haspopup', 'role', 'aria-autocomplete', 'style', 'dir', 'spellcheck', 'type'] 
  • Как разбирать элементы драйвера Selenium?
  • Установка селена на использование настраиваемого профиля, но он продолжает открываться по умолчанию
  • Selenium send_keys не работает, если input type = "number"
  • ElementNotVisibleException: Сообщение: элемент в настоящее время не виден ... selenium (python)
  • Как отправить текст в невидимое поле ввода
  • IE и Chrome не работают с Selenium2 Python
  • Скриншот Webdriver
  • Селену требуется много времени, чтобы найти элемент. Есть ли что-то, что я могу сделать?
  • Python - лучший язык программирования в мире.