C# 如何使用Webkit浏览器单击链接?

C# 如何使用Webkit浏览器单击链接?,c#,.net,webkit,C#,.net,Webkit,我想在导航到网站后单击链接 webKitBrowser1.Navigate("http://www.somesite.com"); 假设链接的id为lnkId,如何单击此网站上的链接 <a href="http://www.google.com" id="lnkId"> Go to Google </a> 当我使用WebkitDotNet控件时,上面的代码的等价物是什么?由于WebKit不提供Click()event(),您不能用上面的方法来做。但一个小技巧可能与原

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

 webKitBrowser1.Navigate("http://www.somesite.com");
假设链接的id为
lnkId
,如何单击此网站上的链接

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

当我使用WebkitDotNet控件时,上面的代码的等价物是什么?

由于
WebKit
不提供
Click()
event(),您不能用上面的方法来做。但一个小技巧可能与原始的
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
以获取其
属性。然后将
href
提供给
NamedNodeMap
,即
属性
作为
节点名
,您可以轻松提取
节点值
,在这种情况下,它是
目标url
。然后,您只需在
WebKitBrowser
实例上调用
Navigate(urlString)
方法来复制
click
事件。

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

我不确定您使用的是哪个webkit.NET版本。看起来有多个实现。假设您使用的是Wasif提到的那个,那么您可以像示例中提到的那样评估javascript

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


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

我不太理解您的问题,但是你的意思是按住ctrl键并单击链接吗?我编辑了帖子@mobstai,在这里找到了一些有趣的信息:加载页面后,你能简单地导航到链接href吗?你是否尝试过类似的方法:webKitBrowser1.StringByEvaluatingJavaScriptFromString(document.getElementById('lnkId')。click())我是获得赏金的人,但我不想再问一个几乎是重复的问题。我正在文本框中设置文本,我必须按照您发布的方式进行设置,但现在没有
SetAttribute
选项。如何设置属性?请检查
WebKit.DOM.Element
类提供的方法好吗?您可以像这样使用所需的方法:
((WebKit.DOM.Element)el.SetAttribute(“NAME”、“VALUE”)我自己计算出了这一部分,但我忘了告诉你。请注意,导航调用在许多情况下都不起作用,这取决于页面的开发方式。如果您可以控制页面,则不会出现任何问题,因为您可以调整href。如果您无法控制页面,那么上述方法将不会生成“onclick”事件,许多站点会使用它来更改功能。此外,一些HREF可以是javascript代码。换句话说,单击链接时导航并不总是相同的
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();");
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();");