AngleSharp, выберите отправку ввода на SubmitAsync

У меня вопрос Как с SubmitAsync выбрать ввод (типа submit) так как таких вводов на странице несколько и скрипт нажимает (выполняет) первый ввод

var document = _context.Active; 
var form = document.QuerySelector(formSelector) as IHtmlFormElement; 
var button = document.QuerySelector(buttonSelector) as IHtmlFormElement; 
if (form != null){form.SetValues(fields); } 
await form.SubmitAsync(button);

отправить входные данные Я хотел указать ввод через перегрузку функции, но как он это понял просто указывает на ввод, который находится в форме

Спасибо!


person K. Evgeny    schedule 01.11.2017    source источник
comment
Решил, использую: await document.QuerySelector‹IHtmlInputElement›(buttonSelector).SubmitAsync(fields);   -  person K. Evgeny    schedule 01.11.2017


Ответы (1)


Для формы в AngleSharp существуют различные хелперы. В соответствии со спецификацией может иметь значение, какое поле ввода/кнопка использовалось для отправки формы. Поэтому движок браузера, совместимый с W3C, будет делать следующее при отправке формы.

  • укажите название кнопки/входа, которое использовалось (если использовалась кнопка/ввод с допустимым именем)
  • отправить координаты мыши, если использовалось поле type=image
  • некоторые другие более экзотические вещи

Теперь, когда мы обсудили это, мы уже знаем, почему простой form.SubmitAsync() не будет таким полезным - в случае, если мы хотим / должны «подделать» отправку формы, щелкнув где-нибудь. Однако, к счастью, у AngleSharp есть другая перегрузка формы, которая указывает «источник» (представления). Этот источник может быть любым IHtmlElement.

В приведенном выше коде вы указываете null в качестве источника (см. document.QuerySelector(buttonSelector) as IHtmlFormElement - я полагаю, что селектор запроса должен фактически выдать кнопку - либо IHtmlButtonElement, либо IHtmlInputElement - в любом случае IHtmlElement, но не IHtmlFormElement - это не "элемент форма», а «элемент формы»).

Поэтому следующая строка

document.QuerySelector<IHtmlInputElement>(buttonSelector).Su‌​bmitAsync(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