Dia desses me perguntaram se eu sabia como fazer um programa para enviar vários arquivos para uma página da web processar, receber o resultado do processamento e salvar de volta no computador, isso para cada arquivo. Daí, como não conhecia algo que fizesse isso, resolvi procurar algo para a linguagem Java, já que achei que era mais fácil trabalhar com a filosofia de orientação a objeto. E acabei encontrando o HtmlUnit.
O HtmlUnit é um navegador sem interface para programas em Java. Ele modela documentos HTML e provê uma API que permite carregar páginas, preencher formulários, clicar em links, etc.
Ou seja, o que eu estava procurando. Eu, particularmente, achei bem fácil de aprender e de manipular. Basicamente, ele transforma cada elemento da página em um objeto (desde que esteja delimitado por tags), e daí você pode verificar qual o conteúdo (um parágrafo, por exemplo), atribuir valores (formulários), e clicar em link, que levam a outras páginas.
Instalação
Antes de começar a programar, o primeiro passo é baixar e instalar a biblioteca na sua IDE. Neste tutorial, estou usando o NetBeans 7.3.1.
- Baixe a versão compilada mais nova (htmlunit-x.xx-bin.zip), e descompacte-a
- No NetBeans, vá em Ferramentas > Bibliotecas Ant > "Nova Biblioteca...", coloque o nome (HtmlUnit) e dê OK
- Depois de criar, na mesma janela, selecione-a na lista à esquerda (se não estiver selecionada), clique em Adicionar JAR/Pasta, e selecione todos os arquivos da pasta lib do arquivo descompactado
Feito isto, a biblioteca deve estar instalada. Para utilizá-la no seu projeto, vá nas propriedades > Bibliotecas > Adicionar Biblioteca e adicione a HtmlUnit.
Guia rápido
Para começar, você deve criar um objeto que será seu navegador.
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);
O parâmetro para o construtor é o user agent, ou seja, como a sua aplicação será reconhecida pelo servidor web. Se você não especificar nenhum, ele usará o padrão, que é o Internet Explorer 8.
Com o seu webClient, você pode carregar páginas:
final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");
E a partir daí você pode fazer o que você quer. Por exemplo, se você quer saber o conteúdo de uma div cuja id é box1, basta fazer
HtmlDivision div = page.getHtmlElementById("box1");
System.out.println(div.asText());
Se você quer um formulário, basta saber o nome dele (atributo name), pegar os campos, alterar o conteúdo e enviar:
HtmlForm form = page.getFormByName("login-form");
HtmlSubmitInput button = form.getInputByValue("Submit");
form.getInputByName("username").setValueAttribute("admin");
form.getInputByName("password").setValueAttribute("1234");
HtmlPage page2 = button.click();
A página devolvida depois que o formulário for enviado será, então, armazenada em page2.
Quando fizer tudo que você quer, lembre-se de fechar todas as "janelas" :P
webClient.closeAllWindows();
Isso é o mínimo que este framework faz. O próprio site tem uns tutoriais bem legais, que dão uma boa base.
Fica a dica ;)
Links
Página principal: http://htmlunit.sourceforge.net/
Tutoriais: http://htmlunit.sourceforge.net/gettingStarted.html
Documentação: http://htmlunit.sourceforge.net/apidocs/index.html
Tamanha facilidade assim me espanta. :)
ResponderExcluirshow de bola, é o que eu preciso!:p
ResponderExcluir