Python selenium получает значение тега выбранного элемента

Я использую приведенный ниже код, чтобы найти все элементы со значением class = "ng_isolate_scope". Что мне нужно сделать, так это захватить значение тега выбранных элементов, поскольку мне нужна эта информация для дальнейшего анализа.

<span class="ng-isolate-scope">
<div class="ng-isolate-scope">

Код:

elems = driver.find_elements_by_class_name("ng-isolate-scope")
for elem in elems:
    tag_value = elem.get_tag()
    print("element found with tag value = " + str(tag_value))

Однако tag_value () не существует. Что я могу сделать, чтобы зафиксировать значение тега элемента? Спасибо

Вы пробовали Xpath и CSS-селектор, а не class_name?

hamed baziyad 10.08.2018 19:45
3
1
8 496
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если я правильно понимаю, вам нужен текст тега:

elems = driver.find_elements_by_class_name("ng-isolate-scope")
for elem in elems:
    tag_value = elem.text # get text of an element
    print("'element found with tag value = " + tag_value + "'")

Например:

<span class="ng-isolate-scope">span tag</span>
<div class="ng-isolate-scope">div tag</div>

произведет:

'element found with tag value = span tag'
'element found with tag value = div tag'

Обновлено:

from bs4 import BeautifulSoup
from html.parser import HTMLParser

driver = webdriver.Chrome()
driver.get("https://stackoverflow.com/questions/51789088/python-selenium-get-tag-value-of-a-selected-element/51789139#51789139")
parsed_html = BeautifulSoup(driver.page_source) # get HTML

list = list() # create a list

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs): # get start tags
        list.append(tag) # store them in the list


parser = MyHTMLParser()
parser.feed(str(parsed_html.body.find('div', attrs={'id':'question-header'}))) # feed parser with parsed HTML

print(list[0]) # first element in the list is the tag you need

Выход:

div

Ссылка на документация.

спасибо Андрей. Что мне нужно, так это фактическое значение тега "span" и "div". Я не думаю, что elem.text справится со своей задачей. Приведу еще один более конкретный пример. Если вы перейдете на эту страницу-образец: learn.letskodeit.com/p/practice и проверите html-код элемента «Hide / Show Example», мне нужно захватить тег этого элемента, который в данном случае будет «input».

Angelo 10.08.2018 17:07

Большое спасибо Андрею. Мне был нужен раствор селена, но я был признателен за вашу поддержку.

Angelo 10.08.2018 18:20
Ответ принят как подходящий

обновлено: Это немного сложно, здесь мой подход состоит в том, чтобы получить externalHTML элемента, а затем разделить первое слово (которое является именем тега). Итак, вы можете попробовать:

    elements = driver.find_elements_by_class_name("ng-isolate-scope")
    for element in elements:
      outerhtml = element.get_attribute('outerHTML ') // to extract outerHTML 
      tag_value=outerhtml.split('',1)[0] // to extract first word
      print("element found with tag value = " + tag_value)

спасибо за ответ, но это похоже на ответ Андрея выше. Я знаю element.text, но мне не нужен текст элемента, мне понадобится значение тега элемента (обычно div, span, a, input, button, ecctera ...)

Angelo 10.08.2018 17:27

спасибо, я сразу попытался подумать, что это именно то, что мне нужно, но по какой-то странной причине он получает только текст элемента, а не html. Я пробовал это на нескольких элементах, но, похоже, он не захватывает HTML-код. Это работает с вашей стороны?

Angelo 10.08.2018 18:04

поэтому я изменил код с внутреннего на внешний HTML, и он сработал! Спасибо за вашу помощь

Angelo 10.08.2018 18:19

извините, я ошибся здесь. Вы правы, это externalHTML, а не innerHTML. Я обновил свой ответ. Пожалуйста, примите это как ответ, если он вам хоть как-то помог. Спасибо

theGuy 10.08.2018 18:20

Другие вопросы по теме