Для формы в AngleSharp существуют различные хелперы. В соответствии со спецификацией может иметь значение, какое поле ввода/кнопка использовалось для отправки формы. Поэтому движок браузера, совместимый с W3C, будет делать следующее при отправке формы.
- укажите название кнопки/входа, которое использовалось (если использовалась кнопка/ввод с допустимым именем)
- отправить координаты мыши, если использовалось поле type=image
- некоторые другие более экзотические вещи
Теперь, когда мы обсудили это, мы уже знаем, почему простой form.SubmitAsync()
не будет таким полезным - в случае, если мы хотим / должны «подделать» отправку формы, щелкнув где-нибудь. Однако, к счастью, у AngleSharp есть другая перегрузка формы, которая указывает «источник» (представления). Этот источник может быть любым IHtmlElement
.
В приведенном выше коде вы указываете null в качестве источника (см. document.QuerySelector(buttonSelector) as IHtmlFormElement
- я полагаю, что селектор запроса должен фактически выдать кнопку - либо IHtmlButtonElement
, либо IHtmlInputElement
- в любом случае IHtmlElement
, но не IHtmlFormElement
- это не "элемент форма», а «элемент формы»).
Поэтому следующая строка
document.QuerySelector<IHtmlInputElement>(buttonSelector).SubmitAsync(fields)
такой же как
var form = document.QuerySelector<IHtmlFormElement>(formSelector);
if (form != null)
{
form.SetValues(fields);
form.SubmitAsync(document.QuerySelector(buttonSelector));
}
Надеюсь это поможет!
person
Florian Rappl
schedule
11.12.2017