Я пытаюсь завершить отправку формы на веб-странице (http://supermag.jhuapl.edu/mag/?) с помощью MechanicalSoup. Перед отправкой необходимо указать дату в той же форме, используя раскрывающиеся поля для дня начала, месяца, года, времени и т. д. Это можно сделать с помощью функции set_select()
MechanicalSoup, но я не могу получить доступ к соответствующему тегу select
для каждого поля. Небольшой отказ от ответственности; хотя у меня есть опыт научного программирования, я новичок в HTML и библиотеках Python, упомянутых выше.
Хотя я не уверен, какую библиотеку лучше всего использовать для выбора даты, я не могу получить доступ к соответствующему тегу select
, который является дочерним элементом соответствующих тегов span
в форме, с такими атрибутами имени, как «start_day», «start_month».
У меня есть объекты mechanicalsoup.Form(form)
и mechanicalsoup.StatefulBrowser(*args, **kwargs)
(последний соответствует объекту bs4.BeautifulSoup
), и я пробовал:
- Установка тегов
select
с помощьюset_select
от MechanicalSoup - Поиск соответствующего тега
span
и использование BeautifulSoup для доступа к элементам ниже (в частности, к тегамselect
) с целью каким-то образом выбрать значение, изменив URL-адрес (?)
Отображается фрагмент соответствующего HTML-кода; обратите внимание на теги div
и последующие теги select
как на дочерние.
Тег формы:
<form name="theForm" class="form-horizontal" onsubmit="return false;">
Соответствующие теги span и select в форме:
<span name="start_time">
<div>
<select name="start_day">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>...
</select>
<select style="width: 4em;" name="start_month">
<option value="1">January</option>
<option...
</select>
</div>
</span>
Код находится ниже:
# Opening browser and URL
url = "http://supermag.jhuapl.edu/mag/?"
browser = ms.StatefulBrowser()
browser.open(url)
# Assigning bs4.BeautifulSoup object
html = browser.get_current_page()
# Assigning relevant form
form = browser.select_form('form[name="theForm"]')
# Assign correct span tag for e.g start_time
start_time_span = html.find_all('span')[2]
# Attempt to set start day value - returns
# 'InvalidFormMethod: No select named start_day'
form.set_select({'start_day': 1})
# Attempt to find select tags with bs4
html.find('select', {'start_day': 1})
start_time_span.find('select', {'start_day': 1})
# and eg looking for contents returns empty list
start_time_span.contents
Я ожидал, что теги select
будут перечислены в попытках find()
bs4, или чтобы set_select()
Mechanicalsoup получил доступ и установил данный тег select
при вызове в правильной форме.
Тег span
находится в HTML BeautifulSoup, но, похоже, не имеет дочерних тегов select
, которые присутствуют в исходном HTML и необходимы для выбора даты. Вызов set_select()
возвращает ошибку о том, что тег не найден.
Заранее спасибо; это мой первый вопрос в StackOverflow, и я надеюсь, что он достаточно хорошо соответствует рекомендациям!