你如何用WebKitBrowser调用会员?

时间:2014-03-03 17:02:54

标签: c# winforms webkit invokemember

在常规WebBrowser中,您可以使用以下代码点击内容:

webBrowser1.Document.GetElementById("welcome_box_sign_in_button").InvokeMember("Click");

但是在WebKitBrowser中,没有.InvokeMember。我该怎么做呢?

这是我试图点击的按钮的代码:

<input tabindex="5" class="submit spriteall spritesite" id="welcome_box_sign_in_button" onclick="try{}catch(e){};if(!this.elem_welcome_box_sign_in_button){this.elem_welcome_box_sign_in_button=$('welcome_box_sign_in_button');this.spin_welcome_box_sign_in_button=$('welcome_box_sign_in_button_spinner');this.restore=function(t){return function(){t.elem_welcome_box_sign_in_button.show();t.spin_welcome_box_sign_in_button.hide();Event.stopObserving(window, 'unload', t.restore);}}(this);}this.elem_welcome_box_sign_in_button.hide();this.spin_welcome_box_sign_in_button.show();Event.observe(window, 'unload', this.restore);" type="submit" value="Sign In">

2 个答案:

答案 0 :(得分:1)

我在How to click on a link using Webkit Browser?回答了类似的问题。我不使用Windows,我的所有经验都在Webkit GTK上。以下评论基于该经验。

此外,这只是gretro对答案的详细说明。

如果您的webkit实现不支持DOM API,那么您可以使用javascript执行来完成大量工作。

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

格雷特罗的答案可以如下完成。请注意语法错误,因为我没有测试过,因为无法访问.NET世界。根据我的经验,声明以“;”结尾某些实现需要这样执行,有些抱怨,有些不关心。所以这是值得注意的另一件事。

browser.Document.InvokeScriptMethod("document.getElementById('<id>').click()", new object[]{});

答案 1 :(得分:0)

您始终可以将脚本附加到DOM并使用InvokeScript方法调用它。你可以传递DOM元素的id以及要触发的动作的名称,并让Javascript完成其余的工作。

browser.Document.InvokeScriptMethod("functionName", new object[]{"parameter1", "parameter2"});

http://webkitdotnet.sourceforge.net/docs/html/M_WebKit_DOM_Document_InvokeScriptMethod.htm