2013-04-22 96 views
5

我想点击链接导航到网站如何点击使用Webkit浏览器的链接?

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控制时,我上面的相同呢?

+0

我真的不明白你的问题,但你的意思是按住ctrl并点击链接? – Max 2013-04-22 14:31:12

+0

我编辑了帖子@Mobstaa – 2013-04-22 14:36:26

+0

我在这里发现了一些有趣的信息:http://webkitdotnet.sourceforge.net/docs/ – Max 2013-04-22 14:40:52

回答

5

由于WebKit未提供Click()事件(see here for details),因此您无法通过上述方式执行此操作。但是,一个小窍门可以工作,为下面的原始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事件。

+0

我是一个有奖金的人,但我不想问另外一个几乎是重复。我在文本框中设置文本,并且必须按照您发布的方式进行操作,但现在没有“SetAttribute”选项。我如何设置属性? – Dozer789 2014-03-03 16:48:06

+0

您能否检查一下WebKit.DOM.Element类提供的方法?你可以使用你需要的方法:'((WebKit.DOM.Element)el).SetAttribute(“NAME”,“VALUE”);' – 2014-03-04 06:33:49

+0

我想出了自己的那部分,但我忘了告诉你。 – Dozer789 2014-03-04 17:59:37

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,那么Doc​​ument.GetElementById会为你保存循环。

-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();"); 
相关问题