DotNetBrowser DOM Events



请帮帮我这里我的代码但不工作

//using DotNetBrowser
{
document = browser.GetDocument();
DOMInputElement txtsearch = (DOMInputElement)document.GetElementByClassName("ts1222");
txtsearch .Value = "book";         
txtsearch .DispatchEvent(browser.CreateEvent("change"));
}

在此代码中,值被放置在搜索框中,但搜索方法不识别它,因此没有搜索任何内容。实际上,就好像没有输入任何值一样。

为什么会这样

不清楚您的页面是否使用任何JavaScript框架。但我将假设它可以。

在我的实践中,在一些旧版本的Angular中也出现了类似的行为。

在这些框架中,输入元素可以绑定到JavaScript数据模型(例如,Angular中的ng-model)。当其中一个更改时,库自动同步输入和模型之间的数据。

但是框架如何检测变化呢?这些框架是为人类交互而设计的,而不是为自动化而设计的。因此,"改变"。事件本身是不够的。

模拟DOM事件

最明显(但也很复杂)的方法是学习JS框架如何检测变化。当您拥有它所期望的DOM事件的确切序列时,您可以人为地生成它们。它将工作,但请记住,它依赖于内部逻辑,可以随时更改。

模拟输入

相反,更容易模拟整个输入。模拟输入是这类库中的标准功能:参见CefSharp中的SendKeyEvent。

根据您的代码判断,您正在使用DotNetBrowser 1.x。下面是如何完成的(取自这个例子):

// Type 'Hello' text in the focused text field.
KeyParams params = new KeyParams(VirtualKeyCode.VK_H, 'H');
browser.KeyDown(params);
browser.KeyUp(params);

在这个代码片段中,字母"H"被Chromium认为是真正的人类输入。因此,它将生成所有必要的事件,JS库将识别它。

这个版本,然而,坚持使用Chromium 69,这可能会导致新的JS框架和浏览网页的麻烦。考虑使用其中的一个。x版本;这个API几乎没有改变:guide.

复制粘贴

另一种方法是使用剪贴板。只需将文本放入剪贴板,然后将其粘贴到浏览器中。

browser.ExecuteCommand(EditorCommand.PASTE);

相关内容

  • 没有找到相关文章

最新更新