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