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

Asked
Viewd27441

5

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

我给了机械化机会( http://wwwsearch.sourceforge.net/mechanize/ )但没有找到登录所需的一些表单元素(隐藏的元素具有当用户单击“登录”按钮时运行的javascript函数所输入的值)。

我在.NET中使用了“网络浏览器”控件,但很快就失去了兴趣,因为我什至没有办法在Google页面上提交查询。

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

一个简单的示例,例如,在Google搜索框中键入查询将是一个很大的收获。

  • 我建议您尝试 AutoHotkey 来实现网页自动化。语法有时会有些不一致,但是我发现该语言非常灵活。

    StevoisiakAugust 29, 2017 16:50

6 个答案

10

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

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

这将在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
 

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

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

  • 您可能是对的。我在项目中使用了其他线程。

    EyalDecember 16, 2009 15:20
  • 如所写,这是行不通的-可能是因为WebBrowser控件在同一线程上运行。但是,如果将“导航”呼叫分为三个按钮单击事件,则很容易测试。再次感谢。

    dardaDecember 16, 2009 04:31
1

已经在讨论这里

基本上,您可以使用 selenium (一种开放源代码网络自动化工具,拥有具有各种语言(如Java,Ruby等)的api库。

0

我已经使用Ruby和Watir(一个Web应用程序测试套件)进行了类似的操作,但这是一个非常小的任务(基本上是从文本文件访问URL并下载图像)。

还有一个名为iMacros的扩展程序,它可以执行一些自动化操作,但是我个人并不了解它(对此一无所知)。

0

“我正在尝试登录网站并自动保存HTML页面”

  SAVEAS TYPE=HTM FOLDER=C: FILE=page.html
 

https://addons.mozilla.org / zh-CN / firefox / addon / imacros-for-firefox /?src = search

在iMacros插件中播放的此命令会将页面保存在C:驱动器上,并将其命名为page.html

 URL GOTO=www.website.com
 

转到您要保存的特定网站。您还可以在iMacros中使用脚本,并在宏中设置其他网站。

2

如果我理解正确,那么您只想登录一个网页,该表格将始终保持不变。您可以对Java脚本进行反向工程,也可以通过浏览器中的JavaScript调试器对其进行调试(例如,firefox中的firebug)。或者,您可以在浏览器中填写表格,并通过网络数据包嗅探器查看http请求。提交所有必需的表单数据后,就可以对程序进行相同的操作(这就是我上次执行非常相似的任务时所做的事情)。不要忘记存储您从网络服务器请求的所有cookie数据,并将其与下一个请求一起发送,以“保持登录状态”。

  • 听起来像是可行的解决方案,但是数据包嗅探远远超出了我的能力范围。

    dardaNovember 13, 2009 21:09
0

Neoload 可以处理带有身份验证的表单填充,假设您不想收集数据,只需执行动作。这是一个Web压力工具,因此并不是真正要用作基于时间的服务,但是您可以让它保持运行状态。

  • 如果在“收集数据”中包括“保存结果HTML页面”,那么这并不能满足我的要求。

    dardaNovember 13, 2009 20:55