对于 AngleSharp 中的表单,存在各种帮助程序。根据规范,它可以决定使用哪个输入字段/按钮来提交表单。因此,在提交表单时,符合 W3C 的浏览器引擎将执行以下操作
- 提交使用的按钮/输入的名称(如果使用了具有有效名称的按钮/输入)
- 如果使用了 type=image 字段,则提交鼠标坐标
- 其他一些更奇特的东西
既然我们讨论了这个,我们已经知道为什么简单form.SubmitAsync()
不会那么有用 - 以防我们想要/必须通过单击某处来“伪造”提交表单。然而,幸运的是,AngleSharp 在指定“来源”(提交)的表单上还有另一个重载。此来源可以是任何IHtmlElement
.
在上面的代码中,您提供 null 作为源(请参阅document.QuerySelector(buttonSelector) as IHtmlFormElement
- 我想查询选择器实际上应该产生一个按钮 -IHtmlButtonElement
或者IHtmlInputElement
- 在任何情况下都是 an 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));
}
希望这可以帮助!