Список Selenium innerHTML, выведите конкретное значение

#python #selenium #innerhtml

Вопрос:

Во-первых, я новичок в работе с Python, особенно с Selenium. Поэтому я подключился к странице с помощью webdriver, а также уже взял нужный мне файл innerHTML. Вот моя проблема, innerHTML-это «список», и я хочу вывести только одно значение. Это выглядит примерно так:

 <html>
 <body>
  <pre style="example" xpath="1">
   "amount": 12{
   "value" : 3
    },
  </pre>
 </body>
</html>
 

^Это просто для иллюстрации, потому что на самом деле все намного длиннее. innerHTML выглядит так:

 "amount": 12{
   "value" : 3
    },
 

^Вот где я сейчас нахожусь. Я не могу указать строку, потому что страница не статична. Как заставить python находить «значение» из переменной в innerHTML ? Пожалуйста, обратите внимание, что после «значение»стоит двоеточие!

Заранее большое вам спасибо!

Ответ №1:

Я предлагаю использовать регулярное выражение для поиска значения. Я предполагаю, что вам нужна только числовая часть, поэтому вот код:

 innerHTML = '''
"amount": 12{
   "value" : 3
    },"value":4
    'value': 5
'''

import re
regex = re.compile(r'''("|')value("|')s*:s*(?P<number>d )''')
startpos = 0
m = None

while 1:
    m = regex.search(innerHTML, startpos)
    if m is None: break
    print(m.group("number"))
    startpos = m.start()   1

# output:
# 3
# 4
# 5
 

Это выведет все найденные значения в виде строк. Например, впоследствии вы можете преобразовать их в целые числа.
ПРИМЕЧАНИЕ: Мой код также учитывает случай value , когда он окружен одинарными кавычками ' , а не двойными кавычками " . Это для вашего удобства; если нет, вы можете изменить соответствующую строку выше на:

 regex = re.compile(r'''"value"s*:s*(?P<number>d )''')
 

В этом случае выходные данные не будут включать значение 5 .