【问题标题】:How to auto submit javascript form如何自动提交javascript表单
【发布时间】:2012-02-18 21:20:52
【问题描述】:

网页上有一个搜索按钮:

<td><table border="0" cellpadding="0" cellspacing="0"><tr><td dir="ltr" width="10" height="21"><img src="/global/images/ButtonLeftDove.gif" border="0" alt="" height="21" width="10" /></td><td height="21" align="center" valign="middle" class="ButtonDove" nowrap="nowrap"><a href="javascript:__doPostBack('mobjTemplate$ctl01$btnSearch2','')" onmouseover="window.status='Search';return true;" onmouseout="window.status='';return true;">Search</a></td><td dir="ltr" width="10" height="21"><img src="/global/images/ButtonRightDove.gif" border="0" alt="" height="21" width="10" /></td></tr></table></td>

它正在调用一个 javascript 函数 javascript:__doPostBack('mobjTemplate$ctl01$btnSearch2','')

java函数如下:

function __doPostBack(eventTarget, eventArgument) {

    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {

        theForm.__EVENTTARGET.value = eventTarget;

        theForm.__EVENTARGUMENT.value = eventArgument;

        theForm.submit();

    }

}

我需要自动点击该搜索按钮。

我试过这段代码,但它不起作用:

HtmlElementCollection elemColl2 = null;
HtmlDocument doc = webBrowser.Document;
elemColl2 = doc.GetElementsByTagName("form");

foreach (HtmlElement elem in elemColl2)
            {
                elem.InvokeMember("submit");
            }

我该怎么做??

提前感谢您的帮助..

【问题讨论】:

  • 代码不起作用怎么办?您发布的 javascript 应该可以工作。为什么会失败?能不能用 Firebug 之类的调试一下?
  • java 代码来自网页它不是我的代码。我只是想单击由这段 java 代码驱动的搜索按钮。
  • 这里有一些有用的代码和示例:stackoverflow.com/questions/4902006/…

标签: c# javascript asp.net


【解决方案1】:

我建议尝试获取锚点(或按钮)并在其上使用 .click()。我过去在 javascript 中使用表单本身的“提交”运气不佳(这就是你正在做的,通过一层间接)。

你可以使用:

link.InvokeMember("Click");

将链接放入变量后单击该链接。

【讨论】:

  • 您能详细说明或分享一些示例代码吗?我也在考虑同样的思路,但我没有在 HtmlElement 类上看到 Click 方法。 (有一个Click 事件,但没有方法。)您是否以不同于该类的方式识别文档中的元素?
  • 我根本没怎么用过WebBrowser,但是我写过很多JavaScript代码。我知道有一个 JavaScript click 方法,所以我假设 C# 类也会有一些方法来执行它。我的猜测是它看起来很像您提交表单的代码(即“invokeMember”方法)。
  • 快速搜索证实了这一点。第一个结果:(stackoverflow.com/questions/3479490/…)。相应地更新了帖子。
【解决方案2】:

我怀疑它不是“提交”的原因是因为页面中的元素不是表单元素并且没有关联的提交操作。它是 href 中带有一些 JavaScript 的锚元素(至少可以这么说,但它不是您的代码,所以不用担心)。

(旁注,您一直说“Java”,而您的意思是“JavaScript”。两者完全不同。)

This answer 到一个非常相似的(虽然不是完全重复,所以我很犹豫是否投票结束这个问题)问题似乎是一个可行的解决方案。您可能需要添加一个 COM 引用,我个人会尽量避免,除非 绝对 有必要(但这只是我),但能够在有问题的锚元素上调用“点击”应该做到这一点。 (假设WebBrowser 控件正确解释页面上的JavaScript。)

【讨论】:

  • 大卫,你说得非常对,现在我正在尝试链接中的建议。但是,我收到一个错误:无法在此行将类型“System.Windows.Forms.HtmlDocument”转换为“mshtml.HTMLDocumentClass”:mshtml.IHTMLDocument2 doc = ((mshtml.HTMLDocumentClass)webBrowser1.Document);
  • @ValNolav:您使用的是 WinForms 还是 WPF?看来答案从前者变成了后者。查看答案修订历史中的早期代码:stackoverflow.com/posts/4953253/revisions 如果是这种情况,您可能不需要使用 COM 库。您只需要在元素上调用“点击”即可。
  • 我使用的是winform。不知道可以给我这里做的网页是网页sap.com/partners/directories/SearchPartner.epx
【解决方案3】:

你可以用javascript获取button元素,然后手动调用click事件。 而且...我宁愿停止这样的编程(我的意思是在 javascript 中调用 asp.net id。有很多更简单的方法可以做到这一点。例如:提交按钮

【讨论】:

  • 我正在用 c# 编写代码,这只是其中的一部分。另外,我不懂javascript。
  • @Eric:修改WebBrowser 控件持有的文档中的HTML/JavaScript 可能不是一个好主意。您是否将这(与从WebBrowser 控件中获取的网页交互)与实际上一个他可以控制呈现标记的网页混淆?
  • 如果你使用 c#,你也应该使用 asp.net。例如像 这样的按钮
  • 使用 Webbrowser 控件我操作了该网页上的一些控件,例如选择选项、填写文本框等。现在我只需要单击搜索按钮并完成搜索。仅此而已,但我不能这样做。我将不胜感激示例代码!
  • @EricFrick:“如果你使用 c#,你也应该使用 asp.net”——除了他没有做 web 开发。他从可能是 WinForms 应用程序的地方使用一个网页。他需要与该网页(来自外部不受控制的资源)交互,而不是修改它。
【解决方案4】:

了解您用 C# 编写的代码将在服务器端执行的事实。您真正需要的是编写一个 javascript 代码,以便在客户端提交该表单。提交表单时可以调用form.submit。

【讨论】:

  • 我认为您将其误认为是实际的 ASP.NET 开发。他似乎正在使用 WebBrowser 控件(可能在 Windows 窗体中)来访问网页(恰好是 Web 窗体,但这不是这里的问题)。他没有控制该服务器返回的标记,他的所有代码都在一个实例中运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
相关资源
最近更新 更多