自动化网站登录和表单填写?

dar*_*rda 5 automation webforms

我正在尝试登录网站并自动保存HTML页面(我希望能够定期执行此操作).从表面上看,这是一个典型的现代网站,如果用户直接导航到"锁定"URL,则会弹出登录表单,登录后,用户将被重定向到目标页面.

我给了机械化一个镜头(http://wwwsearch.sourceforge.net/mechanize/),但它没有找到登录所需的一些表单元素(隐藏元素有一些值由javascript函数放入,当时运行用户单击"登录"按钮).

我在.NET中使用"网络浏览器"控件玩了一下但很快就失去了兴趣,因为我甚至无法在Google页面上提交查询.

我不在乎语言是什么; 我会学习它来解决这个问题.至少它必须在Windows中工作.

一个简单的例子,比如在Google搜索框中输入查询将是一个很好的奖励.

Eya*_*yal 9

根据我的经验,最可靠的方法是使用javascript.它在.Net中运行良好.要进行测试,请在Firefox或Internet Explorer中依次浏览以下地址:

http://www.google.com
javascript:function f(){document.forms[0]['q'].value='stackoverflow';}f();
javascript:document.forms[0].submit()
Run Code Online (Sandbox Code Playgroud)

这会在Google上搜索"stackoverflow".要使用webbrowser控件在VB .Net中执行此操作,请执行以下操作:

WebBrowser1.Navigate("http://www.google.com")
Do While WebBrowser1.IsBusy OrElse WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
    Threading.Thread.Sleep(1000)
    Application.DoEvents()
Loop
WebBrowser1.Navigate("javascript:function%20f(){document.forms[0]['q'].value='stackoverflow';}f();")
Threading.Thread.Sleep(2000) 'wait for javascript to run
WebBrowser1.Navigate("javascript:document.forms[0].submit()")
Threading.Thread.Sleep(2000) 'wait for javascript to run
Run Code Online (Sandbox Code Playgroud)

请注意URL中的空格如何转换为%20.我不确定这是否有必要,但不能伤害.第一个javascript在函数中是很重要的.对Sleep()的调用是等待Google加载,也是等待javascript的东西.如果页面无法加载,Do While循环可能会永远运行,因此出于自动化目的,计数器将在60秒后超时.

当然,对于Google,您可以直接导航到www.google.com?q=stackoverflow,但如果您的网站有隐藏的输入字段等,那么这是可行的方法.仅适用于HTML网站 - 闪存是另一回事.