0

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

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

提交输入 我想通过函数重载指定输入,但据了解,它只是指向表单中的输入

谢谢!

4

1 回答 1

1

对于 AngleSharp 中的表单,存在各种帮助程序。根据规范,它可以决定使用哪个输入字段/按钮来提交表单。因此,在提交表单时,符合 W3C 的浏览器引擎将执行以下操作

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

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

在上面的代码中,您提供 null 作为源(请参阅document.QuerySelector(buttonSelector) as IHtmlFormElement- 我想查询选择器实际上应该产生一个按钮 -IHtmlButtonElement或者IHtmlInputElement- 在任何情况下都是 an 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)); 
}

希望这可以帮助!

于 2017-12-11T19:24:39.807 回答