Python - не удается извлечь значение скрытого ввода

0

Вопрос

Я пытаюсь извлечь значение скрытого входного тега. Несмотря на то, что элемент существует в HTML, я не могу найти его с помощью bs4.

Это сообщение об ошибке, которое я получаю:

AttributeError: 'NoneType' object has no attribute 'find'

Это html-код на веб-странице:

<form id="exampleid" class="exampleclass" action="/ex/ex-ex/ex/2" method="post">
    
    <more html>
                                
    <div>
    <input type="hidden" name="csrf" value="abcdefghijklmnopqrstuvwxyz">
    </div></form>

И это мой текущий код:

csrf = soup.find("form", {"id": "exampleid"})
csrf = csrf.find('input', {'name': 'csrf'}).get("value")
print(csrf)

Я был бы признателен за любую помощь, так как это действительно беспокоит меня. Заранее благодарю вас!

beautifulsoup forms hidden-field python
2021-11-23 17:09:09
1

Лучший ответ

1

Ваш выбор все еще работает, думаю, есть еще одна проблема, возможно, вы не получите ожидаемый html.

В качестве альтернативы, чтобы выбрать и получить значение этого скрытого <input> вы можете использовать следующее css selector:

soup.select_one('#exampleid input[name*="csrf"]')['value']

Пример

from bs4 import BeautifulSoup

html = '''
<form id="exampleid" class="exampleclass" action="/ex/ex-ex/ex/2" method="post">
<div>
<input type="hidden" name="csrf" value="abcdefghijklmnopqrstuvwxyz">
</div></form>'''

soup = BeautifulSoup(html, "lxml")

csrf = soup.select_one('#exampleid input[name*="csrf"]')['value']

print(csrf)

Выход

abcdefghijklmnopqrstuvwxyz
2021-11-24 07:51:04

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................