【问题标题】:C# webbrowser control (executing all javascripts associated with form)C# webbrowser 控件(执行与表单关联的所有 javascript)
【发布时间】:2012-04-23 07:56:10
【问题描述】:

我正在尝试使用 webbrowser 控件自动提交表单。我正在使用以下代码提交”

currentElement.InvokeMember("submit");

现在这种方法可以正常工作。但有时表单可能有一些在提交时单击按钮时调用的 javascript 函数。因此,假设一个表单有一些名为“提交”的按钮图像,当用户按下它时,会调用一个 javascript 函数 somefunction() 然后提交表单。

问题是当我使用上述方法 InvokeMember 时,它只提交表单而不执行相关脚本(在本例中为 somefunction()),我必须手动编写代码

webBrowser1.Document.InvokeScript("somefunction");

但这需要我事先知道是否有某些功能。有什么方法可以让我提交表单,它会自动运行所有相关的 javascript?

而且我也不知道用户单击以提交表单的按钮名称或 ID。因为在某些情况下,它甚至可能没有 ID 或名称,例如

<span class="btn" onclick="somefunction()">
<img style="cursor:pointer" title="Submit" alt="Submit" src="http://stackoverflow.com/imagesbutton.png?2012">
<div id="s" style=""></div>
</span>

【问题讨论】:

  • 哎呀。您给出的&lt;span onClick&gt; 示例将使这在一般情况下成为一个非常难以解决的问题。在您的 &lt;span onClick&gt; 示例中,我假设在表单中输入内容并按 Enter 也不起作用。如果浏览器无法发现提交按钮,我不会给你的包装很好的机会......
  • 您可以模拟点击任何内容,但您无法确定此操作最终会执行提交。那么,“我有什么方法可以提交表单并且它会自动运行所有关联的 javascript?”这个问题的答案。是的,前提是您知道点击的位置。

标签: c# forms webbrowser-control


【解决方案1】:

我已经有一段时间没有搞乱 WebBrowser 控件了,但我过去常常让它为我跳过箍。我过去遇到过这个问题。

http://www.codeproject.com/Tips/60924/Using-WebBrowser-Document-InvokeScript-to-mess-aro

当你得到一个Form 对象时,从OnSubmit 中取出字符串并在提交表单之前运行它来执行它:

object[] codeString = {"myObject.setVariable(0);"};
webBrowser1.Document.InvokeScript("eval",codeString);

像魅力一样工作。

【讨论】:

    【解决方案2】:

    如果您知道可以使用的图像标签的名称或 ID

    webBrowser1.Document.GetElementById("button").InvokeMember("click");
    

    或

    webBrowser1.Document.GetElementByName("button").InvokeMember("click");  
    

    在javascript中调用关联函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 2012-03-22
      • 2015-12-15
      相关资源
      最近更新 更多