Criando um robô de navegação na Web em Java – Parte 1/2

Em diversas situações, é conveniente o uso de aplicações automatizadas que naveguem pela internet executando algum comportamento pre-determinado. Para isso, alguma soluções práticas existem, como é caso do iMacros, plugin para o navegador Firefox que te permite gravar um roteiro de navegação na web e futuramente re-executar esse roteiro com 1 clique apenas (Ex: logar automaticamente no site de uma biblioteca e renovar um empréstimo). No entanto, as vezes necessitamos de uma maior flexibilidade na criação desses roteiros, principalmente quando se trata de coletar dados da Web condicionando essa coleta a existência ou não de alguma informação no caminho percorrido. Imagine por exemplo que você deseje deseje criar um robô para percorrer um site de uma loja virtual, visitar a seção de Notebooks, ordenar as ocorrências por Menor Preço, e gerar ao fim uma lista com as ocorrências da primeira página. Uma boa alternativa para isso é a criação de um robô de navegação em Java utilizando a bliblioteca HTTPUnit.

Escrito em Java, HTTPUnit emula porções relevantes do comportamento dos navegadores Web, incluindo o envio de formulários, JavaScript, autenticação básica HTTP, cookies e redirecionamento automático de páginas, permitindo a criação de códigos Java para examinar a presença de elementos contidos no texto, no XML DOM,  além de dar acesso direto a forms, tabelas e links das páginas. Seu propósito inicial é permitir a execução de testes de unidade automatizados em aplicações Web, no entanto, seu uso como “navegador-via-código” permite uma grande variedade de aplicações.

Para fazer uma aplicação de demonstração, faça o download do HTTPUnit acessando o site http://httpunit.sourceforge.net/. Você irá baixar um arquivo provavelmente chamado httpunit-<versão>.zip (Ex: httpunit-1.7.zip). Descompacte o arquivo em alguma pasta. Para facilitar a configuração dos Build-Path e ter acesso fácil ao código e documentação do HTTPUnit, vamos utilizar o Eclipse para agilizar a criação do robô em Java.

Primeiramente vamos adicionar o HTTPUnit ao nosso workspace. Abra o seu Eclipse, vá em File > New > Java Project, em seguida, dê o nome para o projeto de httpunit, selecione a opção Create project from Existing Source, clique no botão Browse que será habilitado e procure a pasta extraída do HTTPUnit no seu computador. Clique em Finish. Agora o HTTPUnit é projeto do seu workspace e está disponível para ser referenciado por outros projetos.

O próximo passo é criar o seu projeto do Robô de Navegação Java. Vá novamente em File > New > Java Project, dê um nome para o seu projeto (Ex: webtest) e clique em Finish. Para que seu projeto tenha acesso ao HTTPUnit, é preciso adicionar esse ultimo ao Build Path. Para isso, clique com o botão direito do mouse sobre o seu projeto no Package Explorer, acesse Build Path > Configure Build Path, acesse a aba Projects, clique em Add, selecione o projeto httpunit criado anteriormente, clique em OK, e em OK novamente, retornando ao ambiente de desenvolvimento. À partir de agora, você poderá referenciar os pacotes do HTTPUnit no seu projeto e acessar seus recursos pelo auto-complete no contexto do seu código.

Agora vamos criar nossa classe robô. No Package Explorer, expanda o seu novo projeto, clique com o botão direito do mouse no ítem SRC > (default package), clique em New > Class. Dê um nome para sua classe (Ex: Webtest) e clique em Finish.

No código da classe Webtest, iremos fazer apenas um método main(), onde ocorrerá toda a navegação.  Primeiramente, vamos fazer um código que irá acessar um URL qualquer e imprimir o título da página resultante:

    public static void main(String[] args) throws Exception {

          WebConversation wc = new WebConversation();

          WebRequest request = new GetMethodWebRequest( "http://www.google.com/" );
          WebResponse response = wc.getResponse( request );

          System.out.println(response.getTitle());
    }

Cole o método acima no seu código, e aperte o atalho CTRL+SHIFT+O para que os pacotes necessários sejam automaticamente inseridos na seção import na sua classe.

Execute sua classe (Run). Caso o Eclipse pergunte o tipo de execução, informe para executar um Java Application. Caso o Eclipse informe que existem erros no projeto httpunit, ingore clicando em Proceed. Isso ocorre pois alguns arquivos de exemplo .java incluídos dentro do HTTPUnit estão com problemas.

Possívelmente, se sua conexão com a internet estiver tudo OK, e o site do Google estiver no ar, você verá na saída do seu console o texto Google, que é o título da página.

Na parte 2 desse tutorial, irei comentar alguns métodos de exploração do HTML do HTTPUnit como vasculhar por links, figuras e formulários, procurar por elementos específicos, além de dar um exemplo básico de navegação automatizada.

Até+

============= AVISO ============

Pessoal, peço desculpas por não ter continuado o tutorial. O fato é que esse artigo foi feito em 2009 e logo depois descobrí que o HTTPUnit fora descontinuado, não ocorrendo nenhum novo release depois de 2008 (http://httpunit.sourceforge.net/). Sugiro que estudem o HTMLUnit (http://htmlunit.sourceforge.net/) que inclusive possui uma documentação muito clara, bastando começar no link “Get Started” da sua página oficial (http://htmlunit.sourceforge.net/gettingStarted.html). Boa sorte! 😉

===============================

8 Responses to Criando um robô de navegação na Web em Java – Parte 1/2

  1. emanuelvianna says:

    Mto massa esse esquema! Bom pra crawler, automatização de testes, geração de carga sintética. Muito útil! Abraços

  2. Renato Molina says:

    olá, primeiramente, muito boa a materia.
    Estou mechendo com a API e estou com algumas duvidas, vocês podem me ajudar?
    Ficaria muito grato.
    renato.molina@hotmail.com

  3. Saullo says:

    Legal, estava buscando alguma API em Java pra montar um crawler e tocar umas idéias aqui! Show de bola!

  4. samuel says:

    eu quero criar um robo mas nao consigo

  5. Olá.
    Já está disponível a parte 2?
    Não a encontrei.
    Obrigado.

  6. Guilherme says:

    Boa tarde, e a parte 2, aonde está, poderia disponibilizar para nós darmos uma olhada?

  7. foxxd says:

    Precisamos da parte 2 !!! =]

  8. Juniel Alves says:

    A parte 2?

Leave a reply to Renato Molina Cancel reply