编程语言自动导航网站?

时间:2009-11-17 20:10:55

标签: scripting

我已经编程多年了,我只有一个问题。

您可以使用哪种编程语言创建可自动浏览网站并执行各种操作的程序?例如,登录,浏览到特定页面,填写表单,提取某些文本等等。

这与宏不同,因为宏仅执行一组预定义的操作。另一方面,程序的行为会有所不同,具体取决于屏幕上显示的内容。

也许是某种脚本语言?或者是通用语言。您的回答将不胜感激。

9 个答案:

答案 0 :(得分:8)

我一直在使用Ruby和watir来实现这一点,它非常直接,可以自动化IE或Firefox。

使用这种方法浏览器处理任何JavaScript混乱,但您仍然可以完全访问页面内容,因此您只需要添加您的独特逻辑,例如填写在线表单

答案 1 :(得分:6)

对于Perl,WWW::Mechanize是用于浏览网站的标准工具。它处理cookie,会话,知道如何与表单交互,执行点击等。它保持着状态。

它的一个缺点是没有处理javascript。有一些Perl模块可以与Javascript交互,但它们没有与WWW :: Mechanize集成。

答案 2 :(得分:5)

其中许多答案都是针对抓取应用程序的。如果这是您想要的,请使用您选择的语言中的等效WWW :: Mechanize(Perl是规范的,Python也很好用)。

但是,根据您的问题,您可能希望自动化网站的单元测试。如果是这种情况,除了用于测试任何给定页面的返回HTML的正确性的框架之外,您还需要一个浏览器内测试框架。

两个突出的是TwillSelenium

这些提供了您所要求的:从脚本浏览网站的简单界面。它们允许更多地控制您的浏览,特别是关于javascript和各种类型的效果,这些效果在您离开路径的网站中前进和后退时表现出来。

答案 3 :(得分:3)

我相信你不是在寻找一种语言,而是一种允许你这样做的框架。这通常由web scraping software完成。有一些在线服务,例如Mozenda允许你做简单的事情。还有一些框架可以帮助您以更严格的方式执行此操作。我对screen-scraper有一些经验,我认为这是最丰富的功能之一。

另一种类型的框架是网络爬虫 - 这是通过一个网站并将其编入索引(就像搜索引擎一样。

答案 4 :(得分:2)

您可以在Perl中使用LWP::Simple

您可以在网上找到很多信息,但Getting more out of LWP::Simple是关于Perlmonks的教程。

答案 5 :(得分:1)

我当然会选择一些脚本语言,Ruby / Mechanize是我最喜欢的,看看一些examples ... Perl和Python也是不错的选择。除非有计划让它成为其他应用程序的一部分,否则我会避免使用静态类型语言 - 太多样板代码恕我直言。

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
page = agent.get('http://google.com/')
google_form = page.form('f')
google_form.q = 'ruby mechanize'
page = agent.submit(google_form)
pp page

Mechanize是非常棒的库,因为它不仅仅是普通的HTTP GET / POST请求和获取:它跟踪cookie,从而密切模拟真实的Web浏览器行为。

答案 6 :(得分:1)

WatiN是浏览和执行各种操作的另一种.Net方法。

答案 7 :(得分:0)

现在几乎所有语言都会这样做,在linux中使用perl,php / curl,在Windows中使用asp / C#。

检查一下 - PHP Form Filling Tutorial

答案 8 :(得分:-1)

您可以使用C#

中的WebRequest对象完成所有这些操作
public static void Main ()
{
    // Create a request for the URL.         
    WebRequest request = WebRequest.Create ("http://www.contoso.com/default.html");
    // If required by the server, set the credentials.
    request.Credentials = CredentialCache.DefaultCredentials;
    // Get the response.
    HttpWebResponse response = (HttpWebResponse)request.GetResponse ();
    // Display the status.
    Console.WriteLine (response.StatusDescription);
    // Get the stream containing content returned by the server.
    Stream dataStream = response.GetResponseStream ();
    // Open the stream using a StreamReader for easy access.
    StreamReader reader = new StreamReader (dataStream);
    // Read the content.
    string responseFromServer = reader.ReadToEnd ();
    // Display the content.
    Console.WriteLine (responseFromServer);
    // Cleanup the streams and the response.
    reader.Close ();
    dataStream.Close ();
    response.Close ();
}