Как найти дочерний элемент, найдя родительский элемент div? - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть форма Google, которую я переворачиваю (по крайней мере, пытаюсь). Я хочу просмотреть его, чтобы найти текст, где написано «Имя», затем найти родительский div всего блока, который содержит этот вопрос, и найти элемент ввода, где я могу использовать send_keys (), чтобы заполнить свое имя. Я смог найти «Имя» и найти родительский div.

src = result.content
driver = webdriver.Chrome()
driver.get('https://exampleform.com')
soup = BeautifulSoup(src, 'html.parser')
name = soup.find(string="Name ")
nameBlock = name.find_parents('div', class_="freebirdFormviewerViewNumberedItemContainer", limit = 1)

if soup.find(string="Name "):
  print('yes')
#prints yes

if name.find_parents('div', class_="freebirdFormviewerViewNumberedItemContainer", limit = 1):
  print('okay')

#prints okay

if nameBlock.find('input'):
  print('yup')  

#gets error

# Also have tried nameBlock.find(tag = 'input')
# and nameBlock.find_element_by_tag_name('input)
# and name.find_parents('div', class_="freebirdFormviewerViewNumberedItemContainer", limit = 1).find('input)

Я проверил, что я нашел родительскую функцию, распечатав переменную «nameBlock» и смог получить весь родительский элемент Div и увидел с тегом ввода там в консоли. Но затем я получаю эту ошибку, когда пытаюсь использовать последний оператор if, чтобы узнать, смог ли я найти элемент ввода:

AttributeError: ResultSet object has no attribute 'find_elements_by_tag_name'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?

Я думаю, что родительский объект выбран как каждый дочерний элемент в этом родитель, так что каждый ребенок ищет

nameBlock.find('input')

, но я не совсем уверен, как бы я go просто выбрал дочерний элемент ввода. Какие-либо предложения? Также вот HTML, чтобы лучше понять мою проблему.

Screenshot of HTML

1 Ответ

0 голосов
/ 13 апреля 2020
AttributeError: ResultSet object has no attribute 'find_elements_by_tag_name'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?

Ошибка говорит о том, что Вы использовали find_elements_by_tag_name(), который возвращается как list, а не webelement.

. Измените это на

find_element_by_tag_name(), который вернется как webelement и теперь вы можете использовать send_keys() метод.

...