5

我想在导航到网站后点击链接

 webKitBrowser1.Navigate("http://www.somesite.com");

假设链接的 id 为 ,如何点击本网站上的链接lnkId

<a href="http://www.google.com" id="lnkId"> Go to Google </a>

在 Visual Studio 附带的默认浏览器控件中,我可以使用以下代码执行此操作:

 foreach (HtmlElement el in webBrowser1.Document.GetElementTagName("a")) {
 if (el.GetAttribute("id") == "lnkId") {
 el.InvokeMember("click");
 }
 }

当我使用 WebkitDotNet 控件时,上面的代码等效于什么?

4

3 回答 3

5

由于WebKit不提供Click()事件(有关详细信息,请参见此处),因此您不能以上述方式执行此操作。winforms但是一个小技巧可能与以下原始方式等效:

foreach (Node el in webKitBrowser1.Document.GetElementsByTagName("a"))
{
    if (((Element) el).GetAttribute("id") == "lnkId")
    {
        string urlString = ((Element) el).Attributes["href"].NodeValue;
        webKitBrowser1.Navigate(urlString);
    }
}

在这里,我正在做的是将WebKit.DOM.Node对象转换为其子类WebKit.DOM.Element以获取其Attributes. 然后提供hrefNamedNodeMap,即Attributes作为NodeName,您可以轻松提取NodeValuetarget url在这种情况下就是 。然后,您可以简单地调用实例Navigate(urlString)上的方法WebKitBrowser来复制click事件。

于 2014-03-02T13:18:07.093 回答
1

我不使用 Windows,我的所有经验都在 Webkit GTK 上。以下评论基于该经验。

我不确定您使用的是哪个 webkit .NET 版本。看起来有多种实现。假设您使用的是 Wasif 提到的那个,您可以按照示例https://code.google.com/p/open-webkit-sharp/source/browse/JavaScriptExample/Form1.cs中的说明评估 javascript 。

实际上,如果实现支持 javascript 执行,那么即使不是所有的 DOM 操作,您也可以完成大部分操作。API 函数通常与 javascript 函数相同,并且大部分时间在内部调用完全相同的函数,尽管它们的起源无关。您的应用程序和 javascript 之间的通信可能没什么挑战性,但如果您可以阅读警报消息,那也可以解决。看起来这个库确实支持警报处理机制。我在https://github.com/nhrdl/notesMD上写的一个工具将展示一些实现这种通信的例子,尽管它使用 GTK 版本并且是用 python 编写的。

顺便说一句,如果您知道元素的 id,那么 Document.GetElementById 将为您节省循环。

于 2014-03-03T18:46:51.227 回答
-1
webKitBrowser1.StringByEvaluatingJavaScriptFromString("var inpt = document.createElement(\"input\");    inpt.setAttribute(\"type\", \"submit\");    inpt.setAttribute(\"id\", \"nut\"); inpt.setAttribute(\"type\", \"submit\");    inpt.setAttribute(\"name\", \"tmp\");   inpt.setAttribute(\"value\", \"tmp\");  var element = document.getElementById(\"lnk\"); element.appendChild(inpt);");
                    webKitBrowser1.StringByEvaluatingJavaScriptFromString("document.getElementById('nut').click();");
于 2015-08-06T05:03:30.087 回答