如何使用Webkit浏览器点击链接

本文关键字:链接 浏览器 何使用 Webkit | 更新日期: 2023-09-27 18:10:16

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

 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控件时,上面的代码的等效是什么?

如何使用Webkit浏览器点击链接

由于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。然后将href提供给NamedNodeMap,即Attributes作为NodeName,您可以轻松地提取NodeValue,即本例中的target url。然后,您只需在WebKitBrowser实例上调用Navigate(urlString)方法来复制click事件。

我不使用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将为您节省循环

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