Как назначить значения полям формы, когда нет атрибута «имя»? - PullRequest
0 голосов
/ 07 июня 2019

Я хочу заполнить форму с веб-сайта, используя следующий код:

import mechanicalsoup
browser = mechanicalsoup.StatefulBrowser()
browser.open("Web page url")
browser.follow_link("login")
browser.get_url()
browser.select_form('div[class="p30"]')
browser.get_current_form().print_summary()

>>> <input class="form-input" id="mail" type="text"/>
>>> <input class="form-input" id="pass" type="password"/>

, как вы можете видеть .print_summary () возвращает точные поля, которым я хочу присвоить значения, но нет атрибута«имя» для любого из них, поэтому я не могу изменить его.Я прочитал учебник Mechanicalsoup, и форма в нем имеет этот атрибут "name":

<input name="custname"/>
<input name="custtel" type="tel"/>
<input name="custemail" type="email"/>

, и его можно просто изменить, используя:

browser["custname"] = "Me"
browser["custtel"] = "00 00 0001"
browser["custemail"] = "nobody@example.com"

Я новичок в mechincalsoupпоэтому любая помощь очень ценится.

1 Ответ

1 голос
/ 07 июня 2019

Раздел mechanicalsoup Q & A конкретно ответил на ваш вопрос:

Если вы считаете, что используете MechanicalSoup правильно, но отправка формы по-прежнему не работает так, как вы ожидаетевероятное объяснение состоит в том, что страница использует JavaScript для динамического генерирования содержимого ответа при отправке формы в реальном браузере.Распространенным симптомом является то, что в элементах формы отсутствуют обязательные атрибуты (например, если в форме отсутствует атрибут действия или во входных данных отсутствует атрибут имени).

В таких случаях у вас обычно есть два параметра:

  1. Если вы знаете, какой контент сервер ожидает получить от отправки формы, то вы можете использовать MechanicalSoup, чтобы вручную добавить этот контент, используя, например, new_control ().Это вряд ли будет надежным решением, если вы не тестируете собственный веб-сайт.

2. Используйте инструмент, поддерживающий JavaScript, например Selenium.

...