请帮帮我这里我的代码但不工作
//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);