如何从浏览器屏幕抓取表单结果

时间:2010-11-09 19:50:38

标签: c# .net vbscript screen-scraping

我有一个使用第三方网络软件的客户端。在1个屏幕上,我的客户填写表格。在提交之前,他想运行一些东西来捕获他输入的内容并将其插入到csv或数据库中。 CSV或数据库部分很简单。从已经启动的浏览器获取数据,在另一个Web服务器上运行是我不知道该怎么做的部分。

如何捕获html表单的内容?我更喜欢使用c#,vb.net,vbs或类似的,但我真的对任何事情感兴趣。我也不想在客户端工作站上安装自定义软件,除了我在这里写的屏幕抓取软件。我还希望用户填写表单并运行我的脚本来收集数据而不必运行自定义浏览器实例。

谢谢!

3 个答案:

答案 0 :(得分:1)

在用户提交表单之前,数据仅存在于浏览器中。浏览器是您唯一可以从中获取数据的地方。

你需要像浏览器助手对象或FireFox中的等效对象。您还必须限制可以使用哪些浏览器,并且您必须维护此辅助工具。

你最好告诉客户“不”,或找到一个更好的方式来做他真正想要的事情(比如,第三方应用程序可能需要能够保存发送给它的内容)。< / p>

答案 1 :(得分:1)

如果您或您的客户不介意使用Windows窗体应用程序,则可以添加WebBrowser控件,然后将其指向第三方Web应用程序。然后,您可以尝试通过控件的.Document属性访问网页的元素(即表单字段)。虽然我不确定您是否可以访问特定的表单字段值。

修改
我能用我所说的做到这一点。我创建了一个Windows窗体应用程序,添加了一个webbrowser控件(webBrowser1),然后将这个html加载到其中(使用正确的&lt; html&gt;,&lt; head&gt;标记等):

<form id="form1" method="post" action="test.htm">
  <input type="text" id="testText" name="testText" />
  <br />
  <input type="submit" value="Save" />
</form>

注意:我是通过将其保存在html文件中并在webBrowser1.Url = new Uri(@"c:\test.htm");事件中使用Form_Load来完成此操作的。

然后我可以通过这样做来访问我输入testText的任何内容:

HtmlDocument doc = webBrowser1.Document; //Gets the html document
HtmlElement elem = doc.Body.All["testText"]; //Gets the input element
MessageBox.Show(elem.GetAttribute("value")); //Gets the value attribute

我希望这会对你有所帮助。

答案 2 :(得分:0)

我决定使用javascript并添加IE收藏夹或firefox书签来实现这一目标。它从表单中检索数据,从查询字符串将数据发送到aspx页面。然后,aspx页面将数据写入数据库,如果写入成功则显示弹出图形。

以下是该脚本的示例:

javascript:var oForm = document.forms[0];var name = oForm.elements["name"].value; void window.open("http://www.mydomain.com/page.aspx?data=" + name ,"_blank","resizable,height=130,width=130");

每个人,感谢您的建议!!