AngleSharp,select 在 SubmitAsync 上提交输入

AngleSharp, select submit input on SubmitAsync

我有一个问题 与 SubmitAsync 一样,select 输入(类型提交)因为页面上有几个这样的输入并且脚本按下(执行)第一个输入

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);

submit inputs 我想通过函数重载指定输入,但正如它所理解的那样,它只是指向形式为

的输入

谢谢!

对于 AngleSharp 中的表单,存在各种助手。根据规范,使用哪个输入字段/按钮提交表单可能会有所不同。因此,符合 W3C 标准的浏览器引擎将在提交表单时执行以下操作

  • 提交所使用的按钮/输入的名称(如果使用了具有有效名称的按钮/输入)
  • 如果使用了 type=image 字段,请提交鼠标坐标
  • 一些其他更奇特的东西

既然我们讨论了这个问题,我们已经知道为什么一个简单的 form.SubmitAsync() 不会那么有用 - 以防我们想要/必须 "fake" 通过单击某个地方来提交表单。然而,幸运的是,AngleSharp 在指定 "source"(提交)的表单上有另一个重载。此来源可以是任何 IHtmlElement.

在上面的代码中,您提供了 null 作为源(请参阅 document.QuerySelector(buttonSelector) as IHtmlFormElement - 我想查询选择器实际上应该产生一个按钮 - IHtmlButtonElementIHtmlInputElement - 在任何如果是 IHtmlElement,但不是 IHtmlFormElement——这不是 "element of the form",而是 "the form element")。

因此下面一行

document.QuerySelector<IHtmlInputElement>(buttonSelector).Su‌​bmitAsync(fields)

相同
var form = document.QuerySelector<IHtmlFormElement>(formSelector);

if (form != null)
{
    form.SetValues(fields);
    form.SubmitAsync(document.QuerySelector(buttonSelector)); 
}

希望对您有所帮助!